aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoonas Lehtinen <joonas.lehtinen@itmill.com>2007-09-30 13:56:37 +0000
committerJoonas Lehtinen <joonas.lehtinen@itmill.com>2007-09-30 13:56:37 +0000
commitddd21c36586473dc3123cb27b6af153de4e99fa0 (patch)
tree1a9a8e1f2c2caed635b356d4579e104e5c1f49dc
parent00596710405fa2c56a7b51a7f237cfc5bd170ca4 (diff)
downloadvaadin-framework-ddd21c36586473dc3123cb27b6af153de4e99fa0.tar.gz
vaadin-framework-ddd21c36586473dc3123cb27b6af153de4e99fa0.zip
UIDL Caching system implemenatation. Closes #855
svn changeset:2396/svn branch:trunk
-rwxr-xr-xsrc/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java4
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java7
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java13
-rw-r--r--src/com/itmill/toolkit/ui/AbstractComponent.java10
4 files changed, 27 insertions, 7 deletions
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java
index 8a5d55bfe1..9ad29152e1 100755
--- a/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java
+++ b/src/com/itmill/toolkit/terminal/gwt/client/ApplicationConnection.java
@@ -368,6 +368,10 @@ public class ApplicationConnection implements FocusListener {
public boolean updateComponent(Widget component, UIDL uidl,
boolean manageCaption) {
+ // If the server request that a cached instance should be used, do nothing
+ if (uidl.getBooleanAttribute("cached"))
+ return true;
+
// Switch to correct implementation if needed
if (!widgetSet.isCorrectImplementation(component, uidl)) {
Container parent = getParentLayout(component);
diff --git a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
index c9531bcf55..d039fb44e8 100644
--- a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
+++ b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
@@ -293,7 +293,7 @@ public class CommunicationManager implements Paintable.RepaintRequestListener,
outWriter.print("\"changes\":[");
- paintTarget = new JsonPaintTarget(this, outWriter);
+ paintTarget = new JsonPaintTarget(this, outWriter, !repaintAll);
// Paints components
Set paintables;
@@ -901,6 +901,11 @@ public class CommunicationManager implements Paintable.RepaintRequestListener,
return id;
}
+ public synchronized boolean hasPaintableId(Paintable paintable) {
+
+ return paintableIdMap.containsKey(paintable);
+ }
+
/**
*
* @return
diff --git a/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java b/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java
index 7102adde6c..1fa7b6d82e 100644
--- a/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java
+++ b/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java
@@ -88,6 +88,8 @@ public class JsonPaintTarget implements PaintTarget {
private JsonTag tag;
private int errorsOpen;
+
+ private boolean cacheEnabled = false;
/**
* Creates a new XMLPrintWriter, without automatic line flushing.
@@ -100,7 +102,7 @@ public class JsonPaintTarget implements PaintTarget {
* if the paint operation failed.
*/
public JsonPaintTarget(
- CommunicationManager manager, PrintWriter outWriter)
+ CommunicationManager manager, PrintWriter outWriter, boolean cachingRequired)
throws PaintException {
this.manager = manager;
@@ -116,6 +118,8 @@ public class JsonPaintTarget implements PaintTarget {
// Adds document declaration
// Adds UIDL start tag and its attributes
+
+ this.cacheEnabled = cachingRequired;
}
public void startTag(String tagName) throws PaintException {
@@ -774,10 +778,11 @@ public class JsonPaintTarget implements PaintTarget {
public boolean startTag(Paintable paintable, String tagName)
throws PaintException {
startTag(tagName, true);
+ boolean isPreviouslyPainted = manager.hasPaintableId(paintable);
String id = manager.getPaintableId(paintable);
paintable.addListener(manager);
addAttribute("id", id);
- return false;
+ return cacheEnabled && isPreviouslyPainted;
}
/**
@@ -1086,8 +1091,6 @@ public class JsonPaintTarget implements PaintTarget {
}
public void setPreCachedResources(Set preCachedResources) {
- // TODO Auto-generated method stub
-
+ throw new UnsupportedOperationException();
}
-
}
diff --git a/src/com/itmill/toolkit/ui/AbstractComponent.java b/src/com/itmill/toolkit/ui/AbstractComponent.java
index 9befb25f1c..18ce5b59a5 100644
--- a/src/com/itmill/toolkit/ui/AbstractComponent.java
+++ b/src/com/itmill/toolkit/ui/AbstractComponent.java
@@ -518,6 +518,7 @@ public abstract class AbstractComponent implements Component, MethodEventSource
* interface.
*/
public void attach() {
+ requestRepaint();
}
/*
@@ -551,7 +552,10 @@ public abstract class AbstractComponent implements Component, MethodEventSource
*/
public final void paint(PaintTarget target) throws PaintException {
- if (!target.startTag(this, this.getTag())) {
+ if (!target.startTag(this, this.getTag()) || repaintRequestListenersNotified) {
+
+ // Paint the contents of the component
+
if (styles != null && styles.size() > 0)
target.addAttribute("style", getStyle());
if (isReadOnly())
@@ -580,6 +584,10 @@ public abstract class AbstractComponent implements Component, MethodEventSource
if (error != null)
error.paint(target);
}
+ } else {
+
+ // Contents have not changed, only cached presentation can be used
+ target.addAttribute("cached", true);
}
target.endTag(this.getTag());