summaryrefslogtreecommitdiffstats
path: root/server/src/com/vaadin/ui/ConnectorTracker.java
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/ui/ConnectorTracker.java
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/ui/ConnectorTracker.java')
-rw-r--r--server/src/com/vaadin/ui/ConnectorTracker.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/server/src/com/vaadin/ui/ConnectorTracker.java b/server/src/com/vaadin/ui/ConnectorTracker.java
index 12ad377b62..27dfebd95e 100644
--- a/server/src/com/vaadin/ui/ConnectorTracker.java
+++ b/server/src/com/vaadin/ui/ConnectorTracker.java
@@ -25,6 +25,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import com.vaadin.terminal.AbstractClientConnector;
+import com.vaadin.terminal.gwt.client.ServerConnector;
import com.vaadin.terminal.gwt.server.ClientConnector;
/**
@@ -50,6 +51,7 @@ public class ConnectorTracker implements Serializable {
private final HashMap<String, ClientConnector> connectorIdToConnector = new HashMap<String, ClientConnector>();
private Set<ClientConnector> dirtyConnectors = new HashSet<ClientConnector>();
+ private Set<ClientConnector> uninitializedConnectors = new HashSet<ClientConnector>();
private Root root;
@@ -91,6 +93,7 @@ public class ConnectorTracker implements Serializable {
.get(connectorId);
if (previouslyRegistered == null) {
connectorIdToConnector.put(connectorId, connector);
+ uninitializedConnectors.add(connector);
getLogger().fine(
"Registered " + connector.getClass().getSimpleName() + " ("
+ connectorId + ")");
@@ -136,6 +139,47 @@ public class ConnectorTracker implements Serializable {
"Unregistered " + connector.getClass().getSimpleName() + " ("
+ connectorId + ")");
connectorIdToConnector.remove(connectorId);
+ uninitializedConnectors.remove(connector);
+ }
+
+ /**
+ * Checks whether the given connector has already been initialized in the
+ * browser. The given connector should be registered with this connector
+ * tracker.
+ *
+ * @param connector
+ * the client connector to check
+ * @return <code>true</code> if the initial state has previously been sent
+ * to the browser, <code>false</code> if the client-side doesn't
+ * already know anything about the connector.
+ */
+ public boolean isClientSideInitialized(ClientConnector connector) {
+ assert connectorIdToConnector.get(connector.getConnectorId()) == connector : "Connector should be registered with this ConnectorTracker";
+ return !uninitializedConnectors.contains(connector);
+ }
+
+ /**
+ * Marks the given connector as initialized, meaning that the client-side
+ * state has been initialized for the connector.
+ *
+ * @see #isClientSideInitialized(ClientConnector)
+ *
+ * @param connector
+ * the connector that should be marked as initialized
+ */
+ public void markClientSideInitialized(ClientConnector connector) {
+ uninitializedConnectors.remove(connector);
+ }
+
+ /**
+ * Marks all currently registered connectors as uninitialized. This should
+ * be done when the client-side has been reset but the server-side state is
+ * retained.
+ *
+ * @see #isClientSideInitialized(ClientConnector)
+ */
+ public void markAllClientSidesUninitialized() {
+ uninitializedConnectors.addAll(connectorIdToConnector.values());
}
/**
@@ -175,6 +219,7 @@ public class ConnectorTracker implements Serializable {
"cleanConnectorMap unregistered connector "
+ getConnectorAndParentInfo(connector)
+ "). This should have been done when the connector was detached.");
+ uninitializedConnectors.remove(connector);
iterator.remove();
}
}