summaryrefslogtreecommitdiffstats
path: root/server/src/com/vaadin/terminal
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2012-08-15 16:12:50 +0300
committerLeif Åstrand <leif@vaadin.com>2012-08-20 08:53:45 +0300
commita80335107906f1c41c1f42d2462dd838e8ea5b6c (patch)
treef85219d1fccb8304e0c1fcc92d1310b31a6300de /server/src/com/vaadin/terminal
parent890356e6ab17661364a04d60ded9fe01628b0830 (diff)
downloadvaadin-framework-a80335107906f1c41c1f42d2462dd838e8ea5b6c.tar.gz
vaadin-framework-a80335107906f1c41c1f42d2462dd838e8ea5b6c.zip
Introduce ClientConnector.beforeClientResponse(boolean initial) #9228
Remove Component.updateState() to use the new method instead.
Diffstat (limited to 'server/src/com/vaadin/terminal')
-rw-r--r--server/src/com/vaadin/terminal/AbstractClientConnector.java5
-rw-r--r--server/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java11
-rw-r--r--server/src/com/vaadin/terminal/gwt/server/ClientConnector.java20
-rw-r--r--server/src/com/vaadin/terminal/gwt/server/DragAndDropService.java5
4 files changed, 38 insertions, 3 deletions
diff --git a/server/src/com/vaadin/terminal/AbstractClientConnector.java b/server/src/com/vaadin/terminal/AbstractClientConnector.java
index 0eb38a3d13..bc1cd2af1a 100644
--- a/server/src/com/vaadin/terminal/AbstractClientConnector.java
+++ b/server/src/com/vaadin/terminal/AbstractClientConnector.java
@@ -518,4 +518,9 @@ public abstract class AbstractClientConnector implements ClientConnector {
return getParent().isConnectorEnabled();
}
}
+
+ @Override
+ public void beforeClientResponse(boolean initial) {
+ // Do nothing by default
+ }
}
diff --git a/server/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java b/server/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
index 96ae70f27c..ffee517550 100644
--- a/server/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
+++ b/server/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
@@ -819,6 +819,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
if (repaintAll) {
getClientCache(root).clear();
rootConnectorTracker.markAllConnectorsDirty();
+ rootConnectorTracker.markAllClientSidesUninitialized();
// Reset sent locales
locales = null;
@@ -833,9 +834,9 @@ public abstract class AbstractCommunicationManager implements Serializable {
"Found " + dirtyVisibleConnectors.size()
+ " dirty connectors to paint");
for (ClientConnector connector : dirtyVisibleConnectors) {
- if (connector instanceof Component) {
- ((Component) connector).updateState();
- }
+ boolean initialized = rootConnectorTracker
+ .isClientSideInitialized(connector);
+ connector.beforeClientResponse(!initialized);
}
rootConnectorTracker.markAllConnectorsClean();
@@ -1251,6 +1252,10 @@ public abstract class AbstractCommunicationManager implements Serializable {
dragAndDropService.printJSONResponse(outWriter);
}
+ for (ClientConnector connector : dirtyVisibleConnectors) {
+ rootConnectorTracker.markClientSideInitialized(connector);
+ }
+
writePerformanceData(outWriter);
}
diff --git a/server/src/com/vaadin/terminal/gwt/server/ClientConnector.java b/server/src/com/vaadin/terminal/gwt/server/ClientConnector.java
index eef4e240ec..c9fe2563f9 100644
--- a/server/src/com/vaadin/terminal/gwt/server/ClientConnector.java
+++ b/server/src/com/vaadin/terminal/gwt/server/ClientConnector.java
@@ -157,4 +157,24 @@ public interface ClientConnector extends Connector, RpcTarget {
* attached to any Root
*/
public Root getRoot();
+
+ /**
+ * Called before the shared state and RPC invocations are sent to the
+ * client. Gives the connector an opportunity to set computed/dynamic state
+ * values or to invoke last minute RPC methods depending on other component
+ * features.
+ * <p>
+ * This method must not alter the component hierarchy in any way. Calling
+ * requestRepaint() from this method will have no effect.
+ * </p>
+ *
+ * @param initial
+ * <code>true</code> if the client-side connector will be created
+ * and initialized after this method has been invoked.
+ * <code>false</code> if there is already an initialized
+ * client-side connector.
+ *
+ * @since 7.0
+ */
+ public void beforeClientResponse(boolean initial);
}
diff --git a/server/src/com/vaadin/terminal/gwt/server/DragAndDropService.java b/server/src/com/vaadin/terminal/gwt/server/DragAndDropService.java
index bb96c6e53e..56d5ed1393 100644
--- a/server/src/com/vaadin/terminal/gwt/server/DragAndDropService.java
+++ b/server/src/com/vaadin/terminal/gwt/server/DragAndDropService.java
@@ -322,4 +322,9 @@ public class DragAndDropService implements VariableOwner, ClientConnector {
public Root getRoot() {
return null;
}
+
+ @Override
+ public void beforeClientResponse(boolean initial) {
+ // Nothing to do
+ }
}