]> source.dussan.org Git - vaadin-framework.git/commitdiff
Changed ConnectorHierarchyChangeEvent to use the same mechanisms as StatechangeEvent
authorArtur Signell <artur@vaadin.com>
Mon, 2 Apr 2012 22:15:51 +0000 (01:15 +0300)
committerArtur Signell <artur@vaadin.com>
Wed, 4 Apr 2012 21:08:35 +0000 (00:08 +0300)
14 files changed:
src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
src/com/vaadin/terminal/gwt/client/ComponentConnector.java
src/com/vaadin/terminal/gwt/client/ComponentContainerConnector.java
src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangeEvent.java [new file with mode: 0644]
src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangedEvent.java [deleted file]
src/com/vaadin/terminal/gwt/client/ServerConnector.java
src/com/vaadin/terminal/gwt/client/communication/AbstractServerConnectorEvent.java
src/com/vaadin/terminal/gwt/client/communication/StateChangeEvent.java
src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java
src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java
src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java
src/com/vaadin/terminal/gwt/client/ui/CustomComponentConnector.java
src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java
src/com/vaadin/terminal/gwt/client/ui/RootConnector.java

index 11b7820a11078e669baa7cee9bb22217a0c6c567..854755743b41465d29b2324a56f970f99df05d62 100644 (file)
@@ -1023,7 +1023,7 @@ public class ApplicationConnection {
                 Collection<StateChangeEvent> pendingStateChangeEvents = updateConnectorState(json);
 
                 // Update hierarchy, do not fire events
-                Collection<ConnectorHierarchyChangedEvent> pendingHierarchyChangeEvents = updateConnectorHierarchy(json);
+                Collection<ConnectorHierarchyChangeEvent> pendingHierarchyChangeEvents = updateConnectorHierarchy(json);
 
                 // Fire hierarchy change events
                 sendHierarchyChangeEvents(pendingHierarchyChangeEvents);
@@ -1232,14 +1232,14 @@ public class ApplicationConnection {
             }
 
             private void sendHierarchyChangeEvents(
-                    Collection<ConnectorHierarchyChangedEvent> pendingHierarchyChangeEvents) {
+                    Collection<ConnectorHierarchyChangeEvent> pendingHierarchyChangeEvents) {
                 if (pendingHierarchyChangeEvents.isEmpty()) {
                     return;
                 }
 
                 VConsole.log(" * Sending hierarchy change events");
-                for (ConnectorHierarchyChangedEvent event : pendingHierarchyChangeEvents) {
-                    event.getParent().connectorHierarchyChanged(event);
+                for (ConnectorHierarchyChangeEvent event : pendingHierarchyChangeEvents) {
+                    event.getConnector().fireEvent(event);
                 }
 
             }
@@ -1269,7 +1269,10 @@ public class ApplicationConnection {
                                     ApplicationConnection.this);
 
                             connector.setState((SharedState) state);
-                            events.add(new StateChangeEvent(connector));
+                            StateChangeEvent event = GWT
+                                    .create(StateChangeEvent.class);
+                            event.setConnector(connector);
+                            events.add(event);
                         }
                     } catch (final Throwable e) {
                         VConsole.error(e);
@@ -1289,9 +1292,9 @@ public class ApplicationConnection {
              * @return A collection of events that should be fired when update
              *         of hierarchy and state is complete
              */
-            private Collection<ConnectorHierarchyChangedEvent> updateConnectorHierarchy(
+            private Collection<ConnectorHierarchyChangeEvent> updateConnectorHierarchy(
                     ValueMap json) {
-                List<ConnectorHierarchyChangedEvent> events = new LinkedList<ConnectorHierarchyChangedEvent>();
+                List<ConnectorHierarchyChangeEvent> events = new LinkedList<ConnectorHierarchyChangeEvent>();
 
                 VConsole.log(" * Updating connector hierarchy");
                 if (!json.containsKey("hierarchy")) {
@@ -1353,10 +1356,10 @@ public class ApplicationConnection {
                         }
 
                         // Fire change event if the hierarchy has changed
-                        ConnectorHierarchyChangedEvent event = GWT
-                                .create(ConnectorHierarchyChangedEvent.class);
+                        ConnectorHierarchyChangeEvent event = GWT
+                                .create(ConnectorHierarchyChangeEvent.class);
                         event.setOldChildren(oldChildren);
-                        event.setParent(ccc);
+                        event.setConnector(ccc);
                         ccc.setChildren((List) newChildren);
                         events.add(event);
 
index 1e9b3a3a0f230d1fb00ae799de153d91834155d7..48d988be765a37cf5ed2196710d413775ecf9c56 100644 (file)
@@ -85,7 +85,7 @@ public interface ComponentConnector extends ServerConnector {
      * and the server side are in sync.
      * <p>
      * Note that calling this method does not fire a
-     * {@link ConnectorHierarchyChangedEvent}. The event is fired only when the
+     * {@link ConnectorHierarchyChangeEvent}. The event is fired only when the
      * whole hierarchy has been updated.
      * 
      * @param parent
index e0438360e3221c6a51b7fb288c1858573b361366..05334e8049b026ab05885a5c732a7bee2294d13e 100644 (file)
@@ -6,7 +6,9 @@ package com.vaadin.terminal.gwt.client;
 
 import java.util.List;
 
+import com.google.gwt.event.shared.HandlerRegistration;
 import com.google.gwt.user.client.ui.HasWidgets;
+import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler;
 
 /**
  * An interface used by client-side connectors whose widget is a component
@@ -48,7 +50,7 @@ public interface ComponentContainerConnector extends ComponentConnector {
      * side and the server side are in sync.
      * <p>
      * Note that calling this method does not call
-     * {@link #connectorHierarchyChanged(ConnectorHierarchyChangedEvent)}. The
+     * {@link #connectorHierarchyChanged(ConnectorHierarchyChangeEvent)}. The
      * event method is called only when the hierarchy has been updated for all
      * connectors.
      * 
@@ -58,15 +60,15 @@ public interface ComponentContainerConnector extends ComponentConnector {
     public void setChildren(List<ComponentConnector> children);
 
     /**
-     * Called when the child connector hierarchy of this connector has changed.
-     * When this method is called the full hierarchy has been updated so
-     * {@link #getChildren()} returns the new child connectors of this
-     * connector.
+     * Adds a handler that is called whenever the child hierarchy of this
+     * connector has been updated by the server.
      * 
-     * @param event
-     *            An event containing additional information about how the
-     *            hierarchy has changed.
+     * @param handler
+     *            The handler that should be added.
+     * @return A handler registration reference that can be used to unregister
+     *         the handler
      */
-    public void connectorHierarchyChanged(ConnectorHierarchyChangedEvent event);
+    public HandlerRegistration addConnectorHierarchyChangeHandler(
+            ConnectorHierarchyChangeHandler handler);
 
 }
diff --git a/src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangeEvent.java b/src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangeEvent.java
new file mode 100644 (file)
index 0000000..a929380
--- /dev/null
@@ -0,0 +1,97 @@
+/*\r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+package com.vaadin.terminal.gwt.client;\r
+\r
+import java.io.Serializable;\r
+import java.util.List;\r
+\r
+import com.google.gwt.event.shared.EventHandler;\r
+import com.google.gwt.event.shared.GwtEvent;\r
+import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler;\r
+import com.vaadin.terminal.gwt.client.communication.AbstractServerConnectorEvent;\r
+\r
+/**\r
+ * Event for containing data related to a change in the {@link ServerConnector}\r
+ * hierarchy. A {@link ConnectorHierarchyChangedEvent} is fired when an update\r
+ * from the server has been fully processed and all hierarchy updates have been\r
+ * completed.\r
+ * \r
+ * @author Vaadin Ltd\r
+ * @version @VERSION@\r
+ * @since 7.0.0\r
+ * \r
+ */\r
+public class ConnectorHierarchyChangeEvent extends\r
+        AbstractServerConnectorEvent<ConnectorHierarchyChangeHandler> {\r
+    /**\r
+     * Type of this event, used by the event bus.\r
+     */\r
+    public static final Type<ConnectorHierarchyChangeHandler> TYPE = new Type<ConnectorHierarchyChangeHandler>();\r
+\r
+    List<ComponentConnector> oldChildren;\r
+    private ComponentContainerConnector parent;\r
+\r
+    public ConnectorHierarchyChangeEvent() {\r
+    }\r
+\r
+    /**\r
+     * Returns a collection of the old children for the connector. This was the\r
+     * state before the update was received from the server.\r
+     * \r
+     * @return A collection of old child connectors. Never returns null.\r
+     */\r
+    public List<ComponentConnector> getOldChildren() {\r
+        return oldChildren;\r
+    }\r
+\r
+    /**\r
+     * Sets the collection of the old children for the connector.\r
+     * \r
+     * @param oldChildren\r
+     *            The old child connectors. Must not be null.\r
+     */\r
+    public void setOldChildren(List<ComponentConnector> oldChildren) {\r
+        this.oldChildren = oldChildren;\r
+    }\r
+\r
+    /**\r
+     * Returns the {@link ComponentContainerConnector} for which this event\r
+     * occurred.\r
+     * \r
+     * @return The {@link ComponentContainerConnector} whose child collection\r
+     *         has changed. Never returns null.\r
+     */\r
+    public ComponentContainerConnector getParent() {\r
+        return parent;\r
+    }\r
+\r
+    /**\r
+     * Sets the {@link ComponentContainerConnector} for which this event\r
+     * occurred.\r
+     * \r
+     * @param The\r
+     *            {@link ComponentContainerConnector} whose child collection has\r
+     *            changed.\r
+     */\r
+    public void setParent(ComponentContainerConnector parent) {\r
+        this.parent = parent;\r
+    }\r
+\r
+    public interface ConnectorHierarchyChangeHandler extends Serializable,\r
+            EventHandler {\r
+        public void onConnectorHierarchyChange(\r
+                ConnectorHierarchyChangeEvent connectorHierarchyChangeEvent);\r
+    }\r
+\r
+    @Override\r
+    public void dispatch(ConnectorHierarchyChangeHandler handler) {\r
+        handler.onConnectorHierarchyChange(this);\r
+    }\r
+\r
+    @Override\r
+    public GwtEvent.Type<ConnectorHierarchyChangeHandler> getAssociatedType() {\r
+        return TYPE;\r
+    }\r
+\r
+}
\ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangedEvent.java b/src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangedEvent.java
deleted file mode 100644 (file)
index c3a9d86..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* 
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client;
-
-import java.util.List;
-
-/**
- * Event for containing data related to a change in the {@link ServerConnector}
- * hierarchy. A {@link ConnectorHierarchyChangedEvent} is fired when an update
- * from the server has been fully processed and all hierarchy updates have been
- * completed.
- * 
- * @author Vaadin Ltd
- * @version @VERSION@
- * @since 7.0.0
- * 
- */
-public class ConnectorHierarchyChangedEvent {
-    List<ComponentConnector> oldChildren;
-    private ComponentContainerConnector parent;
-
-    public ConnectorHierarchyChangedEvent() {
-    }
-
-    /**
-     * Returns a collection of the old children for the connector. This was the
-     * state before the update was received from the server.
-     * 
-     * @return A collection of old child connectors. Never returns null.
-     */
-    public List<ComponentConnector> getOldChildren() {
-        return oldChildren;
-    }
-
-    /**
-     * Sets the collection of the old children for the connector.
-     * 
-     * @param oldChildren
-     *            The old child connectors. Must not be null.
-     */
-    public void setOldChildren(List<ComponentConnector> oldChildren) {
-        this.oldChildren = oldChildren;
-    }
-
-    /**
-     * Returns the {@link ComponentContainerConnector} for which this event
-     * occurred.
-     * 
-     * @return The {@link ComponentContainerConnector} whose child collection
-     *         has changed. Never returns null.
-     */
-    public ComponentContainerConnector getParent() {
-        return parent;
-    }
-
-    /**
-     * Sets the {@link ComponentContainerConnector} for which this event
-     * occurred.
-     * 
-     * @param The
-     *            {@link ComponentContainerConnector} whose child collection has
-     *            changed.
-     */
-    public void setParent(ComponentContainerConnector parent) {
-        this.parent = parent;
-    }
-
-}
index 740644458c8d3d5f0ffb261cc172539fd1a479e3..ece2e6e02011af6534d10c6e7d4effe638a5774c 100644 (file)
@@ -36,6 +36,10 @@ public interface ServerConnector extends Connector {
      *            The new state
      * @deprecated This should be removed. Framework should update what is
      *             returned by getState() instead of setting a new state object.
+     *             Note that this must be done either so that setState accepts a
+     *             state object once (first time received from the server) or
+     *             getState() in AbstractConnector uses a generated class to
+     *             create the state object (like RpcProy.craete())
      */
     @Deprecated
     public void setState(SharedState state);
@@ -88,6 +92,8 @@ public interface ServerConnector extends Connector {
      * 
      * @param handler
      *            The handler that should be added.
+     * @return A handler registration reference that can be used to unregister
+     *         the handler
      */
     public HandlerRegistration addStateChangeHandler(StateChangeHandler handler);
 
index f29f873873d7281e0aba8890c7e14ee9466aa7ce..b465e3ad7e7cf314c82205ea1b61ced8df5d4ad6 100644 (file)
@@ -11,14 +11,17 @@ public abstract class AbstractServerConnectorEvent<H extends EventHandler>
         extends GwtEvent<H> {
     private ServerConnector connector;
 
-    protected AbstractServerConnectorEvent(ServerConnector connector) {
-        this.connector = connector;
+    protected AbstractServerConnectorEvent() {
     }
 
     public ServerConnector getConnector() {
         return connector;
     }
 
+    public void setConnector(ServerConnector connector) {
+        this.connector = connector;
+    }
+
     /**
      * Sends this event to the given handler.
      * 
index 0a930e11f2fbc484d0ff6e96c2d71d8a8966b72d..39ecbc022c0baa53a388df62e34088709340cce7 100644 (file)
@@ -6,7 +6,6 @@ package com.vaadin.terminal.gwt.client.communication;
 import java.io.Serializable;
 
 import com.google.gwt.event.shared.EventHandler;
-import com.vaadin.terminal.gwt.client.ServerConnector;
 import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChangeHandler;
 
 public class StateChangeEvent extends
@@ -21,8 +20,7 @@ public class StateChangeEvent extends
         return TYPE;
     }
 
-    public StateChangeEvent(ServerConnector connector) {
-        super(connector);
+    public StateChangeEvent() {
     }
 
     @Override
index 77be9f99c485f036f272fdcf89ed6c655c02034f..2e26a06d1e9aa08bb80a01bd7dc3f8cc2c2f2254 100644 (file)
@@ -6,17 +6,20 @@ package com.vaadin.terminal.gwt.client.ui;
 import java.util.LinkedList;
 import java.util.List;
 
+import com.google.gwt.event.shared.HandlerRegistration;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.ComponentContainerConnector;
 import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent;
+import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
+import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
 import com.vaadin.terminal.gwt.client.Util;
 import com.vaadin.terminal.gwt.client.VConsole;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
 
 public abstract class AbstractComponentContainerConnector extends
-        AbstractComponentConnector implements ComponentContainerConnector {
+        AbstractComponentConnector implements ComponentContainerConnector,
+        ConnectorHierarchyChangeHandler {
 
     public interface LayoutClickRPC extends ServerRpc {
         /**
@@ -38,6 +41,7 @@ public abstract class AbstractComponentContainerConnector extends
      * Default constructor
      */
     public AbstractComponentContainerConnector() {
+        addConnectorHierarchyChangeHandler(this);
     }
 
     /*
@@ -72,7 +76,7 @@ public abstract class AbstractComponentContainerConnector extends
      * connectorHierarchyChanged
      * (com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent)
      */
-    public void connectorHierarchyChanged(ConnectorHierarchyChangedEvent event) {
+    public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
         // TODO Remove debug info
         VConsole.log("Hierarchy changed for " + Util.getConnectorString(this));
         String oldChildren = "* Old children: ";
@@ -87,4 +91,11 @@ public abstract class AbstractComponentContainerConnector extends
         }
         VConsole.log(newChildren);
     }
+
+    public HandlerRegistration addConnectorHierarchyChangeHandler(
+            ConnectorHierarchyChangeHandler handler) {
+        return ensureHandlerManager().addHandler(
+                ConnectorHierarchyChangeEvent.TYPE, handler);
+    }
+
 }
index 046767a88d529af457c21d510472d49cb1733aae..29f65b6ed9dee28e93f8d4a3e11774031a66b75d 100644 (file)
@@ -252,9 +252,9 @@ public abstract class AbstractOrderedLayoutConnector extends
     }
 
     @Override
-    public void connectorHierarchyChanged(
-            com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent event) {
-        super.connectorHierarchyChanged(event);
+    public void onConnectorHierarchyChange(
+            com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent event) {
+        super.onConnectorHierarchyChange(event);
         List<ComponentConnector> previousChildren = event.getOldChildren();
         int currentIndex = 0;
         VMeasuringOrderedLayout layout = getWidget();
index dbf16f5b97ca19f3dc1cc50b398bfa90df61f6c8..3942cc24714e56bb32ce91388c4092eb19b6ddb3 100644 (file)
@@ -16,7 +16,7 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.ComponentState;
 import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent;
+import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
 import com.vaadin.terminal.gwt.client.communication.RpcProxy;
 import com.vaadin.terminal.gwt.client.communication.ServerRpc;
@@ -260,8 +260,8 @@ public abstract class AbstractSplitPanelConnector extends
     }
 
     @Override
-    public void connectorHierarchyChanged(ConnectorHierarchyChangedEvent event) {
-        super.connectorHierarchyChanged(event);
+    public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
+        super.onConnectorHierarchyChange(event);
 
         Widget newFirstChildWidget = null;
         if (getFirstChild() != null) {
index 5c7f2c64c34c58d10b3fa13fb05c812165a7a374..68980ef02738b765f64a358616c219106dc0c7db 100644 (file)
@@ -6,7 +6,7 @@ package com.vaadin.terminal.gwt.client.ui;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent;
+import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
 import com.vaadin.terminal.gwt.client.ui.Component.LoadStyle;
 import com.vaadin.ui.CustomComponent;
 
@@ -29,8 +29,8 @@ public class CustomComponentConnector extends
     }
 
     @Override
-    public void connectorHierarchyChanged(ConnectorHierarchyChangedEvent event) {
-        super.connectorHierarchyChanged(event);
+    public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
+        super.onConnectorHierarchyChange(event);
 
         ComponentConnector newChild = null;
         if (getChildren().size() == 1) {
index 815af1048004fd0c78733997761bdecdab2ea78c..833320eaeb640d1b9819014322de649d3c17edb7 100644 (file)
@@ -11,7 +11,7 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
 import com.vaadin.terminal.gwt.client.ComponentState;
-import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent;
+import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
 import com.vaadin.terminal.gwt.client.LayoutManager;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
 import com.vaadin.terminal.gwt.client.UIDL;
@@ -250,8 +250,8 @@ public class PanelConnector extends AbstractComponentContainerConnector
     }
 
     @Override
-    public void connectorHierarchyChanged(ConnectorHierarchyChangedEvent event) {
-        super.connectorHierarchyChanged(event);
+    public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
+        super.onConnectorHierarchyChange(event);
         // We always have 1 child, unless the child is hidden
         Widget newChildWidget = null;
         if (getChildren().size() == 1) {
index 3cff41dbd30ae93a6d1bb960e3415dbbd4470484..cfad231424b4c3e79716a66b7c19c23f397011eb 100644 (file)
@@ -22,7 +22,7 @@ import com.google.gwt.user.client.ui.Widget;
 import com.vaadin.terminal.gwt.client.ApplicationConnection;
 import com.vaadin.terminal.gwt.client.BrowserInfo;
 import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent;
+import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
 import com.vaadin.terminal.gwt.client.ConnectorMap;
 import com.vaadin.terminal.gwt.client.Focusable;
 import com.vaadin.terminal.gwt.client.MouseEventDetails;
@@ -390,8 +390,8 @@ public class RootConnector extends AbstractComponentContainerConnector {
     }
 
     @Override
-    public void connectorHierarchyChanged(ConnectorHierarchyChangedEvent event) {
-        super.connectorHierarchyChanged(event);
+    public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
+        super.onConnectorHierarchyChange(event);
         for (ComponentConnector c : getChildren()) {
             if (c instanceof WindowConnector) {
                 WindowConnector wc = (WindowConnector) c;