hillion 01/07/05 09:59:07 Modified: sources/org/apache/batik/bridge BridgeEventSupport.java sources/org/apache/batik/dom AbstractDOMImplementation.java AbstractDocument.java sources/org/apache/batik/dom/events EventSupport.java sources/org/apache/batik/dom/svg SVGDOMImplementation.java Added: sources/org/apache/batik/dom/events DOMEvent.java DocumentEventSupport.java Log: Bug #1815 fixed. Revision Changes Path 1.12 +3 -5 xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java Index: BridgeEventSupport.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/BridgeEventSupport.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- BridgeEventSupport.java 2001/05/15 13:54:56 1.11 +++ BridgeEventSupport.java 2001/07/05 16:58:59 1.12 @@ -49,7 +49,7 @@ * on the GVT root to propagate GVT events to the DOM. * @author <a href="mailto:[EMAIL PROTECTED]>Christophe Jolif</a> * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: BridgeEventSupport.java,v 1.11 2001/05/15 13:54:56 deweese Exp $ + * @version $Id: BridgeEventSupport.java,v 1.12 2001/07/05 16:58:59 hillion Exp $ */ class BridgeEventSupport implements SVGConstants { private static final String[] EVENT_ATTRIBUTES_GRAPHICS = { @@ -404,11 +404,9 @@ else if ((evt.BUTTON3_MASK & evt.getModifiers()) != 0) button = 2; - MouseEvent mevent = + MouseEvent mevent = (MouseEvent) // DOM Level 2 6.5 cast from Document to DocumentEvent is ok - (MouseEvent)org.apache.batik.dom.events.EventSupport. - createEvent(org.apache.batik.dom.events.EventSupport. - MOUSE_EVENT_TYPE); + ((DocumentEvent)elmt.getOwnerDocument()).createEvent("MouseEvents"); // deal with the related node/target node = evt.getRelatedNode(); EventTarget relatedTarget = 1.6 +10 -1 xml-batik/sources/org/apache/batik/dom/AbstractDOMImplementation.java Index: AbstractDOMImplementation.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/AbstractDOMImplementation.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- AbstractDOMImplementation.java 2001/05/17 16:44:26 1.5 +++ AbstractDOMImplementation.java 2001/07/05 16:59:01 1.6 @@ -8,7 +8,9 @@ package org.apache.batik.dom; +import org.apache.batik.dom.events.DocumentEventSupport; import org.apache.batik.dom.util.HashTable; + import org.w3c.dom.DOMImplementation; /** @@ -16,7 +18,7 @@ * {@link org.w3c.dom.css.DOMImplementationCSS} interfaces. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AbstractDOMImplementation.java,v 1.5 2001/05/17 16:44:26 hillion Exp $ + * @version $Id: AbstractDOMImplementation.java,v 1.6 2001/07/05 16:59:01 hillion Exp $ */ public abstract class AbstractDOMImplementation implements DOMImplementation { @@ -69,5 +71,12 @@ } return false; } + } + + /** + * Creates an DocumentEventSupport object suitable for use with this implementation. + */ + public DocumentEventSupport createDocumentEventSupport() { + return new DocumentEventSupport(); } } 1.7 +13 -4 xml-batik/sources/org/apache/batik/dom/AbstractDocument.java Index: AbstractDocument.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/AbstractDocument.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- AbstractDocument.java 2001/05/31 12:40:00 1.6 +++ AbstractDocument.java 2001/07/05 16:59:01 1.7 @@ -17,7 +17,7 @@ import java.util.Locale; import java.util.MissingResourceException; -import org.apache.batik.dom.events.EventSupport; +import org.apache.batik.dom.events.DocumentEventSupport; import org.apache.batik.dom.traversal.TraversalSupport; import org.apache.batik.i18n.Localizable; import org.apache.batik.i18n.LocalizableSupport; @@ -40,7 +40,7 @@ * This class implements the {@link org.w3c.dom.Document} interface. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: AbstractDocument.java,v 1.6 2001/05/31 12:40:00 hillion Exp $ + * @version $Id: AbstractDocument.java,v 1.7 2001/07/05 16:59:01 hillion Exp $ */ public abstract class AbstractDocument extends AbstractParentNode @@ -72,9 +72,14 @@ protected transient TraversalSupport traversalSupport; /** + * The DocumentEventSupport. + */ + protected transient DocumentEventSupport documentEventSupport; + + /** * Whether the event dispatching must be done. */ - protected boolean eventsEnabled; + protected transient boolean eventsEnabled; /** * Creates a new document. @@ -249,7 +254,11 @@ * org.w3c.dom.events.DocumentEvent#createEvent(String)}. */ public Event createEvent(String eventType) throws DOMException { - return EventSupport.createEvent(eventType); + if (documentEventSupport == null) { + documentEventSupport = + ((AbstractDOMImplementation)implementation).createDocumentEventSupport(); + } + return documentEventSupport.createEvent(eventType); } // DocumentTraversal ///////////////////////////////////////////////////// 1.4 +0 -118 xml-batik/sources/org/apache/batik/dom/events/EventSupport.java Index: EventSupport.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/events/EventSupport.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- EventSupport.java 2000/10/23 09:44:45 1.3 +++ EventSupport.java 2001/07/05 16:59:05 1.4 @@ -23,31 +23,6 @@ public class EventSupport { /** - * The MutationEvent type. - */ - public static final String MUTATION_EVENT_TYPE = "MutationEvents"; - - /** - * The MouseEvent type. - */ - public static final String MOUSE_EVENT_TYPE = "MouseEvents"; - - /** - * The UIEvent type. - */ - public static final String UI_EVENT_TYPE = "UIEvents"; - - /** - * The event factories table. - */ - protected static HashTable eventFactories = new HashTable(); - { - eventFactories.put(MUTATION_EVENT_TYPE, new MutationEventFactory()); - eventFactories.put(MOUSE_EVENT_TYPE, new MouseEventFactory()); - eventFactories.put(UI_EVENT_TYPE, new UIEventFactory()); - } - - /** * The capturing listeners table. */ protected HashTable capturingListeners; @@ -58,53 +33,6 @@ protected HashTable bubblingListeners; /** - * Creates a new Event depending on the specified parameter. - * - * @param eventType The <code>eventType</code> parameter specifies the - * type of <code>Event</code> interface to be created. If the - * <code>Event</code> interface specified is supported by the - * implementation this method will return a new <code>Event</code> of - * the interface type requested. If the <code>Event</code> is to be - * dispatched via the <code>dispatchEvent</code> method the - * appropriate event init method must be called after creation in order - * to initialize the <code>Event</code>'s values. As an example, a - * user wishing to synthesize some kind of <code>UIEvent</code> would - * call <code>createEvent</code> with the parameter "UIEvent". The - * <code>initUIEvent</code> method could then be called on the newly - * created <code>UIEvent</code> to set the specific type of UIEvent to - * be dispatched and set its context information.The - * <code>createEvent</code> method is used in creating - * <code>Event</code>s when it is either inconvenient or unnecessary - * for the user to create an <code>Event</code> themselves. In cases - * where the implementation provided <code>Event</code> is - * insufficient, users may supply their own <code>Event</code> - * implementations for use with the <code>dispatchEvent</code> method. - * - * @return The newly created <code>Event</code> - * - * @exception DOMException - * NOT_SUPPORTED_ERR: Raised if the implementation does not support the - * type of <code>Event</code> interface requested - */ - public static Event createEvent(String eventType) - throws DOMException { - EventFactory ef = (EventFactory)eventFactories.get(eventType); - if (ef == null) { - throw new DOMException(DOMException.NOT_SUPPORTED_ERR, - "Bad event type: " + eventType); - } - return ef.createEvent(); - } - - /** - * Registers a new EventFactory object. - */ - public static void registerEventFactory(String eventType, - EventFactory factory) { - eventFactories.put(eventType, factory); - } - - /** * This method allows the registration of event listeners on the * event target. If an <code>EventListener</code> is added to an * <code>EventTarget</code> which is currently processing an event @@ -342,51 +270,5 @@ private static EventException createUnspecifiedEventTypeErr(String s) { return createEventException(EventException.UNSPECIFIED_EVENT_TYPE_ERR, s); - } - - /** - * This interface represents an event factory. - */ - public interface EventFactory { - /** - * Creates a new Event object. - */ - Event createEvent(); - } - - /** - * To create a mutation event. - */ - protected static class MutationEventFactory implements EventFactory { - /** - * Creates a new Event object. - */ - public Event createEvent() { - return new DOMMutationEvent(); - } - } - - /** - * To create a mouse event. - */ - protected static class MouseEventFactory implements EventFactory { - /** - * Creates a new Event object. - */ - public Event createEvent() { - return new DOMMouseEvent(); - } - } - - /** - * To create a UI event. - */ - protected static class UIEventFactory implements EventFactory { - /** - * Creates a new Event object. - */ - public Event createEvent() { - return new DOMUIEvent(); - } } } 1.1 xml-batik/sources/org/apache/batik/dom/events/DOMEvent.java Index: DOMEvent.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ package org.apache.batik.dom.events; /** * A simple event. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> * @version $Id: DOMEvent.java,v 1.1 2001/07/05 16:59:04 hillion Exp $ */ public class DOMEvent extends AbstractEvent { } 1.1 xml-batik/sources/org/apache/batik/dom/events/DocumentEventSupport.java Index: DocumentEventSupport.java =================================================================== /***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ package org.apache.batik.dom.events; import org.apache.batik.dom.util.*; import org.w3c.dom.*; import org.w3c.dom.events.*; /** * This class implements the behavior of DocumentEvent. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> * @version $Id: DocumentEventSupport.java,v 1.1 2001/07/05 16:59:04 hillion Exp $ */ public class DocumentEventSupport { /** * The Event type. */ public static final String EVENT_TYPE = "Events"; /** * The MutationEvent type. */ public static final String MUTATION_EVENT_TYPE = "MutationEvents"; /** * The MouseEvent type. */ public static final String MOUSE_EVENT_TYPE = "MouseEvents"; /** * The UIEvent type. */ public static final String UI_EVENT_TYPE = "UIEvents"; /** * The event factories table. */ protected HashTable eventFactories = new HashTable(); { eventFactories.put(EVENT_TYPE.toLowerCase(), new SimpleEventFactory()); eventFactories.put(MUTATION_EVENT_TYPE.toLowerCase(), new MutationEventFactory()); eventFactories.put(MOUSE_EVENT_TYPE.toLowerCase(), new MouseEventFactory()); eventFactories.put(UI_EVENT_TYPE.toLowerCase(), new UIEventFactory()); } /** * Creates a new Event depending on the specified parameter. * * @param eventType The <code>eventType</code> parameter specifies the * type of <code>Event</code> interface to be created. If the * <code>Event</code> interface specified is supported by the * implementation this method will return a new <code>Event</code> of * the interface type requested. If the <code>Event</code> is to be * dispatched via the <code>dispatchEvent</code> method the * appropriate event init method must be called after creation in order * to initialize the <code>Event</code>'s values. As an example, a * user wishing to synthesize some kind of <code>UIEvent</code> would * call <code>createEvent</code> with the parameter "UIEvent". The * <code>initUIEvent</code> method could then be called on the newly * created <code>UIEvent</code> to set the specific type of UIEvent to * be dispatched and set its context information.The * <code>createEvent</code> method is used in creating * <code>Event</code>s when it is either inconvenient or unnecessary * for the user to create an <code>Event</code> themselves. In cases * where the implementation provided <code>Event</code> is * insufficient, users may supply their own <code>Event</code> * implementations for use with the <code>dispatchEvent</code> method. * * @return The newly created <code>Event</code> * * @exception DOMException * NOT_SUPPORTED_ERR: Raised if the implementation does not support the * type of <code>Event</code> interface requested */ public Event createEvent(String eventType) throws DOMException { EventFactory ef = (EventFactory)eventFactories.get(eventType.toLowerCase()); if (ef == null) { throw new DOMException(DOMException.NOT_SUPPORTED_ERR, "Bad event type: " + eventType); } return ef.createEvent(); } /** * Registers a new EventFactory object. */ public void registerEventFactory(String eventType, EventFactory factory) { eventFactories.put(eventType.toLowerCase(), factory); } /** * This interface represents an event factory. */ public interface EventFactory { /** * Creates a new Event object. */ Event createEvent(); } /** * To create a simple event. */ protected static class SimpleEventFactory implements EventFactory { /** * Creates a new Event object. */ public Event createEvent() { return new DOMEvent(); } } /** * To create a mutation event. */ protected static class MutationEventFactory implements EventFactory { /** * Creates a new Event object. */ public Event createEvent() { return new DOMMutationEvent(); } } /** * To create a mouse event. */ protected static class MouseEventFactory implements EventFactory { /** * Creates a new Event object. */ public Event createEvent() { return new DOMMouseEvent(); } } /** * To create a UI event. */ protected static class UIEventFactory implements EventFactory { /** * Creates a new Event object. */ public Event createEvent() { return new DOMUIEvent(); } } } 1.11 +16 -11 xml-batik/sources/org/apache/batik/dom/svg/SVGDOMImplementation.java Index: SVGDOMImplementation.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/dom/svg/SVGDOMImplementation.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- SVGDOMImplementation.java 2001/05/17 16:36:53 1.10 +++ SVGDOMImplementation.java 2001/07/05 16:59:06 1.11 @@ -18,7 +18,7 @@ import org.apache.batik.dom.AbstractDOMImplementation; import org.apache.batik.dom.AbstractNode; import org.apache.batik.dom.StyleSheetFactory; -import org.apache.batik.dom.events.EventSupport; +import org.apache.batik.dom.events.DocumentEventSupport; import org.apache.batik.dom.util.CSSStyleDeclarationFactory; import org.apache.batik.dom.util.DOMUtilities; import org.apache.batik.dom.util.HashTable; @@ -40,7 +40,7 @@ * This class implements the {@link org.w3c.dom.DOMImplementation} interface. * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> - * @version $Id: SVGDOMImplementation.java,v 1.10 2001/05/17 16:36:53 hillion Exp $ + * @version $Id: SVGDOMImplementation.java,v 1.11 2001/07/05 16:59:06 hillion Exp $ */ public class SVGDOMImplementation extends AbstractDOMImplementation @@ -59,15 +59,6 @@ protected final static DOMImplementation DOM_IMPLEMENTATION = new SVGDOMImplementation(); - static { - EventSupport.registerEventFactory("SVGEvents", - new EventSupport.EventFactory() { - public Event createEvent() { - return new SVGOMEvent(); - } - }); - } - { registerFeature("CSS", "2.0"); registerFeature("StyleSheets", "2.0"); @@ -212,5 +203,19 @@ } //throw new RuntimeException("'" + type + "' not supported"); return null; + } + + /** + * Creates an DocumentEventSupport object suitable for use with this implementation. + */ + public DocumentEventSupport createDocumentEventSupport() { + DocumentEventSupport result = new DocumentEventSupport(); + result.registerEventFactory("SVGEvents", + new DocumentEventSupport.EventFactory() { + public Event createEvent() { + return new SVGOMEvent(); + } + }); + return result; } } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]