|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.xalan.transformer.QueuedEvents org.apache.xalan.transformer.ResultTreeHandler
This class is a layer between the direct calls to the result tree content handler, and the transformer. For one thing, we have to delay the call to getContentHandler().startElement(name, atts) because of the xsl:attribute and xsl:copy calls. In other words, the attributes have to be fully collected before you can call startElement.
Nested Class Summary | |
(package private) class |
ResultTreeHandler.QueuedStateSnapshot
|
Field Summary | |
private static boolean |
DEBUG
Indicate whether running in Debug mode |
ClonerToResultTree |
m_cloner
This class clones nodes to the result tree. |
private org.xml.sax.ContentHandler |
m_contentHandler
The content handler. |
(package private) boolean |
m_isTransformClient
|
private org.xml.sax.ext.LexicalHandler |
m_lexicalHandler
The LexicalHandler |
(package private) boolean |
m_nsContextPushed
Indicate whether a namespace context was pushed |
(package private) org.xml.sax.helpers.NamespaceSupport |
m_nsSupport
Use the SAX2 helper class to track result namespaces. |
private ResultTreeHandler.QueuedStateSnapshot |
m_snapshot
|
private StylesheetRoot |
m_stylesheetRoot
The root of a linked set of stylesheets. |
private TraceManager |
m_tracer
Trace manager for debug support. |
private TransformerImpl |
m_transformer
The transformer object. |
private int |
m_uniqueNSValue
This is used whenever a unique namespace is needed. |
private static String |
S_NAMESPACEPREFIX
Prefix used to create unique prefix names |
Fields inherited from class org.apache.xalan.transformer.QueuedEvents |
m_attributes, m_docEnded, m_docPending, m_elemIsEnded, m_elemIsPending, m_eventCount, m_localName, m_name, m_namespaces, m_nsDeclsHaveBeenAdded, m_url |
Constructor Summary | |
ResultTreeHandler()
Null constructor for object pooling. |
|
ResultTreeHandler(TransformerImpl transformer,
org.xml.sax.ContentHandler realHandler)
Create a new result tree handler. |
Method Summary | |
void |
addAttribute(int attr)
Copy an DOM attribute to the created output element, executing attribute templates as need be, and processing the xsl:use attribute. |
void |
addAttribute(String uri,
String localName,
String rawName,
String type,
String value)
Add an attribute to the end of the list. |
void |
addAttributes(int src)
Copy DOM attributes to the result element. |
void |
addNSDeclsToAttrs()
Add the attributes that have been declared to the attribute list. |
void |
characters(char[] ch,
int start,
int length)
Bottleneck the characters event. |
void |
characters(org.w3c.dom.Node node)
|
private void |
checkForSerializerSwitch(String ns,
String localName)
Check to see if we should switch serializers based on the first output element being an HTML element. |
void |
comment(char[] ch,
int start,
int length)
Bottleneck the comment event. |
void |
comment(String data)
Bottleneck the comment event. |
void |
endCDATA()
End the CDATA characters. |
void |
endDocument()
Bottleneck the endDocument event. |
void |
endDTD()
End the DTD. |
void |
endElement(String ns,
String localName,
String name)
Bottleneck the endElement event. |
void |
endEntity(String name)
End an entity. |
void |
endPrefixMapping(String prefix)
End the scope of a prefix-URI mapping. |
void |
ensureNamespaceDeclDeclared(DTM dtm,
int namespace)
This function checks to make sure a given prefix is really declared. |
void |
ensurePrefixIsDeclared(String ns,
String rawName)
This function checks to make sure a given prefix is really declared. |
void |
entityReference(String name)
Entity reference event. |
void |
error(org.xml.sax.SAXParseException exception)
Receive notification of a recoverable error. |
void |
fatalError(org.xml.sax.SAXParseException exception)
Receive notification of a non-recoverable error. |
(package private) void |
flushDocEvent()
Flush the event. |
(package private) void |
flushElem()
Flush the event. |
void |
flushPending()
Flush the pending element. |
void |
flushPending(boolean flushPrefixes)
Flush the pending element, and any attributes associated with it. |
org.xml.sax.ContentHandler |
getContentHandler()
Return the current content handler. |
org.w3c.dom.traversal.NodeIterator |
getContextNodeList()
Get the current context node list. |
ElemTemplateElement |
getCurrentElement()
Retrieves the stylesheet element that produced the SAX event. |
org.w3c.dom.Node |
getCurrentNode()
This method retrieves the current context node in the source tree. |
ElemTemplate |
getCurrentTemplate()
This method retrieves the xsl:template that is in effect, which may be a matched template or a named template. |
org.w3c.dom.Node |
getMatchedNode()
Retrieves the node in the source tree that matched the template obtained via getMatchedTemplate(). |
ElemTemplate |
getMatchedTemplate()
This method retrieves the xsl:template that was matched. |
org.xml.sax.helpers.NamespaceSupport |
getNamespaceSupport()
Get the NamespaceSupport object. |
String |
getNewUniqueNSPrefix()
Get new unique namespace prefix. |
MutableAttrListImpl |
getPendingAttributes()
Get the pending attributes. |
String |
getPrefix(String namespace)
Given a namespace, try and find a prefix. |
javax.xml.transform.Transformer |
getTransformer()
Get the TrAX Transformer object in effect. |
int |
getUniqueNSValue()
Get a unique namespace value. |
String |
getURI(String prefix)
Given a prefix, return the namespace, |
void |
ignorableWhitespace(char[] ch,
int start,
int length)
Bottleneck the ignorableWhitespace event. |
void |
init(TransformerImpl transformer,
org.xml.sax.ContentHandler realHandler)
Initializer method. |
boolean |
isDefinedNSDecl(int attr)
Returns whether a namespace is defined |
boolean |
isDefinedNSDecl(int attr,
DTM dtm)
Returns whether a namespace is defined |
boolean |
isDefinedNSDecl(String rawName,
String value)
Return whether or not a namespace declaration is defined |
boolean |
isElementPending()
Tell if an element is pending, to be output to the result tree. |
void |
outputResultTreeFragment(XObject obj,
XPathContext support)
Given a result tree fragment, walk the tree and output it to the result stream. |
void |
processingInstruction(String target,
String data)
Bottleneck the processingInstruction event. |
void |
processNSDecls(int src,
int type,
DTM dtm)
Copy xmlns: attributes in if not already in scope. |
protected void |
sendEndPrefixMappings()
Add the attributes that have been declared to the attribute list. |
protected void |
sendStartPrefixMappings()
Add the attributes that have been declared to the attribute list. |
void |
setContentHandler(org.xml.sax.ContentHandler ch)
Set the current content handler. |
void |
setDocumentLocator(org.xml.sax.Locator locator)
To fullfill the FormatterListener interface... no action for the moment. |
void |
setNSDeclsHaveBeenAdded(boolean b)
Set whether Namespace declarations have been added to this element |
void |
skippedEntity(String name)
Receive notification of a skipped entity. |
protected void |
startAndAddPrefixMappings()
Combination of sendStartPrefixMappings and addNSDeclsToAttrs() (which it mostly replaces). |
void |
startCDATA()
Start the CDATACharacters. |
void |
startDocument()
Bottleneck the startDocument event. |
void |
startDTD(String s1,
String s2,
String s3)
Start the DTD. |
void |
startElement(String ns,
String localName,
String name,
org.xml.sax.Attributes atts)
Bottleneck the startElement event. |
void |
startEntity(String name)
Start an entity. |
void |
startPrefixMapping(String prefix,
String uri)
Begin the scope of a prefix-URI Namespace mapping. |
void |
startPrefixMapping(String prefix,
String uri,
boolean shouldFlush)
Begin the scope of a prefix-URI Namespace mapping. |
void |
warning(org.xml.sax.SAXParseException exception)
Receive notification of a warning. |
Methods inherited from class org.apache.xalan.transformer.QueuedEvents |
getSerializer, popEvent, pushDocumentEvent, reInitEvents, reset, setSerializer |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
private static final boolean DEBUG
boolean m_nsContextPushed
boolean m_isTransformClient
org.xml.sax.helpers.NamespaceSupport m_nsSupport
private TransformerImpl m_transformer
private org.xml.sax.ContentHandler m_contentHandler
private org.xml.sax.ext.LexicalHandler m_lexicalHandler
private StylesheetRoot m_stylesheetRoot
private int m_uniqueNSValue
private static final String S_NAMESPACEPREFIX
public ClonerToResultTree m_cloner
private TraceManager m_tracer
private ResultTreeHandler.QueuedStateSnapshot m_snapshot
Constructor Detail |
public ResultTreeHandler()
public ResultTreeHandler(TransformerImpl transformer, org.xml.sax.ContentHandler realHandler)
transformer
- non-null transformer instancerealHandler
- Content Handler instanceMethod Detail |
public void init(TransformerImpl transformer, org.xml.sax.ContentHandler realHandler)
transformer
- non-null transformer instancerealHandler
- Content Handler instancepublic void startDocument() throws org.xml.sax.SAXException
startDocument
in interface org.xml.sax.ContentHandler
org.xml.sax.SAXException
public void endDocument() throws org.xml.sax.SAXException
endDocument
in interface org.xml.sax.ContentHandler
org.xml.sax.SAXException
public void startElement(String ns, String localName, String name, org.xml.sax.Attributes atts) throws org.xml.sax.SAXException
startElement
in interface org.xml.sax.ContentHandler
ns
- Namespace URI of elementlocalName
- Local part of qname of elementname
- Name of elementatts
- List of attributes for the element
org.xml.sax.SAXException
public void endElement(String ns, String localName, String name) throws org.xml.sax.SAXException
endElement
in interface org.xml.sax.ContentHandler
ns
- Namespace URI of elementlocalName
- Local part of qname of elementname
- Name of element
org.xml.sax.SAXException
public void startPrefixMapping(String prefix, String uri) throws org.xml.sax.SAXException
The information from this event is not necessary for normal Namespace processing: the SAX XML reader will automatically replace prefixes for element and attribute names when the http://xml.org/sax/features/namespaces feature is true (the default).
There are cases, however, when applications need to use prefixes in character data or in attribute values, where they cannot safely be expanded automatically; the start/endPrefixMapping event supplies the information to the application to expand prefixes in those contexts itself, if necessary.
Note that start/endPrefixMapping events are not guaranteed to be properly nested relative to each-other: all startPrefixMapping events will occur before the corresponding startElement event, and all endPrefixMapping events will occur after the corresponding endElement event, but their order is not guaranteed.
startPrefixMapping
in interface org.xml.sax.ContentHandler
prefix
- The Namespace prefix being declared.uri
- The Namespace URI the prefix is mapped to.
org.xml.sax.SAXException
- The client may throw
an exception during processing.endPrefixMapping(java.lang.String)
,
startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
public void startPrefixMapping(String prefix, String uri, boolean shouldFlush) throws org.xml.sax.SAXException
prefix
- The Namespace prefix being declared.uri
- The Namespace URI the prefix is mapped to.shouldFlush
- Indicate whether pending events needs
to be flushed first
org.xml.sax.SAXException
- The client may throw
an exception during processing.public void endPrefixMapping(String prefix) throws org.xml.sax.SAXException
See startPrefixMapping for details. This event will always occur after the corresponding endElement event, but the order of endPrefixMapping events is not otherwise guaranteed.
endPrefixMapping
in interface org.xml.sax.ContentHandler
prefix
- The prefix that was being mapping.
org.xml.sax.SAXException
- The client may throw
an exception during processing.startPrefixMapping(java.lang.String, java.lang.String)
,
endElement(java.lang.String, java.lang.String, java.lang.String)
public void characters(char[] ch, int start, int length) throws org.xml.sax.SAXException
characters
in interface org.xml.sax.ContentHandler
ch
- Array of characters to processstart
- start of characters in the arraylength
- Number of characters in the array
org.xml.sax.SAXException
public void characters(org.w3c.dom.Node node) throws org.xml.sax.SAXException
characters
in interface DOM2DTM.CharacterNodeHandler
org.xml.sax.SAXException
public void ignorableWhitespace(char[] ch, int start, int length) throws org.xml.sax.SAXException
ignorableWhitespace
in interface org.xml.sax.ContentHandler
ch
- Array of characters to processstart
- start of characters in the arraylength
- Number of characters in the array
org.xml.sax.SAXException
public void processingInstruction(String target, String data) throws org.xml.sax.SAXException
processingInstruction
in interface org.xml.sax.ContentHandler
target
- Processing instruction target namedata
- Processing instruction data
org.xml.sax.SAXException
public void comment(String data) throws org.xml.sax.SAXException
data
- Comment data
org.xml.sax.SAXException
public void comment(char[] ch, int start, int length) throws org.xml.sax.SAXException
comment
in interface org.xml.sax.ext.LexicalHandler
ch
- Character array with comment datastart
- start of characters in the arraylength
- number of characters in the array
org.xml.sax.SAXException
public void entityReference(String name) throws org.xml.sax.SAXException
name
- Name of entity
org.xml.sax.SAXException
public void startEntity(String name) throws org.xml.sax.SAXException
startEntity
in interface org.xml.sax.ext.LexicalHandler
name
- Name of the entity
org.xml.sax.SAXException
public void endEntity(String name) throws org.xml.sax.SAXException
endEntity
in interface org.xml.sax.ext.LexicalHandler
name
- Name of the entity
org.xml.sax.SAXException
public void startDTD(String s1, String s2, String s3) throws org.xml.sax.SAXException
startDTD
in interface org.xml.sax.ext.LexicalHandler
s1
- The document type name.s2
- The declared public identifier for the
external DTD subset, or null if none was declared.s3
- The declared system identifier for the
external DTD subset, or null if none was declared.
org.xml.sax.SAXException
public void endDTD() throws org.xml.sax.SAXException
endDTD
in interface org.xml.sax.ext.LexicalHandler
org.xml.sax.SAXException
public void startCDATA() throws org.xml.sax.SAXException
startCDATA
in interface org.xml.sax.ext.LexicalHandler
org.xml.sax.SAXException
public void endCDATA() throws org.xml.sax.SAXException
endCDATA
in interface org.xml.sax.ext.LexicalHandler
org.xml.sax.SAXException
public void skippedEntity(String name) throws org.xml.sax.SAXException
The Parser will invoke this method once for each entity skipped. Non-validating processors may skip entities if they have not seen the declarations (because, for example, the entity was declared in an external DTD subset). All processors may skip external entities, depending on the values of the http://xml.org/sax/features/external-general-entities and the http://xml.org/sax/features/external-parameter-entities properties.
skippedEntity
in interface org.xml.sax.ContentHandler
name
- The name of the skipped entity. If it is a
parameter entity, the name will begin with '%'.
org.xml.sax.SAXException
- Any SAX exception, possibly
wrapping another exception.public void setNSDeclsHaveBeenAdded(boolean b)
b
- Flag indicating whether Namespace declarations
have been added to this elementvoid flushDocEvent() throws org.xml.sax.SAXException
javax.xml.transform.TransformerException
org.xml.sax.SAXException
void flushElem() throws org.xml.sax.SAXException
org.xml.sax.SAXException
public final void flushPending() throws org.xml.sax.SAXException
org.xml.sax.SAXException
public final void flushPending(boolean flushPrefixes) throws org.xml.sax.SAXException
org.xml.sax.SAXException
public void outputResultTreeFragment(XObject obj, XPathContext support) throws org.xml.sax.SAXException
obj
- Result tree fragment objectsupport
- XPath context for the result tree fragment
org.xml.sax.SAXException
public void setDocumentLocator(org.xml.sax.Locator locator)
setDocumentLocator
in interface org.xml.sax.ContentHandler
locator
- Document locatorpublic void ensurePrefixIsDeclared(String ns, String rawName) throws org.xml.sax.SAXException
ns
- Namespace URI of the elementrawName
- Raw name of element (with prefix)
org.xml.sax.SAXException
public void ensureNamespaceDeclDeclared(DTM dtm, int namespace) throws org.xml.sax.SAXException
org.xml.sax.SAXException
protected void sendStartPrefixMappings() throws org.xml.sax.SAXException
org.xml.sax.SAXException
protected void startAndAddPrefixMappings() throws org.xml.sax.SAXException
org.xml.sax.SAXException
protected void sendEndPrefixMappings() throws org.xml.sax.SAXException
org.xml.sax.SAXException
private void checkForSerializerSwitch(String ns, String localName) throws org.xml.sax.SAXException
ns
- Namespace URI of the elementlocalName
- Local part of name of the element
org.xml.sax.SAXException
public void addNSDeclsToAttrs()
public void processNSDecls(int src, int type, DTM dtm) throws javax.xml.transform.TransformerException
src
- Source Node
NEEDSDOC @param type
NEEDSDOC @param dtm
javax.xml.transform.TransformerException
public String getURI(String prefix)
prefix
- Given prefix name
public String getPrefix(String namespace)
namespace
- Given namespace URI
public org.xml.sax.helpers.NamespaceSupport getNamespaceSupport()
public final org.xml.sax.ContentHandler getContentHandler()
setContentHandler(org.xml.sax.ContentHandler)
public void setContentHandler(org.xml.sax.ContentHandler ch)
ch
- Content Handler to be set
getContentHandler()
public int getUniqueNSValue()
public String getNewUniqueNSPrefix()
public MutableAttrListImpl getPendingAttributes()
public void addAttribute(String uri, String localName, String rawName, String type, String value) throws javax.xml.transform.TransformerException
Do not pass in xmlns decls to this function!
For the sake of speed, this method does no checking to see if the attribute is already in the list: that is the responsibility of the application.
uri
- The Namespace URI, or the empty string if
none is available or Namespace processing is not
being performed.localName
- The local name, or the empty string if
Namespace processing is not being performed.rawName
- The raw XML 1.0 name, or the empty string
if raw names are not available.type
- The attribute type as a string.value
- The attribute value.
javax.xml.transform.TransformerException
public boolean isDefinedNSDecl(String rawName, String value)
rawName
- Raw name of namespace elementvalue
- URI of given namespace
public boolean isDefinedNSDecl(int attr)
attr
- Namespace attribute node
public boolean isDefinedNSDecl(int attr, DTM dtm)
attr
- Namespace attribute nodedtm
- The DTM that owns attr.
public void addAttribute(int attr) throws javax.xml.transform.TransformerException
attr
- Attribute node to add to result tree
javax.xml.transform.TransformerException
public void addAttributes(int src) throws javax.xml.transform.TransformerException
src
- Source node with the attributes
javax.xml.transform.TransformerException
public final boolean isElementPending()
public ElemTemplateElement getCurrentElement()
Please note that the ElemTemplateElement returned may be in a default template, and thus may not be defined in the stylesheet.
getCurrentElement
in interface TransformState
public org.w3c.dom.Node getCurrentNode()
getCurrentNode
in interface TransformState
public ElemTemplate getCurrentTemplate()
Please note that the ElemTemplate returned may be a default template, and thus may not have a template defined in the stylesheet.
getCurrentTemplate
in interface TransformState
public ElemTemplate getMatchedTemplate()
Please note that the ElemTemplate returned may be a default template, and thus may not have a template defined in the stylesheet.
getMatchedTemplate
in interface TransformState
public org.w3c.dom.Node getMatchedNode()
getMatchedNode
in interface TransformState
public org.w3c.dom.traversal.NodeIterator getContextNodeList()
getContextNodeList
in interface TransformState
public javax.xml.transform.Transformer getTransformer()
getTransformer
in interface TransformState
public void warning(org.xml.sax.SAXParseException exception) throws org.xml.sax.SAXException
SAX parsers will use this method to report conditions that are not errors or fatal errors as defined by the XML 1.0 recommendation. The default behaviour is to take no action.
The SAX parser must continue to provide normal parsing events after invoking this method: it should still be possible for the application to process the document through to the end.
Filters may use this method to report other, non-XML warnings as well.
warning
in interface org.xml.sax.ErrorHandler
exception
- The warning information encapsulated in a
SAX parse exception.
org.xml.sax.SAXException
- Any SAX exception, possibly
wrapping another exception.SAXParseException
public void error(org.xml.sax.SAXParseException exception) throws org.xml.sax.SAXException
This corresponds to the definition of "error" in section 1.2 of the W3C XML 1.0 Recommendation. For example, a validating parser would use this callback to report the violation of a validity constraint. The default behaviour is to take no action.
The SAX parser must continue to provide normal parsing events after invoking this method: it should still be possible for the application to process the document through to the end. If the application cannot do so, then the parser should report a fatal error even if the XML 1.0 recommendation does not require it to do so.
Filters may use this method to report other, non-XML errors as well.
error
in interface org.xml.sax.ErrorHandler
exception
- The error information encapsulated in a
SAX parse exception.
org.xml.sax.SAXException
- Any SAX exception, possibly
wrapping another exception.SAXParseException
public void fatalError(org.xml.sax.SAXParseException exception) throws org.xml.sax.SAXException
This corresponds to the definition of "fatal error" in section 1.2 of the W3C XML 1.0 Recommendation. For example, a parser would use this callback to report the violation of a well-formedness constraint.
The application must assume that the document is unusable after the parser has invoked this method, and should continue (if at all) only for the sake of collecting addition error messages: in fact, SAX parsers are free to stop reporting any other events once this method has been invoked.
fatalError
in interface org.xml.sax.ErrorHandler
exception
- The error information encapsulated in a
SAX parse exception.
org.xml.sax.SAXException
- Any SAX exception, possibly
wrapping another exception.SAXParseException
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |