org.jbpm.pvm.internal.xml
Class DomBuilder

java.lang.Object
  extended by org.xml.sax.helpers.DefaultHandler
      extended by org.jbpm.pvm.internal.xml.DomBuilder
All Implemented Interfaces:
org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler, org.xml.sax.ext.LexicalHandler

public class DomBuilder
extends org.xml.sax.helpers.DefaultHandler
implements org.xml.sax.ext.LexicalHandler

builds the dom model from SAX events, optionally adding the line and column number as attributes to every element.


Field Summary
protected  java.lang.String columnAttributeName
           
protected  org.w3c.dom.Node currentNode
          Current activity
 org.w3c.dom.DocumentFragment docFrag
          First activity of document fragment or null if not a DocumentFragment
 org.w3c.dom.Document document
          Root document
protected  java.util.Stack<org.w3c.dom.Element> elemStack
          Vector of element activities
protected  boolean inCData
          Flag indicating that we are processing a CData section
protected  java.lang.String lineAttributeName
           
protected  org.xml.sax.Locator locator
          to obtain the line number information
protected  org.w3c.dom.Node nextSibling
          The next sibling activity
protected  java.util.Vector<java.lang.String> prefixMappings
          Namespace support
protected  org.w3c.dom.Node root
          The root activity
 
Constructor Summary
DomBuilder()
           
 
Method Summary
protected  void append(org.w3c.dom.Node newNode)
          Append a activity to the current container.
 void cdata(char[] ch, int start, int length)
          Receive notification of cdata.
 void characters(char[] ch, int start, int length)
          Receive notification of character data.
 void charactersRaw(char[] ch, int start, int length)
          If available, when the disable-output-escaping attribute is used, output raw text without escaping.
 void comment(char[] ch, int start, int length)
          Report an XML comment anywhere in the document.
 void endCDATA()
          Report the end of a CDATA section.
 void endDocument()
          Receive notification of the end of a document.
 void endDTD()
          Report the end of DTD declarations.
 void endElement(java.lang.String ns, java.lang.String localName, java.lang.String name)
          Receive notification of the end of an element.
 void endEntity(java.lang.String name)
          Report the end of an entity.
 void endPrefixMapping(java.lang.String prefix)
          End the scope of a prefix-URI mapping.
 void entityReference(java.lang.String name)
          Receive notivication of a entityReference.
 java.lang.String getColumnAttributeName()
           
 org.w3c.dom.Node getCurrentNode()
          Get the activity currently being processed.
 org.w3c.dom.Document getDocument()
           
 java.lang.String getLineAttributeName()
           
 org.w3c.dom.Node getNextSibling()
          Return the next sibling activity.
 org.w3c.dom.Node getRootDocument()
          Get the root document or DocumentFragment of the DOM being created.
 org.w3c.dom.Node getRootNode()
          Get the root activity of the DOM tree.
 java.io.Writer getWriter()
          Return null since there is no Writer for this class.
 void ignorableWhitespace(char[] ch, int start, int length)
          Receive notification of ignorable whitespace in element content.
static boolean isWhiteSpace(char ch)
          Returns whether the specified ch conforms to the XML 1.0 definition of whitespace.
static boolean isWhiteSpace(char[] ch, int start, int length)
          Tell if the string is whitespace.
 void processingInstruction(java.lang.String target, java.lang.String data)
          Receive notification of a processing instruction.
 void setColumnAttributeName(java.lang.String columnAttributeName)
           
 void setDocument(org.w3c.dom.Document document)
           
 void setDocumentLocator(org.xml.sax.Locator locator)
          Receive an object for locating the origin of SAX document events.
 void setIDAttribute(java.lang.String id, org.w3c.dom.Element elem)
          Set an ID string to activity association in the ID table.
 void setLineAttributeName(java.lang.String lineAttributeName)
           
 void setNextSibling(org.w3c.dom.Node nextSibling)
          Set the next sibling activity, which is where the result activities should be inserted before.
 void skippedEntity(java.lang.String name)
          Receive notification of a skipped entity.
 void startCDATA()
          Report the start of a CDATA section.
 void startDocument()
          Receive notification of the beginning of a document.
 void startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
          Report the start of DTD declarations, if any.
 void startElement(java.lang.String ns, java.lang.String localName, java.lang.String name, org.xml.sax.Attributes atts)
          Receive notification of the beginning of an element.
 void startEntity(java.lang.String name)
          Report the beginning of an entity.
 void startPrefixMapping(java.lang.String prefix, java.lang.String uri)
          Begin the scope of a prefix-URI Namespace mapping.
 
