Class BridgeContext

  • All Implemented Interfaces:
    ErrorConstants, CSSContext
    Direct Known Subclasses:
    SVG12BridgeContext

    public class BridgeContext
    extends java.lang.Object
    implements ErrorConstants, CSSContext
    This class represents a context used by the various bridges and the builder. A bridge context is associated to a particular document and cannot be reused. The context encapsulates the dynamic bindings between DOM elements and GVT nodes, graphic contexts such as a GraphicsNodeRenderContext, and the different objects required by the GVT builder to interpret a SVG DOM tree such as the current viewport or the user agent.
    • Field Detail

      • document

        protected org.w3c.dom.Document document
        The document is bridge context is dedicated to.
      • isSVG12

        protected boolean isSVG12
        Whether the document is an SVG 1.2 document.
      • gvtBuilder

        protected GVTBuilder gvtBuilder
        The GVT builder that might be used to create a GVT subtree.
      • interpreterMap

        protected java.util.Map interpreterMap
        The interpreter cache per document. key is the language - value is a Interpreter
      • viewportMap

        protected java.util.Map viewportMap
        The viewports. key is an Element - value is a Viewport
      • viewportStack

        protected java.util.List viewportStack
        The viewport stack. Used in building time.
      • userAgent

        protected UserAgent userAgent
        The user agent.
      • elementNodeMap

        protected java.util.Map elementNodeMap
        Binding Map: key is an SVG Element - value is a GraphicsNode
      • nodeElementMap

        protected java.util.Map nodeElementMap
        Binding Map: key is GraphicsNode - value is a SVG Element.
      • namespaceURIMap

        protected java.util.Map namespaceURIMap
        Bridge Map: Keys are namespace URI - values are HashMap (with keys are local name and values are a Bridge instance).
      • defaultBridge

        protected Bridge defaultBridge
        Default bridge. When a bridge is requested for an element type that does not have a bridge, and there is no other bridge for elements in the same namespace, the default bridge is returned. This is used for custom elements, which all use the same bridge type.
      • reservedNamespaceSet

        protected java.util.Set reservedNamespaceSet
        Default bridge reserved namespaces set. Default bridges will not be created for elements that have a namespace URI present in this set.
      • elementDataMap

        protected java.util.Map elementDataMap
        Element Data Map: This is a general location for elements to 'cache' data. Such as the graphics tree for a pattern or the Gradient arrays. This is a weak hash map and the data is referenced by SoftReference so both must be referenced elsewhere to stay live.
      • interpreterPool

        protected InterpreterPool interpreterPool
        The interpreter pool used to handle scripts.
      • documentLoader

        protected DocumentLoader documentLoader
        The document loader used to load/create Document.
      • documentSize

        protected java.awt.geom.Dimension2D documentSize
        The size of the document.
      • textPainter

        protected TextPainter textPainter
        The text painter to use. Typically, you can specify the text painter that will be used be text nodes.
      • STATIC

        public static final int STATIC
        Indicates that no DOM listeners should be registered. In this case the generated GVT tree should be totally independent of the DOM tree (in practice text holds references to the source text elements for font resolution).
        See Also:
        Constant Field Values
      • INTERACTIVE

        public static final int INTERACTIVE
        Indicates that DOM listeners should be registered to support, 'interactivity' this includes anchors and cursors, but does not include support for DOM modifications.
        See Also:
        Constant Field Values
      • DYNAMIC

        public static final int DYNAMIC
        Indicates that all DOM listeners should be registered. This supports 'interactivity' (anchors and cursors), as well as DOM modifications listeners to update the GVT rendering tree.
        See Also:
        Constant Field Values
      • dynamicStatus

        protected int dynamicStatus
        Whether the bridge should support dynamic, or interactive features.
      • updateManager

        protected UpdateManager updateManager
        The update manager.
      • xblManager

        protected XBLManager xblManager
        The XBL manager.
      • primaryContext

        protected BridgeContext primaryContext
        The bridge context for the primary document, if this is a bridge context for a resource document.
      • childContexts

        protected java.util.HashSet childContexts
        Set of WeakReferences to child BridgeContexts.
      • animationEngine

        protected SVGAnimationEngine animationEngine
        The animation engine for the document.
      • animationLimitingMode

        protected int animationLimitingMode
        The animation limiting mode.
      • animationLimitingAmount

        protected float animationLimitingAmount
        The amount of animation limiting.
      • eventListenerSet

        protected java.util.Set eventListenerSet
        The list of all EventListener attached by bridges that need to be removed on a dispose() call.
      • domCharacterDataModifiedEventListener

        protected EventListener domCharacterDataModifiedEventListener
        The DOM EventListener to receive 'DOMCharacterDataModified' event.
      • domAttrModifiedEventListener

        protected EventListener domAttrModifiedEventListener
        The DOM EventListener to receive 'DOMAttrModified' event.
      • domNodeInsertedEventListener

        protected EventListener domNodeInsertedEventListener
        The DOM EventListener to receive 'DOMNodeInserted' event.
      • domNodeRemovedEventListener

        protected EventListener domNodeRemovedEventListener
        The DOM EventListener to receive 'DOMNodeRemoved' event.
      • cssPropertiesChangedListener

        protected CSSEngineListener cssPropertiesChangedListener
        The CSSEngine listener to receive CSSEngineEvent.
      • animatedAttributeListener

        protected AnimatedAttributeListener animatedAttributeListener
        The listener to receive notification of animated attribute changes.
      • focusManager

        protected FocusManager focusManager
        The EventListener that is responsible of managing DOM focus event.
      • cursorManager

        protected CursorManager cursorManager
        Manages cursors and performs caching when appropriate
      • extensions

        protected java.util.List extensions
      • globalExtensions

        protected static java.util.List globalExtensions
        Returns the extensions supported by this bridge context.
    • Constructor Detail

      • BridgeContext

        protected BridgeContext()
        Constructs a new empty bridge context.
      • BridgeContext

        public BridgeContext​(UserAgent userAgent)
        Constructs a new bridge context.
        Parameters:
        userAgent - the user agent
      • BridgeContext

        public BridgeContext​(UserAgent userAgent,
                             DocumentLoader loader)
        Constructs a new bridge context.
        Parameters:
        userAgent - the user agent
        loader - document loader
      • BridgeContext

        public BridgeContext​(UserAgent userAgent,
                             InterpreterPool interpreterPool,
                             DocumentLoader documentLoader)
        Constructs a new bridge context.
        Parameters:
        userAgent - the user agent
        interpreterPool - the interpreter pool
        documentLoader - document loader
    • Method Detail

      • finalize

        protected void finalize()
        Calls dispose on this BridgeContext, if it is a child context.
        Overrides:
        finalize in class java.lang.Object
      • createSubBridgeContext

        public BridgeContext createSubBridgeContext​(SVGOMDocument newDoc)
        This function creates a new 'sub' BridgeContext to associated with 'newDoc' if one currently doesn't exist, otherwise it returns the BridgeContext currently associated with the document.
        Parameters:
        newDoc - The document to get/create a BridgeContext for.
      • createBridgeContext

        public BridgeContext createBridgeContext​(SVGOMDocument doc)
        This function creates a new BridgeContext, it mostly exists so subclasses can provide an instance of themselves when a sub BridgeContext is needed.
      • initializeDocument

        protected void initializeDocument​(org.w3c.dom.Document document)
        Initializes the given document.
      • getCSSEngineForElement

        public CSSEngine getCSSEngineForElement​(org.w3c.dom.Element e)
        Returns the CSS engine associated with given element.
        Specified by:
        getCSSEngineForElement in interface CSSContext
      • setTextPainter

        public void setTextPainter​(TextPainter textPainter)
        Sets the text painter that will be used by text nodes. This attributes might be used by bridges (especially SVGTextElementBridge) to set the text painter of each TextNode.
        Parameters:
        textPainter - the text painter for text nodes
      • getTextPainter

        public TextPainter getTextPainter()
        Returns the text painter that will be used be text nodes.
      • getDocument

        public org.w3c.dom.Document getDocument()
        Returns the document this bridge context is dedicated to.
      • setDocument

        protected void setDocument​(org.w3c.dom.Document document)
        Sets the document this bridge context is dedicated to, to the specified document.
        Parameters:
        document - the document
      • getFontFamilyMap

        public java.util.Map getFontFamilyMap()
        Returns the map of font families
      • setFontFamilyMap

        protected void setFontFamilyMap​(java.util.Map fontFamilyMap)
        Sets the map of font families to the specified value.
        Parameters:
        fontFamilyMap - the map of font families
      • setElementData

        public void setElementData​(org.w3c.dom.Node n,
                                   java.lang.Object data)
        Associates a data object with a node so it can be retrieved later. This is primarily used for caching the graphics node generated from a 'pattern' element. A soft reference to the data object is used.
      • getElementData

        public java.lang.Object getElementData​(org.w3c.dom.Node n)
        Retrieves a data object associated with the given node.
      • getUserAgent

        public UserAgent getUserAgent()
        Returns the user agent of this bridge context.
      • setUserAgent

        protected void setUserAgent​(UserAgent userAgent)
        Sets the user agent to the specified user agent.
        Parameters:
        userAgent - the user agent
      • getGVTBuilder

        public GVTBuilder getGVTBuilder()
        Returns the GVT builder that is currently used to build the GVT tree.
      • setGVTBuilder

        protected void setGVTBuilder​(GVTBuilder gvtBuilder)
        Sets the GVT builder that uses this context.
      • getInterpreterPool

        public InterpreterPool getInterpreterPool()
        Returns the interpreter pool used to handle scripts.
      • getFocusManager

        public FocusManager getFocusManager()
        Returns the focus manager.
      • getCursorManager

        public CursorManager getCursorManager()
        Returns the cursor manager
      • setInterpreterPool

        protected void setInterpreterPool​(InterpreterPool interpreterPool)
        Sets the interpreter pool used to handle scripts to the specified interpreter pool.
        Parameters:
        interpreterPool - the interpreter pool
      • getInterpreter

        public Interpreter getInterpreter​(java.lang.String language)
        Returns a Interpreter for the specified language.
        Parameters:
        language - the scripting language
      • getDocumentLoader

        public DocumentLoader getDocumentLoader()
        Returns the document loader used to load external documents.
      • setDocumentLoader

        protected void setDocumentLoader​(DocumentLoader newDocumentLoader)
        Sets the document loader used to load external documents.
        Parameters:
        newDocumentLoader - the new document loader
      • getDocumentSize

        public java.awt.geom.Dimension2D getDocumentSize()
        Returns the actual size of the document or null if the document has not been built yet.
      • setDocumentSize

        protected void setDocumentSize​(java.awt.geom.Dimension2D d)
        Sets the size of the document to the specified dimension.
        Parameters:
        d - the actual size of the SVG document
      • isDynamic

        public boolean isDynamic()
        Returns true if the document is dynamic, false otherwise.
        Specified by:
        isDynamic in interface CSSContext
      • isInteractive

        public boolean isInteractive()
        Returns true if the document is interactive, false otherwise.
        Specified by:
        isInteractive in interface CSSContext
      • setDynamicState

        public void setDynamicState​(int status)
        Sets the document as a STATIC, INTERACTIVE or DYNAMIC document. Call this method before the build phase (ie. before gvtBuilder.build(...)) otherwise, that will have no effect.
        Parameters:
        status - the document dynamicStatus
      • setDynamic

        public void setDynamic​(boolean dynamic)
        Sets the document as DYNAMIC if dynamic is true STATIC otherwise.
      • setInteractive

        public void setInteractive​(boolean interactive)
        Sets the document as INTERACTIVE if interactive is true STATIC otherwise.
      • getUpdateManager

        public UpdateManager getUpdateManager()
        Returns the update manager, if the bridge supports dynamic features.
      • setUpdateManager

        protected void setUpdateManager​(UpdateManager um)
        Sets the update manager.
      • setUpdateManager

        protected void setUpdateManager​(BridgeContext ctx,
                                        UpdateManager um)
        Sets the update manager on the given BridgeContext.
      • setXBLManager

        protected void setXBLManager​(BridgeContext ctx,
                                     XBLManager xm)
        Sets the xblManager variable of the given BridgeContext.
      • isSVG12

        public boolean isSVG12()
        Returns whether the managed document is an SVG 1.2 document.
      • getPrimaryBridgeContext

        public BridgeContext getPrimaryBridgeContext()
        Returns the primary bridge context.
      • getChildContexts

        public BridgeContext[] getChildContexts()
        Returns an array of the child contexts.
      • getAnimationEngine

        public SVGAnimationEngine getAnimationEngine()
        Returns the AnimationEngine for the document. Creates one if it doesn't exist.
      • createURIResolver

        public URIResolver createURIResolver​(org.w3c.dom.svg.SVGDocument doc,
                                             DocumentLoader dl)
        Returns a new URIResolver object.
      • getReferencedNode

        public org.w3c.dom.Node getReferencedNode​(org.w3c.dom.Element e,
                                                  java.lang.String uri)
        Returns the node referenced by the specified element by the specified uri. The referenced node can be either an element given by a fragment ID, or the document node.
        Parameters:
        e - the element referencing
        uri - the uri of the referenced node
      • getReferencedElement

        public org.w3c.dom.Element getReferencedElement​(org.w3c.dom.Element e,
                                                        java.lang.String uri)
        Returns the element referenced by the specified element by the specified uri. The referenced element can not be a Document.
        Parameters:
        e - the element referencing
        uri - the uri of the referenced element
      • getViewport

        public Viewport getViewport​(org.w3c.dom.Element e)
        Returns the viewport of the specified element.
        Parameters:
        e - the element interested in its viewport
      • openViewport

        public void openViewport​(org.w3c.dom.Element e,
                                 Viewport viewport)
        Starts a new viewport from the specified element.
        Parameters:
        e - the element that defines a new viewport
        viewport - the viewport of the element
      • removeViewport

        public void removeViewport​(org.w3c.dom.Element e)
      • closeViewport

        public void closeViewport​(org.w3c.dom.Element e)
        Closes the viewport associated to the specified element.
        Parameters:
        e - the element that closes its viewport
      • bind

        public void bind​(org.w3c.dom.Node node,
                         GraphicsNode gn)
        Binds the specified GraphicsNode to the specified Node. This method automatically bind the graphics node to the element and the element to the graphics node.
        Parameters:
        node - the DOM Node to bind to the specified graphics node
        gn - the graphics node to bind to the specified element
      • unbind

        public void unbind​(org.w3c.dom.Node node)
        Removes the binding of the specified Node.
        Parameters:
        node - the DOM Node to unbind
      • getGraphicsNode

        public GraphicsNode getGraphicsNode​(org.w3c.dom.Node node)
        Returns the GraphicsNode associated to the specified Node or null if any.
        Parameters:
        node - the DOM Node associated to the graphics node to return
      • getElement

        public org.w3c.dom.Element getElement​(GraphicsNode gn)
        Returns the Node associated to the specified GraphicsNode or null if any.
        Parameters:
        gn - the graphics node associated to the element to return
      • hasGraphicsNodeBridge

        public boolean hasGraphicsNodeBridge​(org.w3c.dom.Element element)
        Returns true if the specified element has a GraphicsNodeBridge associated to it, false otherwise.
        Parameters:
        element - the element
      • getDocumentBridge

        public DocumentBridge getDocumentBridge()
        Returns the bridge for the document node.
      • getBridge

        public Bridge getBridge​(org.w3c.dom.Element element)
        Returns the bridge associated with the specified element.
        Parameters:
        element - the element
      • getBridge

        public Bridge getBridge​(java.lang.String namespaceURI,
                                java.lang.String localName)
        Returns the bridge associated with the element type
        Parameters:
        namespaceURI - namespace of the requested element
        localName - element's local name
      • putBridge

        public void putBridge​(java.lang.String namespaceURI,
                              java.lang.String localName,
                              Bridge bridge)
        Associates the specified Bridge object with the specified namespace URI and local name.
        Parameters:
        namespaceURI - the namespace URI
        localName - the local name
        bridge - the bridge that manages the element
      • putBridge

        public void putBridge​(Bridge bridge)
        Associates the specified Bridge object with it's namespace URI and local name.
        Parameters:
        bridge - the bridge that manages the element
      • removeBridge

        public void removeBridge​(java.lang.String namespaceURI,
                                 java.lang.String localName)
        Removes the Bridge object associated to the specified namespace URI and local name.
        Parameters:
        namespaceURI - the namespace URI
        localName - the local name
      • setDefaultBridge

        public void setDefaultBridge​(Bridge bridge)
        Sets the Bridge object to be used for foreign namespace elements.
        Parameters:
        bridge - the bridge that manages the element
      • putReservedNamespaceURI

        public void putReservedNamespaceURI​(java.lang.String namespaceURI)
        Adds a namespace URI to avoid when creating default bridges.
      • removeReservedNamespaceURI

        public void removeReservedNamespaceURI​(java.lang.String namespaceURI)
        Removes a namespace URI to avoid when creating default bridges.
      • addUIEventListeners

        public void addUIEventListeners​(org.w3c.dom.Document doc)
        Adds EventListeners to the input document to handle the cursor property. This is not done in the addDOMListeners method because addDOMListeners is only used for dynamic content whereas cursor support is provided for all content. Also note that it is very important that the listeners be registered for the capture phase as the 'default' behavior for cursors is handled by the BridgeContext during the capture phase and the 'custom' behavior (handling of 'auto' on anchors, for example), is handled during the bubbling phase.
      • removeUIEventListeners

        public void removeUIEventListeners​(org.w3c.dom.Document doc)
      • addDOMListeners

        public void addDOMListeners()
        Adds EventListeners to the DOM and CSSEngineListener to the CSSEngine to handle any modifications on the DOM tree or style properties and update the GVT tree in response.
      • removeDOMListeners

        protected void removeDOMListeners()
        Removes event listeners from the DOM and CSS engine.
      • storeEventListener

        protected void storeEventListener​(EventTarget t,
                                          java.lang.String s,
                                          EventListener l,
                                          boolean b)
        Adds to the eventListenerSet the specified event listener registration.
      • storeEventListenerNS

        protected void storeEventListenerNS​(EventTarget t,
                                            java.lang.String n,
                                            java.lang.String s,
                                            EventListener l,
                                            boolean b)
        Adds to the eventListenerSet the specified event listener registration.
      • addGVTListener

        public void addGVTListener​(org.w3c.dom.Document doc)
        Adds the GVT listener for AWT event support.
      • clearChildContexts

        protected void clearChildContexts()
        Clears the list of child BridgeContexts and disposes them if there are no more references to them.
      • dispose

        public void dispose()
        Disposes this BridgeContext.
      • getSVGContext

        protected static SVGContext getSVGContext​(org.w3c.dom.Node node)
        Returns the SVGContext associated to the specified Node or null if there is none.
      • getBridgeUpdateHandler

        protected static BridgeUpdateHandler getBridgeUpdateHandler​(org.w3c.dom.Node node)
        Returns the BridgeUpdateHandler associated to the specified Node or null if there is none.
      • getSystemColor

        public Value getSystemColor​(java.lang.String ident)
        Returns the Value corresponding to the given system color.
        Specified by:
        getSystemColor in interface CSSContext
      • getLighterFontWeight

        public float getLighterFontWeight​(float f)
        Returns a lighter font-weight.
        Specified by:
        getLighterFontWeight in interface CSSContext
      • getBolderFontWeight

        public float getBolderFontWeight​(float f)
        Returns a bolder font-weight.
        Specified by:
        getBolderFontWeight in interface CSSContext
      • getPixelUnitToMillimeter

        public float getPixelUnitToMillimeter()
        Returns the size of a px CSS unit in millimeters.
        Specified by:
        getPixelUnitToMillimeter in interface CSSContext
      • getMediumFontSize

        public float getMediumFontSize()
        Returns the medium font size.
        Specified by:
        getMediumFontSize in interface CSSContext
      • getBlockWidth

        public float getBlockWidth​(org.w3c.dom.Element elt)
        Returns the width of the block which directly contains the given element.
        Specified by:
        getBlockWidth in interface CSSContext
      • getBlockHeight

        public float getBlockHeight​(org.w3c.dom.Element elt)
        Returns the height of the block which directly contains the given element.
        Specified by:
        getBlockHeight in interface CSSContext
      • checkLoadExternalResource

        public void checkLoadExternalResource​(ParsedURL resourceURL,
                                              ParsedURL docURL)
                                       throws java.lang.SecurityException
        This method throws a SecurityException if the resource found at url and referenced from docURL should not be loaded. This is a convenience method to call checkLoadExternalResource on the ExternalResourceSecurity strategy returned by getExternalResourceSecurity.
        Specified by:
        checkLoadExternalResource in interface CSSContext
        Parameters:
        resourceURL - url for the script, as defined in the resource's xlink:href attribute. If that attribute was empty, then this parameter should be null
        docURL - url for the document into which the resource was found.
        Throws:
        java.lang.SecurityException
      • isDynamicDocument

        public boolean isDynamicDocument​(org.w3c.dom.Document doc)
        Tells whether the given SVG document is dynamic.
      • isInteractiveDocument

        public boolean isInteractiveDocument​(org.w3c.dom.Document doc)
        Tells whether the given SVG document is Interactive. We say it is, if it has any <title>, <desc>, or <a> elements, of if the 'cursor' property is anything but Auto on any element.
      • checkInteractiveElement

        public boolean checkInteractiveElement​(org.w3c.dom.Element e)
        used by isInteractiveDocument to check if document contains any 'interactive' elements.
      • checkInteractiveElement

        public boolean checkInteractiveElement​(org.w3c.dom.svg.SVGDocument doc,
                                               org.w3c.dom.Element e)
        used by isInteractiveDocument to check if document contains any 'interactive' elements.
      • setAnimationLimitingNone

        public void setAnimationLimitingNone()
        Sets the animation limiting mode to "none".
      • setAnimationLimitingCPU

        public void setAnimationLimitingCPU​(float pc)
        Sets the animation limiting mode to a percentage of CPU.
        Parameters:
        pc - the maximum percentage of CPU to use (0 < pc ≤ 1)
      • setAnimationLimitingFPS

        public void setAnimationLimitingFPS​(float fps)
        Sets the animation limiting mode to a number of frames per second.
        Parameters:
        fps - the maximum number of frames per second (fps > 0)
      • setAnimationLimitingMode

        protected void setAnimationLimitingMode()
        Set the animationg limiting mode on the animation engine.
      • registerSVGBridges

        public void registerSVGBridges()
        Registers the bridges to handle SVG 1.0 elements.
      • getBridgeExtensions

        public java.util.List getBridgeExtensions​(org.w3c.dom.Document doc)
      • getGlobalBridgeExtensions

        public static java.util.List getGlobalBridgeExtensions()