1 2 17 20 21 package org.apache.xalan.xsltc.trax; 22 23 import javax.xml.transform.Source ; 24 import javax.xml.transform.stream.StreamSource ; 25 26 import org.apache.xalan.xsltc.DOM; 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 34 import org.xml.sax.SAXException ; 35 36 39 public final class XSLTCSource implements Source { 40 41 private String _systemId = null; 42 private Source _source = null; 43 private ThreadLocal _dom = new ThreadLocal (); 44 45 48 public XSLTCSource(String systemId) 49 { 50 _systemId = systemId; 51 } 52 53 56 public XSLTCSource(Source source) 57 { 58 _source = source; 59 } 60 61 69 public void setSystemId(String systemId) { 70 _systemId = systemId; 71 if (_source != null) { 72 _source.setSystemId(systemId); 73 } 74 } 75 76 82 public String getSystemId() { 83 if (_source != null) { 84 return _source.getSystemId(); 85 } 86 else { 87 return(_systemId); 88 } 89 } 90 91 94 protected DOM getDOM(XSLTCDTMManager dtmManager, AbstractTranslet translet) 95 throws SAXException 96 { 97 SAXImpl idom = (SAXImpl)_dom.get(); 98 99 if (idom != null) { 100 if (dtmManager != null) { 101 idom.migrateTo(dtmManager); 102 } 103 } 104 else { 105 Source source = _source; 106 if (source == null) { 107 if (_systemId != null && _systemId.length() > 0) { 108 source = new StreamSource (_systemId); 109 } 110 else { 111 ErrorMsg err = new ErrorMsg(ErrorMsg.XSLTC_SOURCE_ERR); 112 throw new SAXException (err.toString()); 113 } 114 } 115 116 DOMWSFilter wsfilter = null; 117 if (translet != null && translet instanceof StripFilter) { 118 wsfilter = new DOMWSFilter(translet); 119 } 120 121 boolean hasIdCall = (translet != null) ? translet.hasIdCall() : false; 122 123 if (dtmManager == null) { 124 dtmManager = XSLTCDTMManager.newInstance(); 125 } 126 127 idom = (SAXImpl)dtmManager.getDTM(source, true, wsfilter, false, false, hasIdCall); 128 129 String systemId = getSystemId(); 130 if (systemId != null) { 131 idom.setDocumentURI(systemId); 132 } 133 _dom.set(idom); 134 } 135 return idom; 136 } 137 138 } 139 | Popular Tags |