1 package org.ejen.ext; 22 23 import org.ejen.util.XSLUtil; 24 import org.apache.xalan.extensions.XSLProcessorContext; 25 import org.apache.xalan.extensions.ExpressionContext; 26 import org.apache.xalan.templates.ElemExtensionCall; 27 import org.apache.xml.utils.WrappedRuntimeException; 28 29 70 public class Counter { 71 72 73 private static final int DEFAULT_INITIAL_VALUE = 1; 74 75 76 private int _value; 77 78 88 public Counter() { 89 _value = DEFAULT_INITIAL_VALUE; 90 } 91 92 106 public Counter(int value) { 107 _value = value; 108 } 109 110 125 public Counter(Counter cnt) { 126 _value = cnt._value; 127 } 128 129 149 public void reset(XSLProcessorContext context, ElemExtensionCall elem) { 150 Object o = XSLUtil.getOAttribute(context, elem, "instance", 151 Counter.class, false, false); 152 String value = null; 153 154 try { 155 value = elem.getAttribute("value", context.getContextNode(), 156 context.getTransformer()); 157 int iValue = (value != null) 158 ? Integer.parseInt(value) 159 : DEFAULT_INITIAL_VALUE; 160 161 if (o == null) { 162 _value = iValue; 163 } else { 164 ((Counter) o)._value = iValue; 165 } 166 } catch (Exception e) { 167 throw new WrappedRuntimeException(Counter.class.getName() 168 + ".reset : exception while getting or parsing node attribute 'value' or 'instance'", 169 e); 170 } 171 } 172 173 193 public void incr(XSLProcessorContext context, ElemExtensionCall elem) { 194 Object o = XSLUtil.getOAttribute(context, elem, "instance", 195 Counter.class, false, false); 196 String step = null; 197 198 try { 199 step = elem.getAttribute("step", context.getContextNode(), 200 context.getTransformer()); 201 int iStep = (step != null) ? Integer.parseInt(step) : 1; 202 203 if (o == null) { 204 _value += iStep; 205 } else { 206 ((Counter) o)._value += iStep; 207 } 208 } catch (Exception e) { 209 throw new WrappedRuntimeException(Counter.class.getName() 210 + ".incr : exception while getting or parsing node attribute 'step'", 211 e); 212 } 213 } 214 215 232 public int read(XSLProcessorContext context, ElemExtensionCall elem) { 233 Object o = XSLUtil.getOAttribute(context, elem, "instance", 234 Counter.class, false, false); 235 236 if (o == null) { 237 return _value; 238 } else { 239 return ((Counter) o)._value; 240 } 241 } 242 243 259 public int read(ExpressionContext context) { 260 return _value; 261 } 262 263 284 public int incrAndRead(XSLProcessorContext context, ElemExtensionCall elem) { 285 Object o = XSLUtil.getOAttribute(context, elem, "instance", 286 Counter.class, false, false); 287 String step = null; 288 289 try { 290 step = elem.getAttribute("step", context.getContextNode(), 291 context.getTransformer()); 292 int iStep = (step != null) ? Integer.parseInt(step) : 1; 293 294 if (o == null) { 295 _value += iStep; 296 } else { 297 ((Counter) o)._value += iStep; 298 } 299 } catch (Exception e) { 300 throw new WrappedRuntimeException(Counter.class.getName() 301 + ".incrAndRead : exception while getting or parsing node attribute 'step' or 'instance'", 302 e); 303 } 304 return _value; 305 } 306 307 323 public int incrAndRead(ExpressionContext context) { 324 return ++_value; 325 } 326 327 346 public int incrAndRead(ExpressionContext context, int step) { 347 return (_value += step); 348 } 349 350 371 public int readAndIncr(XSLProcessorContext context, ElemExtensionCall elem) { 372 Object o = XSLUtil.getOAttribute(context, elem, "instance", 373 Counter.class, false, false); 374 int oldValue = _value; 375 String step = null; 376 377 try { 378 step = elem.getAttribute("step", context.getContextNode(), 379 context.getTransformer()); 380 int iStep = (step != null) ? Integer.parseInt(step) : 1; 381 382 if (o == null) { 383 _value += iStep; 384 } else { 385 ((Counter) o)._value += iStep; 386 } 387 } catch (Exception e) { 388 throw new WrappedRuntimeException(Counter.class.getName() 389 + ".readAndIncr : exception while getting or parsing node attribute 'step' or 'instance'", 390 e); 391 } 392 return oldValue; 393 } 394 395 411 public int readAndIncr(ExpressionContext context) { 412 return _value++; 413 } 414 415 434 public int readAndIncr(ExpressionContext context, int step) { 435 int oldValue = _value; 436 437 _value += step; 438 return oldValue; 439 } 440 } 441
| Popular Tags
|