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 }
102
103 public void setOptions(byte options)
104 {
105 field_1_options = options;
106 }
107
108 public byte getOptions()
109 {
110 return field_1_options;
111 }
112
113 public boolean isSemiVolatile()
114 {
115 return semiVolatile.isSet(getOptions());
116 }
117
118 public boolean isOptimizedIf()
119 {
120 return optiIf.isSet(getOptions());
121 }
122
123 public boolean isOptimizedChoose()
124 {
125 return optiChoose.isSet(getOptions());
126 }
127
128
129 public boolean isGoto()
130 {
131 return optGoto.isSet(getOptions());
132 }
133
134 public boolean isSum()
135 {
136 return sum.isSet(getOptions());
137 }
138
139 public void setSum(boolean bsum) {
140 field_1_options=sum.setByteBoolean(field_1_options,bsum);
141 }
142
143 public void setOptimizedIf(boolean bif) {
144 field_1_options=optiIf.setByteBoolean(field_1_options,bif);
145 }
146
147
148 public boolean isBaxcel()
149 {
150 return baxcel.isSet(getOptions());
151 }
152
153
154 public boolean isSpace()
155 {
156 return space.isSet(getOptions());
157 }
158
159 public void setData(short data)
160 {
161 field_2_data = data;
162 }
163
164 public short getData()
165 {
166 return field_2_data;
167 }
168
169 public String toString()
170 {
171 StringBuffer buffer = new StringBuffer();
172
173 buffer.append("AttrPtg\n");
174 buffer.append("options=").append(field_1_options).append("\n");
175 buffer.append("data =").append(field_2_data).append("\n");
176 buffer.append("semi =").append(isSemiVolatile()).append("\n");
177 buffer.append("optimif=").append(isOptimizedIf()).append("\n");
178 buffer.append("optchos=").append(isOptimizedChoose()).append("\n");
179 buffer.append("isGoto =").append(isGoto()).append("\n");
180 buffer.append("isSum =").append(isSum()).append("\n");
181 buffer.append("isBaxce=").append(isBaxcel()).append("\n");
182 buffer.append("isSpace=").append(isSpace()).append("\n");
183 return buffer.toString();
184 }
185
186 public void writeBytes(byte [] array, int offset)
187 {
188 array[offset]=sid;
189 array[offset+1]=field_1_options;
190 LittleEndian.putShort(array,offset+2,field_2_data);
191 }
192
193 public int getSize()
194 {
195 return SIZE;
196 }
197
198 public String toFormulaString(String[] operands) {
199 if(space.isSet(field_1_options)) {
200 return operands[ 0 ];
201 } else if (optiIf.isSet(field_1_options)) {
202 return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ] +")";
203 } else if (optGoto.isSet(field_1_options)) {
204 return toFormulaString((SheetReferences)null) + operands[0];
205 } else {
206 return toFormulaString((SheetReferences)null) + "(" + operands[ 0 ] + ")";
207 }
208 }
209
210
211 public int getNumberOfOperands()
212 {
213 return 1;
214 }
215
216 public int getType()
217 {
218 return -1;
219 }
220
221 public String toFormulaString(SheetReferences refs) {
222 if(semiVolatile.isSet(field_1_options)) {
223 return "ATTR(semiVolatile)";
224 }
225 if(optiIf.isSet(field_1_options)) {
226 return "IF";
227 }
228 if( optiChoose.isSet(field_1_options)) {
229 return "CHOOSE";
230 }
231 if(optGoto.isSet(field_1_options)) {
232 return "";
233 }
234 if(sum.isSet(field_1_options)) {
235 return "SUM";
236 }
237 if(baxcel.isSet(field_1_options)) {
238 return "ATTR(baxcel)";
239 }
240 if(space.isSet(field_1_options)) {
241 return "";
242 }
243 return "UNKNOWN ATTRIBUTE";
244 }
245
246
247
248 public byte getDefaultOperandClass() {return Ptg.CLASS_VALUE;}
249
250 public Object clone() {
251 AttrPtg ptg = new AttrPtg();
252 ptg.field_1_options = field_1_options;
253 ptg.field_2_data = field_2_data;
254 return ptg;
255 }
256 }
257