1 /
55
56
61 package org.apache.poi.hssf.record.formula;
62
63 import java.util.List;
64 import java.util.ArrayList;
65
66 import org.apache.poi.hssf.util.SheetReferences;
67
68
74
75 public abstract class Ptg
76 {
77
78
79
83
84
131
132 public static Ptg createPtg(byte [] data, int offset)
133 {
134 byte id = data[ offset + 0 ];
135 Ptg retval = null;
136
137 final byte valueRef = ReferencePtg.sid + 0x20;
138 final byte arrayRef = ReferencePtg.sid + 0x40;
139 final byte valueFunc = FuncPtg.sid + 0x20;
140 final byte arrayFunc = FuncPtg.sid + 0x40;
141 final byte valueFuncVar = FuncVarPtg.sid +0x20;
142 final byte arrayFuncVar = FuncVarPtg.sid+0x40;
143 final byte valueArea = AreaPtg.sid + 0x20;
144 final byte arrayArea = AreaPtg.sid + 0x40;
145
146 switch (id)
147 {
148 case AddPtg.sid :
149 retval = new AddPtg(data, offset);
150 break;
151
152 case SubtractPtg.sid :
153 retval = new SubtractPtg(data, offset);
154 break;
155
156 case BoolPtg.sid:
157 retval = new BoolPtg(data, offset);
158 break;
159
160 case IntPtg.sid :
161 retval = new IntPtg(data, offset);
162 break;
163
164 case DividePtg.sid :
165 retval = new DividePtg(data, offset);
166 break;
167
168 case MultiplyPtg.sid :
169 retval = new MultiplyPtg(data, offset);
170 break;
171
172 case PowerPtg.sid :
173 retval = new PowerPtg(data, offset);
174 break;
175
176 case EqualPtg.sid:
177 retval = new EqualPtg(data, offset);
178 break;
179
180 case ConcatPtg.sid :
181 retval = new ConcatPtg(data, offset);
182 break;
183
184 case AreaPtg.sid :
185 retval = new AreaPtg(data, offset);
186 break;
187 case valueArea:
188 retval = new AreaPtg(data, offset);
189 break;
190 case arrayArea:
191 retval = new AreaPtg(data, offset);
192 break;
193 case MemErrPtg.sid :
194 case MemErrPtg.sid+0x20 :
195 case MemErrPtg.sid+0x40 :
196 retval = new MemErrPtg(data, offset);
197 break;
198
199 case AttrPtg.sid :
200 retval = new AttrPtg(data, offset);
201 break;
202
203 case ReferencePtg.sid :
204 retval = new ReferencePtg(data, offset);
205 break;
206 case valueRef :
207 retval = new ReferencePtg(data, offset);
208 break;
209 case arrayRef :
210 retval = new ReferencePtg(data, offset);
211 break;
212
213 case ParenthesisPtg.sid :
214 retval = new ParenthesisPtg(data, offset);
215 break;
216
217 case MemFuncPtg.sid :
218 retval = new MemFuncPtg(data, offset);
219 break;
220
221 case UnionPtg.sid :
222 retval = new UnionPtg(data, offset);
223 break;
224
225 case FuncPtg.sid :
226 retval = new FuncPtg(data, offset);
227 break;
228
229 case valueFunc :
230 retval = new FuncPtg(data, offset);
231 break;
232 case arrayFunc :
233 retval = new FuncPtg(data, offset);
234 break;
235
236 case FuncVarPtg.sid :
237 retval = new FuncVarPtg(data, offset);
238 break;
239
240 case valueFuncVar :
241 retval = new FuncVarPtg(data, offset);
242 break;
243 case arrayFuncVar :
244 retval = new FuncVarPtg(data, offset);
245 break;
246
247 case NumberPtg.sid :
248 retval = new NumberPtg(data, offset);
249 break;
250
251 case StringPtg.sid :
252 retval = new StringPtg(data, offset);
253 break;
254
255 case NamePtg.sid :
256 case NamePtg.sid+0x20 :
257 case NamePtg.sid+0x40 :
258
259 retval = new NamePtg(data, offset);
260 break;
261
262 case ExpPtg.sid :
263 retval = new ExpPtg(data, offset);
264 break;
265
266 case Area3DPtg.sid :
267 case Area3DPtg.sid+0x20 :
268 case Area3DPtg.sid+0x40 :
269
270 retval = new Area3DPtg(data, offset);
271 break;
272
273 case Ref3DPtg.sid:
274 case Ref3DPtg.sid+0x20:
275 case Ref3DPtg.sid+0x40:
276
277 retval = new Ref3DPtg(data, offset);
278 break;
279
280 case MissingArgPtg.sid:
281 retval = new MissingArgPtg(data,offset);
282 break;
283
284 default :
285
286
287 throw new java.lang.UnsupportedOperationException(
288 Integer.toHexString(( int ) id) + " (" + ( int ) id + ")");
289 }
290
291 if (id > 0x60) {
292 retval.setClass(CLASS_ARRAY);
293 } else if (id > 0x40) {
294 retval.setClass(CLASS_VALUE);
295 } else
296 retval.setClass(CLASS_REF);
297 return retval;
298
299 }
300
301 public abstract int getSize();
302
303 public final byte [] getBytes()
304 {
305 int size = getSize();
306 byte[] bytes = new byte[ size ];
307
308 writeBytes(bytes, 0);
309 return bytes;
310 }
311
312 public abstract void writeBytes(byte [] array, int offset);
313
314
317 public abstract String toFormulaString(SheetReferences refs);
318
321 public String toDebugString() {
322 byte[] ba = new byte[getSize()];
323 String retval=null;
324 writeBytes(ba,0);
325 try {
326 retval = org.apache.poi.util.HexDump.dump(ba,0,0);
327 } catch (Exception e) {
328 e.printStackTrace();
329 }
330 return retval;
331 }
332
333 public static final byte CLASS_REF = 0x00;
334 public static final byte CLASS_VALUE = 0x20;
335 public static final byte CLASS_ARRAY = 0x40;
336
337 protected byte ptgClass = CLASS_REF;
338
339 public void setClass(byte thePtgClass) {
340 ptgClass = thePtgClass;
341 }
342
343
344 public byte getPtgClass() {
345 return ptgClass;
346 }
347
348 public abstract byte getDefaultOperandClass();
349
350 public abstract Object clone();
351
352
353
354 }
355