1 /
55
56
61 package org.apache.poi.hssf.record.formula;
62
63 import org.apache.poi.hssf.util.SheetReferences;
64
65 import org.apache.poi.util.LittleEndian;
66 import org.apache.poi.util.BitField;
67
68 import java.util.List;
69
70
77
78 public class AttrPtg
79 extends OperationPtg
80 {
81 public final static byte sid = 0x19;
82 private final static int SIZE = 4;
83 private byte field_1_options;
84 private short field_2_data;
85 private BitField semiVolatile = new BitField(0x01);
86 private BitField optiIf = new BitField(0x02);
87 private BitField optiChoose = new BitField(0x04);
88 private BitField optGoto = new BitField(0x08);
89 private BitField sum = new BitField(0x10);
90 private BitField baxcel = new BitField(0x20);
91 private BitField space = new BitField(0x40);
92
93 public AttrPtg() {
94 }
95
96 public AttrPtg(byte [] data, int offset)
97 {
98 offset++;
99 field_1_options = data[ offset + 0 ];
100 field_2_data = LittleEndian.getShort(data, offset + 1);
101 System.out.println("OPTIONS = " + Integer.toHexString(getOptions()));
102 System.out.println("OPTIONS & 0x10 = " + (getOptions() & 0x10));
103
104 }
105
106 public void setOptions(byte options)
107 {
108 field_1_options = options;
109 }
110
111 public byte getOptions()
112 {
113 return field_1_options;
114 }
115
116 public boolean isSemiVolatile()
117 {
118 return semiVolatile.isSet(getOptions());
119 }
120
121 public boolean isOptimizedIf()
122 {
123 return optiIf.isSet(getOptions());
124 }
125
126 public boolean isOptimizedChoose()
127 {
128 return optiChoose.isSet(getOptions());
129 }
130
131
132 public boolean isGoto()
133 {
134 return optGoto.isSet(getOptions());
135 }
136
137 public boolean isSum()
138 {
139 return sum.isSet(getOptions());
140 }
141
142 public void setSum(boolean bsum) {
143 field_1_options=sum.setByteBoolean(field_1_options,bsum);
144 }
145
146 public void setOptimizedIf(boolean bif) {
147 field_1_options=optiIf.setByteBoolean(field_1_options,bif);
148 }
149
150
151 public boolean isBaxcel()
152 {
153 return baxcel.isSet(getOptions());
154 }
155
156
157 public boolean isSpace()
158 {
159 return space.isSet(getOptions());
160 }
161
162 public void setData(short data)
163 {
164 field_2_data = data;
165 }
166
167 public short getData()
168 {
169 return field_2_data;
170 }
171
172 public String toString()
173 {
174 StringBuffer buffer = new StringBuffer();
175
176 buffer.append("AttrPtg\n");
177 buffer.append("options=").append(field_1_options).append("\n");
178 buffer.append("data =").append(field_2_data).append("\n");
179 buffer.append("semi =").append(isSemiVolatile()).append("\n");
180 buffer.append("optimif=").append(isOptimizedIf()).append("\n");
181 buffer.append("optchos=").append(isOptimizedChoose()).append("\n");
182 buffer.append("isGoto =").append(isGoto()).append("\n");
183 buffer.append("isSum =").append(isSum()).append("\n");
184 buffer.append("isBaxce=").append(isBaxcel()).append("\n");
185 buffer.append("isSpace=").append(isSpace()).append("\n");
186 return buffer.toString();
187 }
188
189 public void writeBytes(byte [] array, int offset)
190 {
191 array[offset]=sid;
192 array[offset+1]=field_1_options;
193 LittleEndian.putShort(array,offset+2,field_2_data);
194 }
195
196 public int getSize()
197 {
198 return SIZE;
199 }
200
201 public String toFormulaString(String[] operands) {
202 if(space.isSet(field_1_options)) {
203 return operands[ 0 ];
204 } else if (optiIf.isSet(field_1_options)) {
205 return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ] +")";
206 } else if (optGoto.isSet(field_1_options)) {
207 return toFormulaString((SheetReferences)null) + operands[0];
208 } else {
209 return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ] + ")";
210 }
211 }
212
213
214 public int getNumberOfOperands()
215 {
216 return 1;
217 }
218
219 public int getType()
220 {
221 return -1;
222 }
223
224 public String toFormulaString(SheetReferences refs) {
225 if(semiVolatile.isSet(field_1_options)) {
226 return "ATTR(semiVolatile)";
227 }
228 if(optiIf.isSet(field_1_options)) {
229 return "IF";
230 }
231 if( optiChoose.isSet(field_1_options)) {
232 return "CHOOSE";
233 }
234 if(optGoto.isSet(field_1_options)) {
235 return "";
236 }
237 if(sum.isSet(field_1_options)) {
238 return "SUM";
239 }
240 if(baxcel.isSet(field_1_options)) {
241 return "ATTR(baxcel)";
242 }
243 if(space.isSet(field_1_options)) {
244 return "";
245 }
246 return "UNKNOWN ATTRIBUTE";
247 }
248
249
250
251 public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
252
253 public Object clone() {
254 AttrPtg ptg = new AttrPtg();
255 ptg.field_1_options = field_1_options;
256 ptg.field_2_data = field_2_data;
257 return ptg;
258 }
259 }
260