Methods inherited from class org.xml.sax.helpers.DefaultHandler
error, fatalError, notationDecl, resolveEntity, unparsedEntityDecl, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

document

public org.w3c.dom.Document document
Root document


lineAttributeName

protected java.lang.String lineAttributeName

columnAttributeName

protected java.lang.String columnAttributeName

currentNode

protected org.w3c.dom.Node currentNode
Current activity


root

protected org.w3c.dom.Node root
The root activity


nextSibling

protected org.w3c.dom.Node nextSibling
The next sibling activity


docFrag

public org.w3c.dom.DocumentFragment docFrag
First activity of document fragment or null if not a DocumentFragment


elemStack

protected java.util.Stack<org.w3c.dom.Element> elemStack
Vector of element activities


prefixMappings

protected java.util.Vector<java.lang.String> prefixMappings
Namespace support


locator

protected org.xml.sax.Locator locator
to obtain the line number information


inCData

protected boolean inCData
Flag indicating that we are processing a CData section

Constructor Detail

DomBuilder

public DomBuilder()
Method Detail

getRootDocument

public org.w3c.dom.Node getRootDocument()
Get the root document or DocumentFragment of the DOM being created.

Returns:
The root document or document fragment if not null

getRootNode

public org.w3c.dom.Node getRootNode()
Get the root activity of the DOM tree.


getCurrentNode

public org.w3c.dom.Node getCurrentNode()
Get the activity currently being processed.

Returns:
the current activity being processed

setNextSibling

public void setNextSibling(org.w3c.dom.Node nextSibling)
Set the next sibling activity, which is where the result activities should be inserted before.

Parameters:
nextSibling - the next sibling activity.

getNextSibling

public org.w3c.dom.Node getNextSibling()
Return the next sibling activity.

Returns:
the next sibling activity.

getWriter

public java.io.Writer getWriter()
Return null since there is no Writer for this class.

Returns:
null

append

protected void append(org.w3c.dom.Node newNode)
               throws org.xml.sax.SAXException
Append a activity to the current container.

Parameters:
newNode - New activity to append
Throws:
org.xml.sax.SAXException

setDocumentLocator

public void setDocumentLocator(org.xml.sax.Locator locator)
Receive an object for locating the origin of SAX document events.

SAX parsers are strongly encouraged (though not absolutely required) to supply a locator: if it does so, it must supply the locator to the application by invoking this method before invoking any of the other methods in the ContentHandler interface.

