1 16 19 20 package org.apache.xalan.xsltc.trax; 21 22 import javax.xml.transform.Result ; 23 import javax.xml.transform.Transformer ; 24 import javax.xml.transform.TransformerException ; 25 import javax.xml.transform.sax.TransformerHandler ; 26 27 import org.apache.xalan.xsltc.StripFilter; 28 import org.apache.xalan.xsltc.compiler.util.ErrorMsg; 29 import org.apache.xalan.xsltc.dom.DOMWSFilter; 30 import org.apache.xalan.xsltc.dom.SAXImpl; 31 import org.apache.xalan.xsltc.dom.XSLTCDTMManager; 32 import org.apache.xalan.xsltc.runtime.AbstractTranslet; 33 import org.apache.xml.dtm.DTMWSFilter; 34 import org.apache.xml.serializer.SerializationHandler; 35 36 import org.xml.sax.Attributes ; 37 import org.xml.sax.ContentHandler ; 38 import org.xml.sax.DTDHandler ; 39 import org.xml.sax.Locator ; 40 import org.xml.sax.SAXException ; 41 import org.xml.sax.ext.DeclHandler ; 42 import org.xml.sax.ext.LexicalHandler ; 43 import org.xml.sax.helpers.DefaultHandler ; 44 45 49 public class TransformerHandlerImpl implements TransformerHandler , DeclHandler { 50 51 private TransformerImpl _transformer; 52 private AbstractTranslet _translet = null; 53 private String _systemId; 54 private SAXImpl _dom = null; 55 private ContentHandler _handler = null; 56 private LexicalHandler _lexHandler = null; 57 private DTDHandler _dtdHandler = null; 58 private DeclHandler _declHandler = null; 59 private Result _result = null; 60 private Locator _locator = null; 61 62 private boolean _done = false; 64 68 private boolean _isIdentity = false; 69 70 73 public TransformerHandlerImpl(TransformerImpl transformer) { 74 _transformer = transformer; 76 77 if (transformer.isIdentity()) { 78 _handler = new DefaultHandler (); 80 _isIdentity = true; 81 } 82 else { 83 _translet = _transformer.getTranslet(); 85 } 86 } 87 88 94 public String getSystemId() { 95 return _systemId; 96 } 97 98 104 public void setSystemId(String id) { 105 _systemId = id; 106 } 107 108 114 public Transformer getTransformer() { 115 return _transformer; 116 } 117 118 125 public void setResult(Result result) throws IllegalArgumentException { 126 _result = result; 127 128 if (null == result) { 129 ErrorMsg err = new ErrorMsg(ErrorMsg.ER_RESULT_NULL); 130 throw new IllegalArgumentException (err.toString()); } 132 133 if (_isIdentity) { 134 try { 135 SerializationHandler outputHandler = 137 _transformer.getOutputHandler(result); 138 _transformer.transferOutputProperties(outputHandler); 139 140 _handler = outputHandler; 141 _lexHandler = outputHandler; 142 } 143 catch (TransformerException e) { 144 _result = null; 145 } 146 } 147 else if (_done) { 148 try { 150 _transformer.setDOM(_dom); 151 _transformer.transform(null, _result); 152 } 153 catch (TransformerException e) { 154 throw new IllegalArgumentException (e.getMessage()); 156 } 157 } 158 } 159 160 164 public void characters(char[] ch, int start, int length) 165 throws SAXException 166 { 167 _handler.characters(ch, start, length); 168 } 169 170 174 public void startDocument() throws SAXException { 175 if (_result == null) { 177 ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_SET_RESULT_ERR); 178 throw new SAXException (err.toString()); 179 } 180 181 if (!_isIdentity) { 182 boolean hasIdCall = (_translet != null) ? _translet.hasIdCall() : false; 183 XSLTCDTMManager dtmManager = null; 184 185 try { 187 dtmManager = 188 (XSLTCDTMManager)_transformer.getTransformerFactory() 189 .getDTMManagerClass() 190 .newInstance(); 191 } catch (Exception e) { 192 throw new SAXException (e); 193 } 194 195 DTMWSFilter wsFilter; 196 if (_translet != null && _translet instanceof StripFilter) { 197 wsFilter = new DOMWSFilter(_translet); 198 } else { 199 wsFilter = null; 200 } 201 202 _dom = (SAXImpl)dtmManager.getDTM(null, false, wsFilter, true, 204 false, hasIdCall); 205 206 _handler = _dom.getBuilder(); 207 _lexHandler = (LexicalHandler ) _handler; 208 _dtdHandler = (DTDHandler ) _handler; 209 _declHandler = (DeclHandler ) _handler; 210 211 212 _dom.setDocumentURI(_systemId); 214 215 if (_locator != null) { 216 _handler.setDocumentLocator(_locator); 217 } 218 } 219 220 _handler.startDocument(); 222 } 223 224 228 public void endDocument() throws SAXException { 229 _handler.endDocument(); 231 232 if (!_isIdentity) { 233 if (_result != null) { 235 try { 236 _transformer.setDOM(_dom); 237 _transformer.transform(null, _result); 238 } 239 catch (TransformerException e) { 240 throw new SAXException (e); 241 } 242 } 243 _done = true; 245 246 _transformer.setDOM(_dom); 248 } 249 } 250 251 255 public void startElement(String uri, String localName, 256 String qname, Attributes attributes) 257 throws SAXException 258 { 259 _handler.startElement(uri, localName, qname, attributes); 260 } 261 262 266 public void endElement(String namespaceURI, String localName, String qname) 267 throws SAXException 268 { 269 _handler.endElement(namespaceURI, localName, qname); 270 } 271 272 276 public void processingInstruction(String target, String data) 277 throws SAXException 278 { 279 _handler.processingInstruction(target, data); 280 } 281 282 285 public void startCDATA() throws SAXException { 286 if (_lexHandler != null) { 287 _lexHandler.startCDATA(); 288 } 289 } 290 291 294 public void endCDATA() throws SAXException { 295 if (_lexHandler != null) { 296 _lexHandler.endCDATA(); 297 } 298 } 299 300 304 public void comment(char[] ch, int start, int length) 305 throws SAXException 306 { 307 if (_lexHandler != null) { 308 _lexHandler.comment(ch, start, length); 309 } 310 } 311 312 317 public void ignorableWhitespace(char[] ch, int start, int length) 318 throws SAXException 319 { 320 _handler.ignorableWhitespace(ch, start, length); 321 } 322 323 327 public void setDocumentLocator(Locator locator) { 328 _locator = locator; 329 330 if (_handler != null) { 331 _handler.setDocumentLocator(locator); 332 } 333 } 334 335 339 public void skippedEntity(String name) throws SAXException { 340 _handler.skippedEntity(name); 341 } 342 343 347 public void startPrefixMapping(String prefix, String uri) 348 throws SAXException { 349 _handler.startPrefixMapping(prefix, uri); 350 } 351 352 356 public void endPrefixMapping(String prefix) throws SAXException { 357 _handler.endPrefixMapping(prefix); 358 } 359 360 363 public void startDTD(String name, String publicId, String systemId) 364 throws SAXException ![JavaDoc](../../../../../../cmn/javadoc.gif) 365 { 366 if (_lexHandler != null) { 367 _lexHandler.startDTD(name, publicId, systemId); 368 } 369 } 370 371 374 public void endDTD() throws SAXException { 375 if (_lexHandler != null) { 376 _lexHandler.endDTD(); 377 } 378 } 379 380 383 public void startEntity(String name) throws SAXException { 384 if (_lexHandler != null) { 385 _lexHandler.startEntity(name); 386 } 387 } 388 389 392 public void endEntity(String name) throws SAXException { 393 if (_lexHandler != null) { 394 _lexHandler.endEntity(name); 395 } 396 } 397 398 401 public void unparsedEntityDecl(String name, String publicId, 402 String systemId, String notationName) throws SAXException 403 { 404 if (_dtdHandler != null) { 405 _dtdHandler.unparsedEntityDecl(name, publicId, systemId, 406 notationName); 407 } 408 } 409 410 413 public void notationDecl(String name, String publicId, String systemId) 414 throws SAXException ![JavaDoc](../../../../../../cmn/javadoc.gif) 415 { 416 if (_dtdHandler != null) { 417 _dtdHandler.notationDecl(name, publicId, systemId); 418 } 419 } 420 421 424 public void attributeDecl(String eName, String aName, String type, 425 String valueDefault, String value) throws SAXException 426 { 427 if (_declHandler != null) { 428 _declHandler.attributeDecl(eName, aName, type, valueDefault, value); 429 } 430 } 431 432 435 public void elementDecl(String name, String model) 436 throws SAXException ![JavaDoc](../../../../../../cmn/javadoc.gif) 437 { 438 if (_declHandler != null) { 439 _declHandler.elementDecl(name, model); 440 } 441 } 442 443 446 public void externalEntityDecl(String name, String publicId, String systemId) 447 throws SAXException ![JavaDoc](../../../../../../cmn/javadoc.gif) 448 { 449 if (_declHandler != null) { 450 _declHandler.externalEntityDecl(name, publicId, systemId); 451 } 452 } 453 454 457 public void internalEntityDecl(String name, String value) 458 throws SAXException ![JavaDoc](../../../../../../cmn/javadoc.gif) 459 { 460 if (_declHandler != null) { 461 _declHandler.internalEntityDecl(name, value); 462 } 463 } 464 } 465 | Popular Tags |