Class ElemTemplateElement

    • Constructor Detail

      • ElemTemplateElement

        public ElemTemplateElement()
        Construct a template element instance.
    • Method Detail

      • isCompiledTemplate

        public boolean isCompiledTemplate()
        Tell if this template is a compiled template.
        Returns:
        Boolean flag indicating whether this is a compiled template
      • getXSLToken

        public int getXSLToken()
        Get an integer representation of the element type.
        Returns:
        An integer representation of the element, defined in the Constants class.
        See Also:
        Constants
      • getNodeName

        public java.lang.String getNodeName()
        Return the node name.
        Specified by:
        getNodeName in interface org.w3c.dom.Node
        Overrides:
        getNodeName in class UnImplNode
        Returns:
        An invalid node name
      • getLocalName

        public java.lang.String getLocalName()
        For now, just return the result of getNodeName(), which the local name.
        Specified by:
        getLocalName in interface org.w3c.dom.Node
        Overrides:
        getLocalName in class UnImplNode
        Returns:
        The result of getNodeName().
      • runtimeInit

        public void runtimeInit​(TransformerImpl transformer)
                         throws javax.xml.transform.TransformerException
        This function will be called on top-level elements only, just before the transform begins.
        Parameters:
        transformer - The XSLT TransformerFactory.
        Throws:
        javax.xml.transform.TransformerException
      • execute

        public void execute​(TransformerImpl transformer)
                     throws javax.xml.transform.TransformerException
        Execute the element's primary function. Subclasses of this function may recursivly execute down the element tree.
        Parameters:
        transformer - The XSLT TransformerFactory.
        Throws:
        javax.xml.transform.TransformerException - if any checked exception occurs.
      • getStylesheetComposed

        public StylesheetComposed getStylesheetComposed()
        Get the owning "composed" stylesheet. This looks up the inheritance chain until it calls getStylesheetComposed on a Stylesheet object, which will Get the owning aggregated stylesheet, or that stylesheet if it is aggregated.
        Returns:
        the owning "composed" stylesheet.
      • getStylesheet

        public Stylesheet getStylesheet()
        Get the owning stylesheet. This looks up the inheritance chain until it calls getStylesheet on a Stylesheet object, which will return itself.
        Returns:
        the owning stylesheet
      • getStylesheetRoot

        public StylesheetRoot getStylesheetRoot()
        Get the owning root stylesheet. This looks up the inheritance chain until it calls StylesheetRoot on a Stylesheet object, which will return a reference to the root stylesheet.
        Returns:
        the owning root stylesheet
      • recompose

        public void recompose​(StylesheetRoot root)
                       throws javax.xml.transform.TransformerException
        This function is called during recomposition to control how this element is composed.
        Throws:
        javax.xml.transform.TransformerException
      • compose

        public void compose​(StylesheetRoot sroot)
                     throws javax.xml.transform.TransformerException
        This function is called after everything else has been recomposed, and allows the template to set remaining values that may be based on some other property that depends on recomposition.
        Throws:
        javax.xml.transform.TransformerException
      • endCompose

        public void endCompose​(StylesheetRoot sroot)
                        throws javax.xml.transform.TransformerException
        This after the template's children have been composed.
        Throws:
        javax.xml.transform.TransformerException
      • error

        public void error​(java.lang.String msg,
                          java.lang.Object[] args)
        Throw a template element runtime error. (Note: should we throw a TransformerException instead?)
        Overrides:
        error in class UnImplNode
        Parameters:
        msg - key of the error that occured.
        args - Arguments to be used in the message
      • error

        public void error​(java.lang.String msg)
        Description copied from class: UnImplNode
        Throw an error.
        Overrides:
        error in class UnImplNode
        Parameters:
        msg - Message Key for the error
      • appendChild

        public org.w3c.dom.Node appendChild​(org.w3c.dom.Node newChild)
                                     throws org.w3c.dom.DOMException
        Add a child to the child list. NOTE: This presumes the child did not previously have a parent. Making that assumption makes this a less expensive operation -- but requires that if you *do* want to reparent a node, you use removeChild() first to remove it from its previous context. Failing to do so will damage the tree.
        Specified by:
        appendChild in interface org.w3c.dom.Node
        Overrides:
        appendChild in class UnImplNode
        Parameters:
        newChild - Child to be added to child list
        Returns:
        Child just added to the child list
        Throws:
        org.w3c.dom.DOMException
      • appendChild

        public ElemTemplateElement appendChild​(ElemTemplateElement elem)
        Add a child to the child list. NOTE: This presumes the child did not previously have a parent. Making that assumption makes this a less expensive operation -- but requires that if you *do* want to reparent a node, you use removeChild() first to remove it from its previous context. Failing to do so will damage the tree.
        Parameters:
        elem - Child to be added to child list
        Returns:
        Child just added to the child list
      • hasChildNodes

        public boolean hasChildNodes()
        Tell if there are child nodes.
        Specified by:
        hasChildNodes in interface org.w3c.dom.Node
        Overrides:
        hasChildNodes in class UnImplNode
        Returns:
        True if there are child nodes
      • getNodeType

        public short getNodeType()
        Get the type of the node.
        Specified by:
        getNodeType in interface org.w3c.dom.Node
        Overrides:
        getNodeType in class UnImplNode
        Returns:
        Constant for this node type
      • getChildNodes

        public org.w3c.dom.NodeList getChildNodes()
        Return the nodelist (same reference).
        Specified by:
        getChildNodes in interface org.w3c.dom.Node
        Overrides:
        getChildNodes in class UnImplNode
        Returns:
        The nodelist containing the child nodes (this)
      • removeChild

        public ElemTemplateElement removeChild​(ElemTemplateElement childETE)
        Remove a child. ADDED 9/8/200 to support compilation. TODO: ***** Alternative is "removeMe() from my parent if any" ... which is less well checked, but more convenient in some cases. Given that we assume only experts are calling this class, it might be preferable. It's less DOMish, though.
        Parameters:
        childETE - The child to remove. This operation is a no-op if oldChild is not a child of this node.
        Returns:
        the removed child, or null if the specified node was not a child of this element.
      • replaceChild

        public org.w3c.dom.Node replaceChild​(org.w3c.dom.Node newChild,
                                             org.w3c.dom.Node oldChild)
                                      throws org.w3c.dom.DOMException
        Replace the old child with a new child.
        Specified by:
        replaceChild in interface org.w3c.dom.Node
        Overrides:
        replaceChild in class UnImplNode
        Parameters:
        newChild - New child to replace with
        oldChild - Old child to be replaced
        Returns:
        The new child
        Throws:
        org.w3c.dom.DOMException
      • insertBefore

        public org.w3c.dom.Node insertBefore​(org.w3c.dom.Node newChild,
                                             org.w3c.dom.Node refChild)
                                      throws org.w3c.dom.DOMException
        Unimplemented. See org.w3c.dom.Node
        Specified by:
        insertBefore in interface org.w3c.dom.Node
        Overrides:
        insertBefore in class UnImplNode
        Parameters:
        newChild - New child node to insert
        refChild - Insert in front of this child
        Returns:
        null
        Throws:
        org.w3c.dom.DOMException
      • replaceChild

        public ElemTemplateElement replaceChild​(ElemTemplateElement newChildElem,
                                                ElemTemplateElement oldChildElem)
        Replace the old child with a new child.
        Parameters:
        newChildElem - New child to replace with
        oldChildElem - Old child to be replaced
        Returns:
        The new child
        Throws:
        org.w3c.dom.DOMException
      • getLength

        public int getLength()
        NodeList method: Count the immediate children of this node
        Specified by:
        getLength in interface org.w3c.dom.NodeList
        Overrides:
        getLength in class UnImplNode
        Returns:
        The count of children of this node
      • item

        public org.w3c.dom.Node item​(int index)
        NodeList method: Return the Nth immediate child of this node, or null if the index is out of bounds.
        Specified by:
        item in interface org.w3c.dom.NodeList
        Overrides:
        item in class UnImplNode
        Parameters:
        index - Index of child to find
        Returns:
        org.w3c.dom.Node: the child node at given index
      • getOwnerDocument

        public org.w3c.dom.Document getOwnerDocument()
        Get the stylesheet owner.
        Specified by:
        getOwnerDocument in interface org.w3c.dom.Node
        Overrides:
        getOwnerDocument in class UnImplNode
        Returns:
        The stylesheet owner
      • getOwnerXSLTemplate

        public ElemTemplate getOwnerXSLTemplate()
        Get the owning xsl:template element.
        Returns:
        The owning xsl:template element, this element if it is a xsl:template, or null if not found.
      • getTagName

        public java.lang.String getTagName()
        Return the element name.
        Specified by:
        getTagName in interface org.w3c.dom.Element
        Overrides:
        getTagName in class UnImplNode
        Returns:
        The element name
      • hasTextLitOnly

        public boolean hasTextLitOnly()
        Tell if this element only has one text child, for optimization purposes.
        Returns:
        true of this element only has one text literal child.
      • getBaseIdentifier

        public java.lang.String getBaseIdentifier()
        Return the base identifier.
        Specified by:
        getBaseIdentifier in interface PrefixResolver
        Returns:
        The base identifier
      • getEndLineNumber

        public int getEndLineNumber()
        Return the line number where the current document event ends. Note that this is the line position of the first character after the text associated with the document event.
        Returns:
        The line number, or -1 if none is available.
        See Also:
        getColumnNumber()
      • getLineNumber

        public int getLineNumber()
        Return the line number where the current document event ends. Note that this is the line position of the first character after the text associated with the document event.
        Specified by:
        getLineNumber in interface javax.xml.transform.SourceLocator
        Returns:
        The line number, or -1 if none is available.
        See Also:
        getColumnNumber()
      • getEndColumnNumber

        public int getEndColumnNumber()
        Return the column number where the current document event ends. Note that this is the column number of the first character after the text associated with the document event. The first column in a line is position 1.
        Returns:
        The column number, or -1 if none is available.
        See Also:
        getLineNumber()
      • getColumnNumber

        public int getColumnNumber()
        Return the column number where the current document event ends. Note that this is the column number of the first character after the text associated with the document event. The first column in a line is position 1.
        Specified by:
        getColumnNumber in interface javax.xml.transform.SourceLocator
        Returns:
        The column number, or -1 if none is available.
        See Also:
        getLineNumber()
      • getPublicId

        public java.lang.String getPublicId()
        Return the public identifier for the current document event.

        This will be the public identifier

        Specified by:
        getPublicId in interface javax.xml.transform.SourceLocator
        Returns:
        A string containing the public identifier, or null if none is available.
        See Also:
        getSystemId()
      • getSystemId

        public java.lang.String getSystemId()
        Return the system identifier for the current document event.

        If the system identifier is a URL, the parser must resolve it fully before passing it to the application.

        Specified by:
        getSystemId in interface javax.xml.transform.SourceLocator
        Returns:
        A string containing the system identifier, or null if none is available.
        See Also:
        getPublicId()
      • setLocaterInfo

        public void setLocaterInfo​(javax.xml.transform.SourceLocator locator)
        Set the location information for this element.
        Parameters:
        locator - Source Locator with location information for this element
      • setEndLocaterInfo

        public void setEndLocaterInfo​(javax.xml.transform.SourceLocator locator)
        Set the end location information for this element.
        Parameters:
        locator - Source Locator with location information for this element
      • hasVariableDecl

        public boolean hasVariableDecl()
      • setXmlSpace

        public void setXmlSpace​(int v)
        Set the "xml:space" attribute. A text node is preserved if an ancestor element of the text node has an xml:space attribute with a value of preserve, and no closer ancestor element has xml:space with a value of default.
        Parameters:
        v - Enumerated value, either Constants.ATTRVAL_PRESERVE or Constants.ATTRVAL_STRIP.
        See Also:
        strip in XSLT Specification, section-Creating-Text in XSLT Specification
      • getXmlSpace

        public boolean getXmlSpace()
        Get the "xml:space" attribute. A text node is preserved if an ancestor element of the text node has an xml:space attribute with a value of preserve, and no closer ancestor element has xml:space with a value of default.
        Returns:
        The value of the xml:space attribute
        See Also:
        strip in XSLT Specification, section-Creating-Text in XSLT Specification
      • getDeclaredPrefixes

        public java.util.List getDeclaredPrefixes()
        Return a table that contains all prefixes available within this element context.
        Returns:
        Vector containing the prefixes available within this element context
      • setPrefixes

        public void setPrefixes​(org.xml.sax.helpers.NamespaceSupport nsSupport)
                         throws javax.xml.transform.TransformerException
        From the SAX2 helper class, set the namespace table for this element. Take care to call resolveInheritedNamespaceDecls. after all namespace declarations have been added.
        Parameters:
        nsSupport - non-null reference to NamespaceSupport from the ContentHandler.
        Throws:
        javax.xml.transform.TransformerException
      • setPrefixes

        public void setPrefixes​(org.xml.sax.helpers.NamespaceSupport nsSupport,
                                boolean excludeXSLDecl)
                         throws javax.xml.transform.TransformerException
        Copy the namespace declarations from the NamespaceSupport object. Take care to call resolveInheritedNamespaceDecls. after all namespace declarations have been added.
        Parameters:
        nsSupport - non-null reference to NamespaceSupport from the ContentHandler.
        excludeXSLDecl - true if XSLT namespaces should be ignored.
        Throws:
        javax.xml.transform.TransformerException
      • getNamespaceForPrefix

        public java.lang.String getNamespaceForPrefix​(java.lang.String prefix,
                                                      org.w3c.dom.Node context)
        Fullfill the PrefixResolver interface. Calling this for this class will throw an error.
        Specified by:
        getNamespaceForPrefix in interface PrefixResolver
        Parameters:
        prefix - The prefix to look up, which may be an empty string ("") for the default Namespace.
        context - The node context from which to look up the URI.
        Returns:
        null if the error listener does not choose to throw an exception.
      • getNamespaceForPrefix

        public java.lang.String getNamespaceForPrefix​(java.lang.String prefix)
        Given a namespace, get the corrisponding prefix. 9/15/00: This had been iteratively examining the m_declaredPrefixes field for this node and its parents. That makes life difficult for the compilation experiment, which doesn't have a static vector of local declarations. Replaced a recursive solution, which permits easier subclassing/overriding.
        Specified by:
        getNamespaceForPrefix in interface PrefixResolver
        Parameters:
        prefix - non-null reference to prefix string, which should map to a namespace URL.
        Returns:
        The namespace URL that the prefix maps to, or null if no mapping can be found.
      • resolvePrefixTables

        public void resolvePrefixTables()
                                 throws javax.xml.transform.TransformerException
        Combine the parent's namespaces with this namespace for fast processing, taking care to reference the parent's namespace if this namespace adds nothing new. (Recursive method, walking the elements depth-first, processing parents before children). Note that this method builds m_prefixTable with aliased namespaces, *not* the original namespaces.
        Throws:
        javax.xml.transform.TransformerException
      • setUid

        public void setUid​(int i)
        Set the UID (document order index).
        Parameters:
        i - Index of this child.
      • getUid

        public int getUid()
        Get the UID (document order index).
        Returns:
        Index of this child
      • getParentNode

        public org.w3c.dom.Node getParentNode()
        Get the parent as a Node.
        Specified by:
        getParentNode in interface org.w3c.dom.Node
        Overrides:
        getParentNode in class UnImplNode
        Returns:
        This node's parent node
      • getParentElem

        public ElemTemplateElement getParentElem()
        Get the parent as an ElemTemplateElement.
        Returns:
        This node's parent as an ElemTemplateElement
      • setParentElem

        public void setParentElem​(ElemTemplateElement p)
        Set the parent as an ElemTemplateElement.
        Parameters:
        p - This node's parent as an ElemTemplateElement
      • getNextSibling

        public org.w3c.dom.Node getNextSibling()
        Get the next sibling (as a Node) or return null.
        Specified by:
        getNextSibling in interface org.w3c.dom.Node
        Overrides:
        getNextSibling in class UnImplNode
        Returns:
        this node's next sibling or null
      • getPreviousSibling

        public org.w3c.dom.Node getPreviousSibling()
        Get the previous sibling (as a Node) or return null. Note that this may be expensive if the parent has many kids; we accept that price in exchange for avoiding the prev pointer TODO: If we were sure parents and sibs are always ElemTemplateElements, we could hit the fields directly rather than thru accessors.
        Specified by:
        getPreviousSibling in interface org.w3c.dom.Node
        Overrides:
        getPreviousSibling in class UnImplNode
        Returns:
        This node's previous sibling or null
      • getPreviousSiblingElem

        public ElemTemplateElement getPreviousSiblingElem()
        Get the previous sibling (as a Node) or return null. Note that this may be expensive if the parent has many kids; we accept that price in exchange for avoiding the prev pointer TODO: If we were sure parents and sibs are always ElemTemplateElements, we could hit the fields directly rather than thru accessors.
        Returns:
        This node's previous sibling or null
      • getNextSiblingElem

        public ElemTemplateElement getNextSiblingElem()
        Get the next sibling (as a ElemTemplateElement) or return null.
        Returns:
        This node's next sibling (as a ElemTemplateElement) or null
      • getParentNodeElem

        public ElemTemplateElement getParentNodeElem()
        Get the parent element.
        Returns:
        This node's next parent (as a ElemTemplateElement) or null
      • getFirstChild

        public org.w3c.dom.Node getFirstChild()
        Get the first child as a Node.
        Specified by:
        getFirstChild in interface org.w3c.dom.Node
        Overrides:
        getFirstChild in class UnImplNode
        Returns:
        This node's first child or null
      • getFirstChildElem

        public ElemTemplateElement getFirstChildElem()
        Get the first child as a ElemTemplateElement.
        Returns:
        This node's first child (as a ElemTemplateElement) or null
      • getLastChild

        public org.w3c.dom.Node getLastChild()
        Get the last child.
        Specified by:
        getLastChild in interface org.w3c.dom.Node
        Overrides:
        getLastChild in class UnImplNode
        Returns:
        This node's last child
      • getLastChildElem

        public ElemTemplateElement getLastChildElem()
        Get the last child.
        Returns:
        This node's last child
      • getDOMBackPointer

        public org.w3c.dom.Node getDOMBackPointer()
        If this stylesheet was created from a DOM, get the DOM backpointer that this element originated from. For tooling use.
        Returns:
        DOM backpointer that this element originated from or null.
      • setDOMBackPointer

        public void setDOMBackPointer​(org.w3c.dom.Node n)
        If this stylesheet was created from a DOM, set the DOM backpointer that this element originated from. For tooling use.
        Parameters:
        n - DOM backpointer that this element originated from.
      • compareTo

        public int compareTo​(java.lang.Object o)
                      throws java.lang.ClassCastException
        Compares this object with the specified object for precedence order. The order is determined by the getImportCountComposed() of the containing composed stylesheet and the getUid() of this element. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
        Parameters:
        o - The object to be compared to this object
        Returns:
        a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
        Throws:
        java.lang.ClassCastException - if the specified object's type prevents it from being compared to this Object.
      • shouldStripWhiteSpace

        public boolean shouldStripWhiteSpace​(XPathContext support,
                                             org.w3c.dom.Element targetElement)
                                      throws javax.xml.transform.TransformerException
        Get information about whether or not an element should strip whitespace.
        Specified by:
        shouldStripWhiteSpace in interface WhitespaceStrippingElementMatcher
        Parameters:
        support - The XPath runtime state.
        targetElement - Element to check
        Returns:
        true if the whitespace should be stripped.
        Throws:
        javax.xml.transform.TransformerException
        See Also:
        strip in XSLT Specification
      • canAcceptVariables

        public boolean canAcceptVariables()
        Tell if this element can accept variable declarations.
        Returns:
        true if the element can accept and process variable declarations.
      • exprAddChild

        public void exprAddChild​(ExpressionNode n,
                                 int i)
        This method tells the node to add its argument to the node's list of children.
        Specified by:
        exprAddChild in interface ExpressionNode
        Parameters:
        n - Must be a ElemTemplateElement.
      • exprGetChild

        public ExpressionNode exprGetChild​(int i)
        This method returns a child node. The children are numbered from zero, left to right.
        Specified by:
        exprGetChild in interface ExpressionNode
      • exprGetNumChildren

        public int exprGetNumChildren()
        Return the number of children the node has.
        Specified by:
        exprGetNumChildren in interface ExpressionNode
      • callVisitors

        public void callVisitors​(XSLTVisitor visitor)
        Description copied from interface: XSLTVisitable
        This will traverse the heararchy, calling the visitor for each member. If the called visitor method returns false, the subtree should not be called.
        Specified by:
        callVisitors in interface XSLTVisitable
        Parameters:
        visitor - The visitor whose appropriate method will be called.
        See Also:
        XSLTVisitable.callVisitors(XSLTVisitor)