From 2c755ff2c207e5e5c52846b3df4d8b415dd84ae7 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Tue, 3 Apr 2012 01:15:51 +0300 Subject: [PATCH] Changed ConnectorHierarchyChangeEvent to use the same mechanisms as StatechangeEvent --- .../gwt/client/ApplicationConnection.java | 23 +-- .../gwt/client/ComponentConnector.java | 2 +- .../client/ComponentContainerConnector.java | 20 ++- ...ava => ConnectorHierarchyChangeEvent.java} | 166 ++++++++++-------- .../terminal/gwt/client/ServerConnector.java | 6 + .../AbstractServerConnectorEvent.java | 7 +- .../communication/StateChangeEvent.java | 4 +- .../AbstractComponentContainerConnector.java | 17 +- .../ui/AbstractOrderedLayoutConnector.java | 6 +- .../ui/AbstractSplitPanelConnector.java | 6 +- .../client/ui/CustomComponentConnector.java | 6 +- .../gwt/client/ui/PanelConnector.java | 6 +- .../terminal/gwt/client/ui/RootConnector.java | 6 +- 13 files changed, 163 insertions(+), 112 deletions(-) rename src/com/vaadin/terminal/gwt/client/{ConnectorHierarchyChangedEvent.java => ConnectorHierarchyChangeEvent.java} (59%) diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java index 11b7820a11..854755743b 100644 --- a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java +++ b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java @@ -1023,7 +1023,7 @@ public class ApplicationConnection { Collection pendingStateChangeEvents = updateConnectorState(json); // Update hierarchy, do not fire events - Collection pendingHierarchyChangeEvents = updateConnectorHierarchy(json); + Collection pendingHierarchyChangeEvents = updateConnectorHierarchy(json); // Fire hierarchy change events sendHierarchyChangeEvents(pendingHierarchyChangeEvents); @@ -1232,14 +1232,14 @@ public class ApplicationConnection { } private void sendHierarchyChangeEvents( - Collection pendingHierarchyChangeEvents) { + Collection 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 updateConnectorHierarchy( + private Collection updateConnectorHierarchy( ValueMap json) { - List events = new LinkedList(); + List events = new LinkedList(); 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); diff --git a/src/com/vaadin/terminal/gwt/client/ComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ComponentConnector.java index 1e9b3a3a0f..48d988be76 100644 --- a/src/com/vaadin/terminal/gwt/client/ComponentConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ComponentConnector.java @@ -85,7 +85,7 @@ public interface ComponentConnector extends ServerConnector { * and the server side are in sync. *

* 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 diff --git a/src/com/vaadin/terminal/gwt/client/ComponentContainerConnector.java b/src/com/vaadin/terminal/gwt/client/ComponentContainerConnector.java index e0438360e3..05334e8049 100644 --- a/src/com/vaadin/terminal/gwt/client/ComponentContainerConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ComponentContainerConnector.java @@ -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. *

* 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 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/ConnectorHierarchyChangedEvent.java b/src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangeEvent.java similarity index 59% rename from src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangedEvent.java rename to src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangeEvent.java index c3a9d86fdf..a9293801c8 100644 --- a/src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangedEvent.java +++ b/src/com/vaadin/terminal/gwt/client/ConnectorHierarchyChangeEvent.java @@ -1,69 +1,97 @@ -/* -@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 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 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 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; - } - -} +/* +@VaadinApache2LicenseForJavaFiles@ + */ +package com.vaadin.terminal.gwt.client; + +import java.io.Serializable; +import java.util.List; + +import com.google.gwt.event.shared.EventHandler; +import com.google.gwt.event.shared.GwtEvent; +import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler; +import com.vaadin.terminal.gwt.client.communication.AbstractServerConnectorEvent; + +/** + * 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 ConnectorHierarchyChangeEvent extends + AbstractServerConnectorEvent { + /** + * Type of this event, used by the event bus. + */ + public static final Type TYPE = new Type(); + + List oldChildren; + private ComponentContainerConnector parent; + + public ConnectorHierarchyChangeEvent() { + } + + /** + * 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 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 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; + } + + public interface ConnectorHierarchyChangeHandler extends Serializable, + EventHandler { + public void onConnectorHierarchyChange( + ConnectorHierarchyChangeEvent connectorHierarchyChangeEvent); + } + + @Override + public void dispatch(ConnectorHierarchyChangeHandler handler) { + handler.onConnectorHierarchyChange(this); + } + + @Override + public GwtEvent.Type getAssociatedType() { + return TYPE; + } + +} \ No newline at end of file diff --git a/src/com/vaadin/terminal/gwt/client/ServerConnector.java b/src/com/vaadin/terminal/gwt/client/ServerConnector.java index 740644458c..ece2e6e020 100644 --- a/src/com/vaadin/terminal/gwt/client/ServerConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ServerConnector.java @@ -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); diff --git a/src/com/vaadin/terminal/gwt/client/communication/AbstractServerConnectorEvent.java b/src/com/vaadin/terminal/gwt/client/communication/AbstractServerConnectorEvent.java index f29f873873..b465e3ad7e 100644 --- a/src/com/vaadin/terminal/gwt/client/communication/AbstractServerConnectorEvent.java +++ b/src/com/vaadin/terminal/gwt/client/communication/AbstractServerConnectorEvent.java @@ -11,14 +11,17 @@ public abstract class AbstractServerConnectorEvent extends GwtEvent { 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. * diff --git a/src/com/vaadin/terminal/gwt/client/communication/StateChangeEvent.java b/src/com/vaadin/terminal/gwt/client/communication/StateChangeEvent.java index 0a930e11f2..39ecbc022c 100644 --- a/src/com/vaadin/terminal/gwt/client/communication/StateChangeEvent.java +++ b/src/com/vaadin/terminal/gwt/client/communication/StateChangeEvent.java @@ -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 diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java index 77be9f99c4..2e26a06d1e 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java @@ -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); + } + } diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java index 046767a88d..29f65b6ed9 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractOrderedLayoutConnector.java @@ -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 previousChildren = event.getOldChildren(); int currentIndex = 0; VMeasuringOrderedLayout layout = getWidget(); diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java index dbf16f5b97..3942cc2471 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractSplitPanelConnector.java @@ -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) { diff --git a/src/com/vaadin/terminal/gwt/client/ui/CustomComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/CustomComponentConnector.java index 5c7f2c64c3..68980ef027 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/CustomComponentConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/CustomComponentConnector.java @@ -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) { diff --git a/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java index 815af10480..833320eaeb 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/PanelConnector.java @@ -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) { diff --git a/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java index 3cff41dbd3..cfad231424 100644 --- a/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java +++ b/src/com/vaadin/terminal/gwt/client/ui/RootConnector.java @@ -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; -- 2.39.5