// Adds document declaration
// Adds UIDL start tag and its attributes
- tag = new JsonTag();
- openJsonTags.push(tag);
- append("{");
-
- }
-
- /**
- * Method append.This method is thread safe.
- *
- * @param string
- * the text to insert.
- */
- private void append(String string) {
- uidlBuffer.print(string);
+ tag = new JsonTag("changes");
}
-
public void startTag(String tagName) throws PaintException {
startTag(tagName, false);
}
mOpenTags.push(tagName);
openJsonTags.push(tag);
+ tag = new JsonTag(tagName);
- if(isChildNode && !tag.childrenArrayOpen) {
- append(tag.startField());
- tag.openChildrenArray();
- }
- if(!isChildNode && tag.childrenArrayOpen)
- tag.closeChildrenArray();
-
- append(tag.startField());
- tag = new JsonTag();
- if(isChildNode) {
- append("{");
- tag.setChildNode(true);
- } else {
- // Prints the tag with attributes
- append("" + tagName +": {");
- }
mTagArgumentListOpen = true;
if (!tagName.equalsIgnoreCase(lastTag))
throw new PaintException("Invalid UIDL: wrong ending tag: '"
+ tagName + "' expected: '" + lastTag + "'.");
+
+ parent.addData(tag.getJSON());
- if(tag.childrenArrayOpen)
- tag.closeChildrenArray();
- append(tag.getData());
- append(tag.attributesAsJsonObject());
- append(tag.variablesAsJsonObject());
- // Writes the end (closing) tag
- append("}");
tag = parent;
- flush();
}
/**
*
*/
public void addText(String str) throws PaintException {
- tag.addData(escapeJSON(str));
+ tag.addData("\"" + escapeJSON(str) + "\"");
}
/**
* if the paint operation failed.
*/
public void addAttribute(String name, boolean value) throws PaintException {
- tag.addAttribute( name + ":" + (value ? "true" : "false"));
+ tag.addAttribute("\"" + name + "\":" + (value ? "true" : "false"));
}
/**
"Parameters must be non-null strings");
- tag.addAttribute( name + ": \"" + escapeJSON(value) + "\"");
+ tag.addAttribute("\"" + name + "\": \"" + escapeJSON(value) + "\"");
}
*/
public void addSection(String sectionTagName, String sectionData)
throws PaintException {
- tag.startField();
- append(sectionTagName + ":\"" + escapeJSON(sectionData) + "\"");
+ tag.addData("{\"" + sectionTagName + "\":\"" + escapeJSON(sectionData) + "\"}");
}
/**
* if the paint operation failed.
*/
public void close() throws PaintException {
- append("}");
if (!this.closed) {
+ uidlBuffer.append(tag.getJSON());
flush();
-
// Close all
this.uidlBuffer.close();
this.closed = true;
String id = manager.getPaintableId(paintable);
paintable.addListener(manager);
addAttribute("id", id);
- addSection("t",tagName);
return false;
}
*
*/
class JsonTag {
- boolean firstField = true;
+ boolean firstField = false;
Vector variables = new Vector();
+
+ Vector children = new Vector();
Vector attr = new Vector();
public boolean childrenArrayOpen = false;
private boolean childNode = false;
+
+ private boolean tagClosed = false;
- public JsonTag() {
-
+ public JsonTag(String tagName) {
+ data.append("[\"" + tagName +"\"");
}
+ private void closeTag() {
+ if(!tagClosed) {
+ data.append(attributesAsJsonObject());
+ data.append(getData());
+ // Writes the end (closing) tag
+ data.append("]");
+ this.tagClosed = true;
+ }
+ }
+
+ public String getJSON() {
+ if(!tagClosed) {
+ this.closeTag();
+ }
+ return data.toString();
+ }
+
public void openChildrenArray() {
if(!childrenArrayOpen) {
- append("c : [");
+// append("c : [");
childrenArrayOpen = true;
- firstField = true;
+// firstField = true;
}
}
}
public void closeChildrenArray() {
- append("]");
- firstField = false;
+// append("]");
+// firstField = false;
}
public void setChildNode(boolean b) {
}
}
+ /**
+ *
+ * @param s json string, object or array
+ */
public void addData(String s) {
- data.append(s);
+ children.add(s);
}
public String getData() {
- if(data.length() == 0)
- return "";
- return startField() + "d:\"" + escapeJSON(data.toString()) +"\"";
+ StringBuffer buf = new StringBuffer();
+ Iterator it = children.iterator();
+ while(it.hasNext()) {
+ buf.append(startField());
+ buf.append(it.next());
+ }
+ return buf.toString();
}
public void addAttribute(String jsonNode) {
attr.add(jsonNode);
}
- public String attributesAsJsonObject() {
- if(attr.size() == 0)
- return "";
+ private String attributesAsJsonObject() {
StringBuffer buf = new StringBuffer();
buf.append(startField());
- buf.append("a:{");
+ buf.append("{");
for (Iterator iter = attr.iterator(); iter.hasNext();) {
String element = (String) iter.next();
buf.append(element);
if(iter.hasNext())
buf.append(",");
}
+ buf.append(tag.variablesAsJsonObject());
buf.append("}");
return buf.toString();
}
variables.add(v);
}
- public String variablesAsJsonObject() {
+ private String variablesAsJsonObject() {
if(variables.size() == 0)
return "";
StringBuffer buf = new StringBuffer();
buf.append(startField());
- buf.append("v:{");
- for (Iterator iter = variables.iterator(); iter.hasNext();) {
+ buf.append("\"v\":{");
+ Iterator iter = variables.iterator();
+ while (iter.hasNext()) {
Variable element = (Variable) iter.next();
buf.append(element.getJsonPresentation());
if(iter.hasNext())
}
public String getJsonPresentation() {
- return name +":{name:\""+name+"\",id:\"" +
- code+"\",type:\"boolean\", value : "
- + (value == true ? "true}" : "false}");
+ return "\""+name +"\":" + (value == true ? "true" : "false");
}
}
}
public String getJsonPresentation() {
- return name +":{name:\""+name+"\",id:\"" +
- code+"\",type:\"string\", value : \""
- + value + "\"}";
+ return "\""+name +"\":\"" + value + "\"";
}
}
}
public String getJsonPresentation() {
- return name +":{name:\""+name+"\",id:\"" +
- code+"\",type:\"int\", value : "
- + value + "}";
+ return "\""+name +"\":" + value ;
}
}
}
public String getJsonPresentation() {
- String pres = name +":{name:\""+name+"\",id:\"" +
- code+"\",type:\"array\", value : [";
+ String pres = "\""+name +"\":[";
for (int i = 0; i < value.length;) {
pres += value[i];
i++;
if(i < value.length)
pres += ",";
}
- pres += "]}";
-
+ pres += "]";
return pres;
}
}