The locator allows the application to determine the end position of any document-related event, even if the parser is not reporting an error. Typically, the application will use this information for reporting its own errors (such as character content that does not match an application's business rules). The information returned by the locator is probably not sufficient for use with a search engine.

Note that the locator will return correct information only during the invocation of the events in this interface. The application should not attempt to use it at any other time.

Specified by:
setDocumentLocator in interface org.xml.sax.ContentHandler
Overrides:
setDocumentLocator in class org.xml.sax.helpers.DefaultHandler
Parameters:
locator - An object that can return the location of any SAX document event.
See Also:
Locator

startDocument

public void startDocument()
                   throws org.xml.sax.SAXException
Receive notification of the beginning of a document.

The SAX parser will invoke this method only once, before any other methods in this interface or in DTDHandler (except for setDocumentLocator).

Specified by:
startDocument in interface org.xml.sax.ContentHandler
Overrides:
startDocument in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

endDocument

public void endDocument()
                 throws org.xml.sax.SAXException
Receive notification of the end of a document.

The SAX parser will invoke this method only once, and it will be the last method invoked during the parse. The parser shall not invoke this method until it has either abandoned parsing (because of an unrecoverable error) or reached the end of input.

Specified by:
endDocument in interface org.xml.sax.ContentHandler
Overrides:
endDocument in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

startElement

public void startElement(java.lang.String ns,
                         java.lang.String localName,
                         java.lang.String name,
                         org.xml.sax.Attributes atts)
                  throws org.xml.sax.SAXException
Receive notification of the beginning of an element.

The Parser will invoke this method at the beginning of every element in the XML document; there will be a corresponding endElement() event for every startElement() event (even when the element is empty). All of the element's content will be reported, in order, before the corresponding endElement() event.

If the element name has a namespace prefix, the prefix will still be attached. Note that the attribute list provided will contain only attributes with explicit values (specified or defaulted): #IMPLIED attributes will be omitted.

Specified by:
startElement in interface org.xml.sax.ContentHandler
Overrides:
startElement in class org.xml.sax.helpers.DefaultHandler
Parameters:
ns - The namespace of the activity
localName - The local part of the qualified name
name - The element name.
atts - The attributes attached to the element, if any.
Throws:
org.xml.sax.SAXException
See Also:
endElement(java.lang.String, java.lang.String, java.lang.String), Attributes

endElement

public void endElement(java.lang.String ns,
                       java.lang.String localName,
                       java.lang.String name)
                throws org.xml.sax.SAXException
Receive notification of the end of an element.

The SAX parser will invoke this method at the end of every element in the XML document; there will be a corresponding startElement() event for every endElement() event (even when the element is empty).

If the element name has a namespace prefix, the prefix will still be attached to the name.

Specified by:
endElement in interface org.xml.sax.ContentHandler
Overrides:
endElement in class org.xml.sax.helpers.DefaultHandler
Parameters:
ns - the namespace of the element
localName - The local part of the qualified name of the element
name - The element name
Throws:
org.xml.sax.SAXException

setIDAttribute

public void setIDAttribute(java.lang.String id,
                           org.w3c.dom.Element elem)
Set an ID string to activity association in the ID table.

Parameters:
id - The ID string.
elem - The associated ID.

characters

public void characters(char[] ch,
                       int start,
                       int length)
                throws org.xml.sax.SAXException
Receive notification of character data.

The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity, so that the Locator provides useful information.

The application must not attempt to read from the array outside of the specified range.

Note that some parsers will report whitespace using the ignorableWhitespace() method rather than this one (validating parsers must do so).

Specified by:
characters in interface org.xml.sax.ContentHandler
Overrides:
characters in class org.xml.sax.helpers.DefaultHandler
Parameters:
ch - The characters from the XML document.
start - The start position in the array.
length - The number of characters to read from the array.
Throws:
org.xml.sax.SAXException
See Also:
ignorableWhitespace(char[], int, int), Locator

charactersRaw

public void charactersRaw(char[] ch,
                          int start,
                          int length)
                   throws org.xml.sax.SAXException
If available, when the disable-output-escaping attribute is used, output raw text without escaping. A PI will be inserted in front of the activity with the name "lotusxsl-next-is-raw" and a value of "formatter-to-dom".

Parameters:
ch - Array containing the characters
start - Index to start of characters in the array
length - Number of characters in the array
Throws:
org.xml.sax.SAXException

startEntity

public void startEntity(java.lang.String name)
                 throws org.xml.sax.SAXException
Report the beginning of an entity. The start and end of the document entity are not reported. The start and end of the external DTD subset are reported using the pseudo-name "[dtd]". All other events must be properly nested within start/end entity events.

Specified by:
startEntity in interface org.xml.sax.ext.LexicalHandler
Parameters:
name - The name of the entity. If it is a parameter entity, the name will begin with '%'.
Throws:
org.xml.sax.SAXException
See Also:
endEntity(java.lang.String), DeclHandler.internalEntityDecl(java.lang.String, java.lang.String), DeclHandler.externalEntityDecl(java.lang.String, java.lang.String, java.lang.String)

endEntity

public void endEntity(java.lang.String name)
               throws org.xml.sax.SAXException
Report the end of an entity.

Specified by:
endEntity in interface org.xml.sax.ext.LexicalHandler
Parameters:
name - The name of the entity that is ending.
Throws:
org.xml.sax.SAXException
See Also:
startEntity(java.lang.String)

entityReference

public void entityReference(java.lang.String name)
                     throws org.xml.sax.SAXException
Receive notivication of a entityReference.

Parameters:
name - name of the entity reference
Throws:
org.xml.sax.SAXException

ignorableWhitespace

public void ignorableWhitespace(char[] ch,
                                int start,
                                int length)
                         throws org.xml.sax.SAXException
Receive notification of ignorable whitespace in element content.

Validating Parsers must use this method to report each chunk of ignorable whitespace (see the W3C XML 1.0 recommendation, section 2.10): non-validating parsers may also use this method if they are capable of parsing and using content models.

SAX parsers may return all contiguous whitespace in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity, so that the Locator provides useful information.

The application must not attempt to read from the array outside of the specified range.

Specified by:
ignorableWhitespace in interface org.xml.sax.ContentHandler
Overrides:
ignorableWhitespace in class org.xml.sax.helpers.DefaultHandler
Parameters:
ch - The characters from the XML document.
start - The start position in the array.
length - The number of characters to read from the array.
Throws:
org.xml.sax.SAXException
See Also:
characters(char[], int, int)

processingInstruction

public void processingInstruction(java.lang.String target,
                                  java.lang.String data)
                           throws org.xml.sax.SAXException
Receive notification of a processing instruction.

The Parser will invoke this method once for each processing instruction found: note that processing instructions may occur before or after the main document element.

A SAX parser should never report an XML declaration (XML 1.0, section 2.8) or a text declaration (XML 1.0, section 4.3.1) using this method.

Specified by:
processingInstruction in interface org.xml.sax.ContentHandler
Overrides:
processingInstruction in class org.xml.sax.helpers.DefaultHandler
Parameters:
target - The processing instruction target.
data - The processing instruction data, or null if none was supplied.
Throws:
org.xml.sax.SAXException

comment

public void comment(char[] ch,
                    int start,
                    int length)
             throws org.xml.sax.SAXException
Report an XML comment anywhere in the document. This callback will be used for comments inside or outside the document element, including comments in the external DTD subset (if read).

Specified by:
comment in interface org.xml.sax.ext.LexicalHandler
Parameters:
ch - An array holding the characters in the comment.
start - The starting position in the array.
length - The number of characters to use from the array.
Throws:
org.xml.sax.SAXException

startCDATA

public void startCDATA()
                throws org.xml.sax.SAXException
Report the start of a CDATA section.

Specified by:
startCDATA in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
endCDATA()

endCDATA

public void endCDATA()
              throws org.xml.sax.SAXException
Report the end of a CDATA section.

Specified by:
endCDATA in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
startCDATA()

cdata

public void cdata(char[] ch,
                  int start,
                  int length)
           throws org.xml.sax.SAXException
Receive notification of cdata.

The Parser will call this method to report each chunk of character data. SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity, so that the Locator provides useful information.

The application must not attempt to read from the array outside of the specified range.

Note that some parsers will report whitespace using the ignorableWhitespace() method rather than this one (validating parsers must do so).

Parameters:
ch - The characters from the XML document.
start - The start position in the array.
length - The number of characters to read from the array.
Throws:
org.xml.sax.SAXException
See Also:
ignorableWhitespace(char[], int, int), Locator

startDTD

public void startDTD(java.lang.String name,
                     java.lang.String publicId,
                     java.lang.String systemId)
              throws org.xml.sax.SAXException
Report the start of DTD declarations, if any. Any declarations are assumed to be in the internal subset unless otherwise indicated.

Specified by:
startDTD in interface org.xml.sax.ext.LexicalHandler
Parameters:
name - The document type name.
publicId - The declared public identifier for the external DTD subset, or null if none was declared.
systemId - The declared system identifier for the external DTD subset, or null if none was declared.
Throws:
org.xml.sax.SAXException
See Also:
endDTD(), startEntity(java.lang.String)

endDTD

public void endDTD()
            throws org.xml.sax.SAXException
Report the end of DTD declarations.

Specified by:
endDTD in interface org.xml.sax.ext.LexicalHandler
Throws:
org.xml.sax.SAXException
See Also:
startDTD(java.lang.String, java.lang.String, java.lang.String)

startPrefixMapping

public void startPrefixMapping(java.lang.String prefix,
                               java.lang.String uri)
                        throws org.xml.sax.SAXException
Begin the scope of a prefix-URI Namespace mapping.

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.

Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler
Overrides:
startPrefixMapping in class org.xml.sax.helpers.DefaultHandler
Parameters:
prefix - The Namespace prefix being declared.
uri - The Namespace URI the prefix is mapped to.
Throws:
org.xml.sax.SAXException
See Also:
endPrefixMapping(java.lang.String), startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)

