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.

SerializerTestConnector.java 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. /*
  2. * Copyright 2000-2014 Vaadin Ltd.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package com.vaadin.tests.widgetset.client;
  17. import java.util.ArrayList;
  18. import java.util.Arrays;
  19. import java.util.Collections;
  20. import java.util.Date;
  21. import java.util.HashMap;
  22. import java.util.HashSet;
  23. import java.util.List;
  24. import java.util.Map;
  25. import java.util.Map.Entry;
  26. import java.util.Set;
  27. import com.vaadin.client.ServerConnector;
  28. import com.vaadin.client.communication.StateChangeEvent;
  29. import com.vaadin.client.extensions.AbstractExtensionConnector;
  30. import com.vaadin.shared.Connector;
  31. import com.vaadin.shared.ui.Connect;
  32. import com.vaadin.shared.ui.label.ContentMode;
  33. import com.vaadin.tests.widgetset.server.SerializerTestExtension;
  34. import elemental.json.Json;
  35. import elemental.json.JsonBoolean;
  36. import elemental.json.JsonObject;
  37. import elemental.json.JsonString;
  38. import elemental.json.JsonType;
  39. import elemental.json.JsonValue;
  40. @Connect(SerializerTestExtension.class)
  41. public class SerializerTestConnector extends AbstractExtensionConnector {
  42. private SerializerTestRpc rpc = getRpcProxy(SerializerTestRpc.class);
  43. public SerializerTestConnector() {
  44. registerRpc(SerializerTestRpc.class, new SerializerTestRpc() {
  45. @Override
  46. public void sendWrappedGenerics(
  47. Map<Set<SimpleTestBean>, Map<Integer, List<SimpleTestBean>>> generics) {
  48. Map<Set<SimpleTestBean>, Map<Integer, List<SimpleTestBean>>> updated = new HashMap<Set<SimpleTestBean>, Map<Integer, List<SimpleTestBean>>>();
  49. SimpleTestBean firstValue = generics.values().iterator().next()
  50. .get(Integer.valueOf(1)).get(0);
  51. Set<SimpleTestBean> key = new HashSet<SimpleTestBean>(Arrays
  52. .asList(firstValue));
  53. Map<Integer, List<SimpleTestBean>> value = new HashMap<Integer, List<SimpleTestBean>>();
  54. Set<SimpleTestBean> firstKeyValue = generics.keySet()
  55. .iterator().next();
  56. value.put(Integer.valueOf(1), new ArrayList<SimpleTestBean>(
  57. firstKeyValue));
  58. updated.put(key, value);
  59. rpc.sendWrappedGenerics(updated);
  60. }
  61. @Override
  62. public void sendString(String value, String[] array) {
  63. char[] chars = value.toCharArray();
  64. Arrays.sort(chars);
  65. rpc.sendString(new String(chars), new String[] { array[1],
  66. array[0] });
  67. }
  68. @Override
  69. public void sendSet(Set<Integer> intSet,
  70. Set<Connector> connectorSet, Set<SimpleTestBean> beanSet) {
  71. beanSet.iterator().next().setValue(intSet.size());
  72. Set<Integer> updatedIntSet = new HashSet<Integer>();
  73. for (Integer integer : intSet) {
  74. updatedIntSet.add(Integer.valueOf(-integer.intValue()));
  75. }
  76. rpc.sendSet(updatedIntSet,
  77. Collections.singleton(getUIConnector()), beanSet);
  78. }
  79. @Override
  80. public void sendNestedArray(int[][] nestedIntArray,
  81. SimpleTestBean[][] nestedBeanArray) {
  82. rpc.sendNestedArray(new int[][] { { nestedIntArray[1][0],
  83. nestedIntArray[0][0] } }, new SimpleTestBean[][] {
  84. { nestedBeanArray[0][1] }, { nestedBeanArray[0][0] } });
  85. }
  86. @Override
  87. public void sendMap(Map<String, SimpleTestBean> stringMap,
  88. Map<Connector, SimpleTestBean> connectorMap,
  89. Map<Integer, Connector> intMap,
  90. Map<SimpleTestBean, SimpleTestBean> beanMap) {
  91. Map<SimpleTestBean, SimpleTestBean> updatedBeanMap = new HashMap<SimpleTestBean, SimpleTestBean>();
  92. for (Entry<SimpleTestBean, SimpleTestBean> entry : beanMap
  93. .entrySet()) {
  94. updatedBeanMap.put(entry.getValue(), entry.getKey());
  95. }
  96. rpc.sendMap(Collections.singletonMap("a", stringMap.get("1")),
  97. Collections.singletonMap(getThisConnector(),
  98. connectorMap.get(getUIConnector())),
  99. Collections.singletonMap(
  100. Integer.valueOf(stringMap.size()),
  101. getThisConnector()), updatedBeanMap);
  102. }
  103. @Override
  104. public void sendLong(long value, Long boxedValue, long[] array) {
  105. rpc.sendLong(array[0], Long.valueOf(value), new long[] {
  106. array[1], boxedValue.longValue() });
  107. }
  108. @Override
  109. public void sendList(List<Integer> intList,
  110. List<Connector> connectorList, List<SimpleTestBean> beanList) {
  111. Collections.sort(intList);
  112. Collections.reverse(beanList);
  113. rpc.sendList(intList,
  114. Arrays.asList(getThisConnector(), getUIConnector()),
  115. beanList);
  116. }
  117. @Override
  118. public void sendInt(int value, Integer boxedValue, int[] array) {
  119. rpc.sendInt(array.length, Integer.valueOf(array[0]), new int[] {
  120. value, boxedValue.intValue() });
  121. }
  122. @Override
  123. public void sendFloat(float value, Float boxedValue, float[] array) {
  124. Arrays.sort(array);
  125. rpc.sendFloat(boxedValue.floatValue(), Float.valueOf(value),
  126. array);
  127. }
  128. @Override
  129. public void sendDouble(double value, Double boxedValue,
  130. double[] array) {
  131. rpc.sendDouble(value + boxedValue.doubleValue(),
  132. Double.valueOf(value - boxedValue.doubleValue()),
  133. new double[] { array.length, array[0], array[1] });
  134. }
  135. @Override
  136. public void sendConnector(Connector connector) {
  137. rpc.sendConnector(getThisConnector());
  138. }
  139. @Override
  140. public void sendChar(char value, Character boxedValue, char[] array) {
  141. rpc.sendChar(Character.toUpperCase(boxedValue.charValue()),
  142. Character.valueOf(value), new String(array)
  143. .toLowerCase().toCharArray());
  144. }
  145. @Override
  146. public void sendByte(byte value, Byte boxedValue, byte[] array) {
  147. // There will most certainly be a bug that is not discovered
  148. // because this particular method doesn't do anything with it's
  149. // values...
  150. rpc.sendByte(value, boxedValue, array);
  151. }
  152. @Override
  153. public void sendBoolean(boolean value, Boolean boxedValue,
  154. boolean[] array) {
  155. boolean[] inverseArray = new boolean[array.length];
  156. for (int i = 0; i < array.length; i++) {
  157. inverseArray[i] = !array[i];
  158. }
  159. rpc.sendBoolean(boxedValue == Boolean.TRUE,
  160. Boolean.valueOf(!value), inverseArray);
  161. }
  162. @Override
  163. public void sendBean(ComplexTestBean complexBean,
  164. SimpleTestBean simpleBean, SimpleTestBean[] array) {
  165. SimpleTestBean updatedSimpleBean = new SimpleTestBean();
  166. updatedSimpleBean.setValue(complexBean.getInnerBean1()
  167. .getValue());
  168. ComplexTestBean updatedComplexBean = new ComplexTestBean();
  169. updatedComplexBean.setInnerBean1(complexBean.getInnerBean2());
  170. updatedComplexBean.setInnerBean2(complexBean
  171. .getInnerBeanCollection().get(0));
  172. updatedComplexBean.setInnerBeanCollection(Arrays.asList(
  173. simpleBean, updatedSimpleBean));
  174. updatedComplexBean.setPrivimite(complexBean.getPrivimite() + 1);
  175. ArrayList<SimpleTestBean> arrayList = new ArrayList<SimpleTestBean>(
  176. Arrays.asList(array));
  177. Collections.reverse(arrayList);
  178. rpc.sendBean(updatedComplexBean, updatedSimpleBean,
  179. arrayList.toArray(new SimpleTestBean[array.length]));
  180. }
  181. @Override
  182. public void sendArrayList(List<int[]> primitiveArrayList,
  183. List<Integer[]> objectArrayList,
  184. List<SimpleTestBean[]> beanArrayList) {
  185. Collections.reverse(beanArrayList);
  186. List<Integer[]> updatedObjectArrayList = new ArrayList<Integer[]>();
  187. for (int[] array : primitiveArrayList) {
  188. updatedObjectArrayList.add(new Integer[] {
  189. Integer.valueOf(array.length),
  190. Integer.valueOf(array[0]) });
  191. }
  192. rpc.sendArrayList(Arrays.asList(
  193. new int[] { primitiveArrayList.size() },
  194. new int[] { objectArrayList.get(0).length }),
  195. updatedObjectArrayList, beanArrayList);
  196. }
  197. @Override
  198. public void sendNull(String value1, String value2) {
  199. rpc.sendNull(value2, value1);
  200. }
  201. @Override
  202. public void sendListArray(List<Integer>[] objectListArray,
  203. List<SimpleTestBean>[] beanListArray) {
  204. rpc.sendListArray(new List[] { objectListArray[1],
  205. objectListArray[0] }, new List[] { Collections
  206. .singletonList(beanListArray[0].get(0)) });
  207. }
  208. @Override
  209. public void sendEnum(ContentMode contentMode, ContentMode[] array,
  210. List<ContentMode> list) {
  211. ContentMode nextContentMode = ContentMode.values()[contentMode
  212. .ordinal() + 1];
  213. rpc.sendEnum(nextContentMode,
  214. list.toArray(new ContentMode[list.size()]),
  215. Arrays.asList(array));
  216. }
  217. @Override
  218. public void sendBeanSubclass(final SimpleTestBean bean) {
  219. rpc.sendBeanSubclass(new SimpleTestBean() {
  220. @Override
  221. public int getValue() {
  222. return bean.getValue() + 1;
  223. }
  224. });
  225. }
  226. @Override
  227. public void sendDate(Date date) {
  228. rpc.sendDate(date);
  229. }
  230. @Override
  231. public void sendDateArray(Date[] date) {
  232. rpc.sendDateArray(date);
  233. }
  234. @Override
  235. public void sendJson(JsonValue value1, JsonValue value2,
  236. JsonString string) {
  237. if (value1.getType() != JsonType.BOOLEAN) {
  238. throw new RuntimeException("Expected boolean, got "
  239. + value1.toJson());
  240. }
  241. if (value2.getType() != JsonType.NULL) {
  242. throw new RuntimeException("Expected null, got "
  243. + value2.toJson());
  244. }
  245. JsonObject returnObject = Json.createObject();
  246. returnObject.put("b", !((JsonBoolean) value1).asBoolean());
  247. returnObject.put("s", string);
  248. rpc.sendJson(returnObject, Json.createNull(),
  249. Json.create("value"));
  250. }
  251. @Override
  252. public void log(String message) {
  253. // Do nothing, used only in the other direction
  254. }
  255. });
  256. }
  257. private Connector getUIConnector() {
  258. return getConnection().getUIConnector();
  259. }
  260. private Connector getThisConnector() {
  261. // Cast to Connector for use in e.g. Collections.singleton() to get a
  262. // Set<Connector>
  263. return this;
  264. }
  265. @Override
  266. public SerializerTestState getState() {
  267. return (SerializerTestState) super.getState();
  268. }
  269. @Override
  270. public void onStateChanged(StateChangeEvent stateChangeEvent) {
  271. rpc.log("state.booleanValue: " + getState().booleanValue);
  272. rpc.log("state.booleanObjectValue: " + getState().booleanObjectValue);
  273. rpc.log("state.booleanArray: "
  274. + Arrays.toString(getState().booleanArray));
  275. rpc.log("state.byteValue: " + getState().byteValue);
  276. rpc.log("state.byteObjectValue: " + getState().byteObjectValue);
  277. rpc.log("state.byteArray: " + Arrays.toString(getState().byteArray));
  278. rpc.log("state.charValue: " + getState().charValue);
  279. rpc.log("state.charObjectValue: " + getState().charObjectValue);
  280. rpc.log("state.charArray: " + String.valueOf(getState().charArray));
  281. rpc.log("state.intValue: " + getState().intValue);
  282. rpc.log("state.intObjectValue: " + getState().intObjectValue);
  283. rpc.log("state.intArray: " + Arrays.toString(getState().intArray));
  284. rpc.log("state.longValue: " + getState().longValue);
  285. rpc.log("state.longObjectValue: " + getState().longObjectValue);
  286. rpc.log("state.longArray: " + Arrays.toString(getState().longArray));
  287. rpc.log("state.floatValue: " + getState().floatValue);
  288. rpc.log("state.floatObjectValue: " + getState().floatObjectValue);
  289. rpc.log("state.floatArray: " + Arrays.toString(getState().floatArray));
  290. rpc.log("state.doubleValue: " + getState().doubleValue);
  291. rpc.log("state.doubleObjectValue: " + getState().doubleObjectValue);
  292. rpc.log("state.doubleArray: " + Arrays.toString(getState().doubleArray));
  293. rpc.log("state.string: " + getState().string);
  294. rpc.log("state.stringArray: " + Arrays.toString(getState().stringArray));
  295. rpc.log("state.jsonNull: " + getState().jsonNull.getType().name());
  296. rpc.log("state.jsonString: "
  297. + ((JsonString) getState().jsonString).getString());
  298. rpc.log("state.jsonBoolean: " + getState().jsonBoolean.getBoolean());
  299. rpc.log("state.date1: " + getState().date1);
  300. rpc.log("state.date2: " + getState().date2);
  301. String arrStr = "";
  302. for (Date d : getState().dateArray) {
  303. arrStr += d + " ";
  304. }
  305. rpc.log("state.dateArray: " + arrStr);
  306. /*
  307. * TODO public double doubleValue; public Double DoubleValue; public
  308. * double[] doubleArray; ;
  309. *
  310. * public String string;
  311. *
  312. * public String nullString;
  313. *
  314. * public Connector connector;
  315. *
  316. * public ComplexTestBean complexTestBean; public SimpleTestBean
  317. * simpleTestBean; public SimpleTestBean[] simpleTestBeanArray; public
  318. * int[][] nestedIntArray; public SimpleTestBean[][] nestedBeanArray;
  319. *
  320. * public List<Integer> intList; public List<Connector> connectorList;
  321. * public List<SimpleTestBean> simpleTestBeanList;
  322. *
  323. * public List<int[]> primitiveArrayList; public List<Integer[]>
  324. * objectArrayList; public List<SimpleTestBean[]> beanArrayList;
  325. *
  326. * public List<Integer>[] objectListArray; public List<SimpleTestBean>[]
  327. * beanListArray;
  328. *
  329. * public Set<Integer> intSet; public Set<Connector> connectorSet;
  330. * public Set<SimpleTestBean> beanSet;
  331. *
  332. * public Map<String, SimpleTestBean> stringMap; public Map<Connector,
  333. * SimpleTestBean> connectorMap; public Map<Integer, Connector> intMap;
  334. * public Map<SimpleTestBean, SimpleTestBean> beanMap;
  335. *
  336. * public Map<Set<SimpleTestBean>, Map<Integer, List<SimpleTestBean>>>
  337. * generics;
  338. *
  339. * public ContentMode contentMode; public ContentMode[] array; public
  340. * List<ContentMode> list;
  341. *
  342. * public SimpleTestBean bean;
  343. *
  344. * public Date date1; public Date date2;
  345. */
  346. }
  347. @Override
  348. protected void extend(ServerConnector target) {
  349. // TODO Auto-generated method stub
  350. }
  351. }