aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2009-02-03 08:33:04 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2009-02-03 08:33:04 +0000
commit309d4f4ba601feeac89444e46c9f87adb690b1e4 (patch)
tree84eafdb78bc92f48c2e947cfb435edbc6e339820 /src
parent973919e4563735988ada6e65e52a8604fc615e9d (diff)
downloadvaadin-framework-309d4f4ba601feeac89444e46c9f87adb690b1e4.tar.gz
vaadin-framework-309d4f4ba601feeac89444e46c9f87adb690b1e4.zip
fixes #1816, paintReference should now does not mark paintable as cached
svn changeset:6708/svn branch:trunk
Diffstat (limited to 'src')
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java6
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java33
2 files changed, 28 insertions, 11 deletions
diff --git a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
index ced2dd593e..448b2dcd62 100644
--- a/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
+++ b/src/com/itmill/toolkit/terminal/gwt/server/CommunicationManager.java
@@ -94,9 +94,9 @@ public class CommunicationManager implements Paintable.RepaintRequestListener {
private final ArrayList dirtyPaintabletSet = new ArrayList();
- private final HashMap paintableIdMap = new HashMap();
+ private final HashMap<Paintable, String> paintableIdMap = new HashMap<Paintable, String>();
- private final HashMap idPaintableMap = new HashMap();
+ private final HashMap<String, Paintable> idPaintableMap = new HashMap<String, Paintable>();
private int idSequence = 0;
@@ -1098,7 +1098,7 @@ public class CommunicationManager implements Paintable.RepaintRequestListener {
*/
public String getPaintableId(Paintable paintable) {
- String id = (String) paintableIdMap.get(paintable);
+ String id = paintableIdMap.get(paintable);
if (id == null) {
// use testing identifier as id if set
id = paintable.getDebugId();
diff --git a/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java b/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java
index 6f897ddc86..81351daf0c 100644
--- a/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java
+++ b/src/com/itmill/toolkit/terminal/gwt/server/JsonPaintTarget.java
@@ -37,9 +37,9 @@ public class JsonPaintTarget implements PaintTarget {
private final static String UIDL_ARG_NAME = "name";
- private final Stack mOpenTags;
+ private final Stack<String> mOpenTags;
- private final Stack openJsonTags;
+ private final Stack<JsonTag> openJsonTags;
private final PrintWriter uidlBuffer;
@@ -59,7 +59,9 @@ public class JsonPaintTarget implements PaintTarget {
private boolean cacheEnabled = false;
- private Collection paintedComponents = new HashSet();
+ private Collection<Paintable> paintedComponents = new HashSet<Paintable>();
+
+ private Collection<Paintable> identifiersCreatedDueRefPaint;
/**
* Creates a new XMLPrintWriter, without automatic line flushing.
@@ -80,8 +82,8 @@ public class JsonPaintTarget implements PaintTarget {
uidlBuffer = outWriter;
// Initialize tag-writing
- mOpenTags = new Stack();
- openJsonTags = new Stack();
+ mOpenTags = new Stack<String>();
+ openJsonTags = new Stack<JsonTag>();
cacheEnabled = cachingRequired;
}
@@ -156,11 +158,11 @@ public class JsonPaintTarget implements PaintTarget {
}
if (openJsonTags.size() > 0) {
- final JsonTag parent = (JsonTag) openJsonTags.pop();
+ final JsonTag parent = openJsonTags.pop();
String lastTag = "";
- lastTag = (String) mOpenTags.pop();
+ lastTag = mOpenTags.pop();
if (!tagName.equalsIgnoreCase(lastTag)) {
throw new PaintException("Invalid UIDL: wrong ending tag: '"
+ tagName + "' expected: '" + lastTag + "'.");
@@ -769,7 +771,9 @@ public class JsonPaintTarget implements PaintTarget {
public boolean startTag(Paintable paintable, String tagName)
throws PaintException {
startTag(tagName, true);
- final boolean isPreviouslyPainted = manager.hasPaintableId(paintable);
+ final boolean isPreviouslyPainted = manager.hasPaintableId(paintable)
+ && (identifiersCreatedDueRefPaint == null || !identifiersCreatedDueRefPaint
+ .contains(paintable));
final String id = manager.getPaintableId(paintable);
paintable.addListener(manager);
addAttribute("id", id);
@@ -779,6 +783,12 @@ public class JsonPaintTarget implements PaintTarget {
public void paintReference(Paintable paintable, String referenceName)
throws PaintException {
+ if (!manager.hasPaintableId(paintable)) {
+ if (identifiersCreatedDueRefPaint == null) {
+ identifiersCreatedDueRefPaint = new HashSet<Paintable>();
+ }
+ identifiersCreatedDueRefPaint.add(paintable);
+ }
final String id = manager.getPaintableId(paintable);
addAttribute(referenceName, id);
}
@@ -968,6 +978,7 @@ public class JsonPaintTarget implements PaintTarget {
this.name = name;
}
+ @Override
public String getJsonPresentation() {
return "\"" + name + "\":" + (value == true ? "true" : "false");
}
@@ -982,6 +993,7 @@ public class JsonPaintTarget implements PaintTarget {
this.name = name;
}
+ @Override
public String getJsonPresentation() {
return "\"" + name + "\":\"" + value + "\"";
}
@@ -996,6 +1008,7 @@ public class JsonPaintTarget implements PaintTarget {
this.name = name;
}
+ @Override
public String getJsonPresentation() {
return "\"" + name + "\":" + value;
}
@@ -1009,6 +1022,7 @@ public class JsonPaintTarget implements PaintTarget {
this.name = name;
}
+ @Override
public String getJsonPresentation() {
return "\"" + name + "\":" + value;
}
@@ -1022,6 +1036,7 @@ public class JsonPaintTarget implements PaintTarget {
this.name = name;
}
+ @Override
public String getJsonPresentation() {
return "\"" + name + "\":" + value;
}
@@ -1035,6 +1050,7 @@ public class JsonPaintTarget implements PaintTarget {
this.name = name;
}
+ @Override
public String getJsonPresentation() {
return "\"" + name + "\":" + value;
}
@@ -1048,6 +1064,7 @@ public class JsonPaintTarget implements PaintTarget {
this.name = name;
}
+ @Override
public String getJsonPresentation() {
String pres = "\"" + name + "\":[";
for (int i = 0; i < value.length;) {