endPrefixMapping

public void endPrefixMapping(java.lang.String prefix)
                      throws org.xml.sax.SAXException
End the scope of a prefix-URI mapping.

See startPrefixMapping for details. This event will always occur after the corresponding endElement event, but the order of endPrefixMapping events is not otherwise guaranteed.

Specified by:
endPrefixMapping in interface org.xml.sax.ContentHandler
Overrides:
endPrefixMapping in class org.xml.sax.helpers.DefaultHandler
Parameters:
prefix - The prefix that was being mapping.
Throws:
org.xml.sax.SAXException
See Also:
startPrefixMapping(java.lang.String, java.lang.String), endElement(java.lang.String, java.lang.String, java.lang.String)

skippedEntity

public void skippedEntity(java.lang.String name)
                   throws org.xml.sax.SAXException
Receive notification of a skipped entity.

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.

Specified by:
skippedEntity in interface org.xml.sax.ContentHandler
Overrides:
skippedEntity in class org.xml.sax.helpers.DefaultHandler
Parameters:
name - The name of the skipped entity. If it is a parameter entity, the name will begin with '%'.
Throws:
org.xml.sax.SAXException

isWhiteSpace

public static boolean isWhiteSpace(char ch)
Returns whether the specified ch conforms to the XML 1.0 definition of whitespace. Refer to the definition of S for details.

Parameters:
ch - Character to check as XML whitespace.
Returns:
=true if ch is XML whitespace; otherwise =false.

isWhiteSpace

public static boolean isWhiteSpace(char[] ch,
                                   int start,
                                   int length)
Tell if the string is whitespace.

Parameters:
ch - Character array to check as XML whitespace.
start - Start index of characters in the array
length - Number of characters in the array
Returns:
True if the characters in the array are XML whitespace; otherwise, false.

setLineAttributeName

public void setLineAttributeName(java.lang.String lineAttributeName)

setColumnAttributeName

public void setColumnAttributeName(java.lang.String columnAttributeName)

getLineAttributeName

public java.lang.String getLineAttributeName()

getColumnAttributeName

public java.lang.String getColumnAttributeName()

getDocument

public org.w3c.dom.Document getDocument()

setDocument

public void setDocument(org.w3c.dom.Document document)


Copyright © 2010 JBoss Community. All Rights Reserved.