1 package org.ejen.ext; 22 23 import org.ejen.util.XSLUtil; 24 import java.util.Hashtable ; 25 import java.util.Enumeration ; 26 import org.w3c.dom.Document ; 27 import org.apache.xml.utils.WrappedRuntimeException; 28 import org.apache.xalan.extensions.XSLProcessorContext; 29 import org.apache.xalan.extensions.ExpressionContext; 30 import org.apache.xalan.templates.ElemExtensionCall; 31 import org.apache.xpath.objects.XObject; 32 import org.apache.xpath.objects.XString; 33 import org.apache.xpath.objects.XNodeSet; 34 import org.apache.xpath.objects.XRTreeFrag; 35 import org.apache.xpath.NodeSet; 36 37 86 public class GlobalVariables { 87 88 89 private Hashtable _vars = null; 90 91 101 public GlobalVariables() { 102 _vars = new Hashtable (); 103 } 104 105 120 public GlobalVariables(GlobalVariables gvs) { 121 _vars = new Hashtable (gvs._vars); 122 } 123 124 142 public void clear(XSLProcessorContext context, ElemExtensionCall elem) { 143 Object o = XSLUtil.getOAttribute(context, elem, "instance", 144 GlobalVariables.class, false, false); 145 146 if (o == null) { 147 _vars.clear(); 148 } else { 149 ((GlobalVariables) o)._vars.clear(); 150 } 151 } 152 153 169 public int size(ExpressionContext context) { 170 return _vars.size(); 171 } 172 173 192 public void remove(XSLProcessorContext context, ElemExtensionCall elem) { 193 String name = XSLUtil.getAttribute(context, elem, "name", true); 194 Object o = XSLUtil.getOAttribute(context, elem, "instance", 195 GlobalVariables.class, false, false); 196 197 if (o == null) { 198 _vars.remove(name); 199 } else { 200 ((GlobalVariables) o)._vars.remove(name); 201 } 202 } 203 204 235 public void put(XSLProcessorContext context, ElemExtensionCall elem) { 236 XObject xo = null; 237 String name = XSLUtil.getAttribute(context, elem, "name", true); 238 String select = XSLUtil.getAttribute(context, elem, "select", false); 239 Object o = XSLUtil.getOAttribute(context, elem, "instance", 240 GlobalVariables.class, false, false); 241 242 if (select != null) { 243 xo = XSLUtil.evaluate(context, elem, select); 244 if (xo == null) { 245 throw new WrappedRuntimeException(new IllegalArgumentException ("bad \"select\" attribute ?!")); 246 } 247 } else { 248 String s = XSLUtil.getAttribute(context, elem, "attribute", false); 249 250 if (s != null) { 251 xo = new XString(s); 252 } 253 } 254 if (xo == null) { 255 xo = new XString("(no value)"); 256 } 257 if (o == null) { 258 _vars.put(name, xo); 259 } else { 260 ((GlobalVariables) o)._vars.put(name, xo); 261 } 262 } 263 264 283 public XObject get(ExpressionContext context, String name) { 284 return (XObject) (_vars.get(XSLUtil.evaluate(context, name))); 285 } 286 287 308 public XObject get(XSLProcessorContext context, ElemExtensionCall elem) { 309 Object o = XSLUtil.getOAttribute(context, elem, "instance", 310 GlobalVariables.class, false, false); 311 String name = XSLUtil.getAttribute(context, elem, "name", true); 312 313 if (o == null) { 314 return (XObject) (_vars.get(name)); 315 } else { 316 return (XObject) (((GlobalVariables) o)._vars.get(name)); 317 } 318 } 319 320 348 public NodeSet elements(ExpressionContext context) { 349 Document doc = XSLUtil.getContextDocument(context); 350 351 try { 352 NodeSet ns = new NodeSet(); 353 354 for (Enumeration e = _vars.elements(); e.hasMoreElements();) { 355 XObject xo = (XObject) (e.nextElement()); 356 357 if (xo instanceof XNodeSet) { 358 ns.addNodes(xo.nodeset()); 359 } else if (xo instanceof XRTreeFrag) { 360 ns.addNodes(((XRTreeFrag) xo).convertToNodeset()); 361 } else { 362 ns.addElement(doc.createCDATASection(xo.toString())); 363 } 364 } 365 return ns; 366 } catch (Exception e) { 367 throw new WrappedRuntimeException(e); 368 } 369 } 370 371 395 public NodeSet keys(ExpressionContext context) { 396 Document doc = XSLUtil.getContextDocument(context); 397 398 try { 399 NodeSet ns = new NodeSet(); 400 401 for (Enumeration e = _vars.keys(); e.hasMoreElements();) { 402 ns.addElement(doc.createCDATASection((String ) (e.nextElement()))); 403 } 404 return ns; 405 } catch (Exception e) { 406 throw new WrappedRuntimeException(e); 407 } 408 } 409 } 410
| Popular Tags
|