You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

UIDL.java 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package com.itmill.toolkit.terminal.gwt.client;
  2. import java.util.HashSet;
  3. import java.util.Iterator;
  4. import java.util.Set;
  5. import com.google.gwt.json.client.JSONArray;
  6. import com.google.gwt.json.client.JSONBoolean;
  7. import com.google.gwt.json.client.JSONNumber;
  8. import com.google.gwt.json.client.JSONObject;
  9. import com.google.gwt.json.client.JSONString;
  10. import com.google.gwt.json.client.JSONValue;
  11. public class UIDL {
  12. JSONArray json;
  13. public UIDL(JSONArray json) {
  14. this.json = json;
  15. }
  16. public String getId() {
  17. return getStringAttribute("id");
  18. }
  19. public String getTag() {
  20. return json.get(0).toString();
  21. }
  22. public String getStringAttribute(String name) {
  23. JSONValue val = ((JSONObject) json.get(1)).get(name);
  24. return ((JSONString) val).stringValue();
  25. }
  26. public String getAttribute(String name) {
  27. JSONValue val = ((JSONObject) json.get(1)).get(name);
  28. if (val == null)
  29. return null;
  30. return val.toString();
  31. }
  32. public Set getAttributeNames() {
  33. HashSet attrs = new HashSet(((JSONObject) json.get(1)).keySet());
  34. attrs.remove("v");
  35. return attrs;
  36. }
  37. public int getIntAttribute(String name) {
  38. JSONValue val = ((JSONObject) json.get(1)).get(name);
  39. double num = ((JSONNumber) val).getValue();
  40. return (int) num;
  41. }
  42. public long getLongAttribute(String name) {
  43. JSONValue val = ((JSONObject) json.get(1)).get(name);
  44. double num = ((JSONNumber) val).getValue();
  45. return (long) num;
  46. }
  47. public boolean getBooleanAttribute(String name) {
  48. JSONValue val = ((JSONObject) json.get(1)).get(name);
  49. return ((JSONBoolean) val).booleanValue();
  50. }
  51. public Iterator getChildIterator() {
  52. return new Iterator() {
  53. int index = 2;
  54. public void remove() {
  55. throw new UnsupportedOperationException();
  56. }
  57. public Object next() {
  58. if (json.size() > index) {
  59. JSONValue c = json.get(index++);
  60. if (c.isString() != null)
  61. return c.isString().stringValue();
  62. else if (c.isArray() != null)
  63. return new UIDL(c.isArray());
  64. else if (c.isObject() != null)
  65. return new XML(c.isObject());
  66. else
  67. throw new IllegalStateException(
  68. "Illegal child "
  69. + c + " in tag "
  70. + getTag() + " at index " + index);
  71. }
  72. return null;
  73. }
  74. public boolean hasNext() {
  75. return json.size() > index;
  76. }
  77. };
  78. }
  79. public String toString() {
  80. String s = "<" + getTag();
  81. for (Iterator i = getAttributeNames().iterator(); i.hasNext();) {
  82. String name = i.next().toString();
  83. s += " " + name + "=\"" + getAttribute(name) + "\"";
  84. }
  85. s += ">\n";
  86. Iterator i = getChildIterator();
  87. while (i.hasNext()) {
  88. Object c = i.next();
  89. s += c.toString();
  90. }
  91. s += "</" + getTag() + ">\n";
  92. return s;
  93. }
  94. public String getStringVariable(String name) {
  95. JSONObject v = (JSONObject) ((JSONObject) json.get(1)).get("v");
  96. if (v == null)
  97. throw new IllegalArgumentException(
  98. "No variables defined in tag. (requested: " + name + ")");
  99. JSONString t = (JSONString) v.get(name);
  100. if (t == null)
  101. throw new IllegalArgumentException("No such variable: " + name);
  102. return t.stringValue();
  103. }
  104. public int getIntVariable(String name) {
  105. JSONObject v = (JSONObject) ((JSONObject) json.get(1)).get("v");
  106. if (v == null)
  107. throw new IllegalArgumentException(
  108. "No variables defined in tag. (requested: " + name + ")");
  109. JSONNumber t = (JSONNumber) v.get(name);
  110. if (t == null)
  111. throw new IllegalArgumentException("No such variable: " + name);
  112. return (int) t.getValue();
  113. }
  114. public boolean getBooleanVariable(String name) {
  115. JSONObject v = (JSONObject) ((JSONObject) json.get(1)).get("v");
  116. if (v == null)
  117. throw new IllegalArgumentException(
  118. "No variables defined in tag. (requested: " + name + ")");
  119. JSONBoolean t = (JSONBoolean) v.get(name);
  120. if (t == null)
  121. throw new IllegalArgumentException("No such variable: " + name);
  122. return t.booleanValue();
  123. }
  124. public JSONArray getArrayVariable(String name) {
  125. JSONObject v = (JSONObject) ((JSONObject) json.get(1)).get("v");
  126. if (v == null)
  127. throw new IllegalArgumentException(
  128. "No variables defined in tag. (requested: " + name + ")");
  129. JSONArray t = (JSONArray) v.get(name);
  130. if (t == null)
  131. throw new IllegalArgumentException("No such variable: " + name);
  132. return t;
  133. }
  134. public String[] getStingArrayVariable(String name) {
  135. JSONArray a = getArrayVariable(name);
  136. String[] s = new String[a.size()];
  137. for (int i = 0; i < a.size(); i++)
  138. s[i] = ((JSONString) a.get(i)).stringValue();
  139. return s;
  140. }
  141. public int[] getIntArrayVariable(String name) {
  142. JSONArray a = getArrayVariable(name);
  143. int[] s = new int[a.size()];
  144. for (int i = 0; i < a.size(); i++) {
  145. JSONValue v = a.get(i);
  146. s[i] = v.isNumber() != null ? (int) ((JSONNumber) v).getValue()
  147. : Integer.parseInt(v.toString());
  148. }
  149. return s;
  150. }
  151. public class XML {
  152. JSONObject x;
  153. private XML(JSONObject x) {
  154. this.x = x;
  155. }
  156. public String getXMLAsString() {
  157. return x.get("x").toString();
  158. }
  159. }
  160. }