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.

CommErrorEmulatorUI.java 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. package com.vaadin.tests.application;
  2. import com.vaadin.server.VaadinRequest;
  3. import com.vaadin.server.VaadinServlet;
  4. import com.vaadin.tests.components.AbstractTestUIWithLog;
  5. import com.vaadin.ui.Alignment;
  6. import com.vaadin.ui.Button;
  7. import com.vaadin.ui.CheckBox;
  8. import com.vaadin.ui.Component;
  9. import com.vaadin.ui.HorizontalLayout;
  10. import com.vaadin.ui.Label;
  11. import com.vaadin.ui.Panel;
  12. import com.vaadin.ui.VerticalLayout;
  13. import com.vaadin.v7.ui.TextField;
  14. public class CommErrorEmulatorUI extends AbstractTestUIWithLog {
  15. private static class Response {
  16. private Integer code;
  17. private Integer time;
  18. /**
  19. * @param code
  20. * @param time
  21. */
  22. public Response(Integer code, Integer time) {
  23. super();
  24. this.code = code;
  25. this.time = time;
  26. }
  27. }
  28. private Response uidlResponse = new Response(503, 10);
  29. private Response heartbeatResponse = new Response(200, 10);
  30. // Server exceptions will occur in this test as we are writing the response
  31. // here and not letting the servlet write it
  32. @Override
  33. protected void setup(VaadinRequest request) {
  34. String transport = request.getParameter("transport");
  35. if ("websocket".equalsIgnoreCase(transport)) {
  36. log("Using websocket");
  37. } else if ("websocket-xhr".equalsIgnoreCase(transport)) {
  38. log("Using websocket for push only");
  39. } else if ("long-polling".equalsIgnoreCase(transport)) {
  40. log("Using long-polling");
  41. } else {
  42. log("Using XHR");
  43. }
  44. getLayout().setSpacing(true);
  45. addComponent(createConfigPanel());
  46. addComponent(createServerConfigPanel());
  47. addComponent(new Button("Say hello", event -> log("Hello")));
  48. }
  49. private Component createServerConfigPanel() {
  50. Panel p = new Panel("Server config (NOTE: affects all users)");
  51. VerticalLayout vl = new VerticalLayout();
  52. vl.setSpacing(true);
  53. vl.setMargin(true);
  54. p.setContent(vl);
  55. vl.addComponent(
  56. createTemporaryResponseCodeSetters("UIDL", uidlResponse));
  57. vl.addComponent(createTemporaryResponseCodeSetters("Heartbeat",
  58. heartbeatResponse));
  59. vl.addComponent(new Button("Activate", event -> {
  60. if (uidlResponse.code != null && uidlResponse.code != 200) {
  61. getServlet().setUIDLResponseCode(CommErrorEmulatorUI.this,
  62. uidlResponse.code, uidlResponse.time);
  63. log("Responding with " + uidlResponse.code
  64. + " to UIDL requests for " + uidlResponse.time + "s");
  65. }
  66. if (heartbeatResponse.code != null
  67. && heartbeatResponse.code != 200) {
  68. getServlet().setHeartbeatResponseCode(CommErrorEmulatorUI.this,
  69. heartbeatResponse.code, heartbeatResponse.time);
  70. log("Responding with " + heartbeatResponse.code
  71. + " to heartbeat requests for " + heartbeatResponse.time
  72. + "s");
  73. }
  74. }));
  75. return p;
  76. }
  77. private Component createConfigPanel() {
  78. Panel p = new Panel("Reconnect dialog configuration");
  79. p.setSizeUndefined();
  80. final TextField reconnectDialogMessage = new TextField(
  81. "Reconnect message");
  82. reconnectDialogMessage.setWidth("50em");
  83. reconnectDialogMessage
  84. .setValue(getReconnectDialogConfiguration().getDialogText());
  85. reconnectDialogMessage
  86. .addValueChangeListener(event ->
  87. getReconnectDialogConfiguration().setDialogText(
  88. reconnectDialogMessage.getValue()));
  89. final TextField reconnectDialogGaveUpMessage = new TextField(
  90. "Reconnect gave up message");
  91. reconnectDialogGaveUpMessage.setWidth("50em");
  92. reconnectDialogGaveUpMessage.setValue(
  93. getReconnectDialogConfiguration().getDialogTextGaveUp());
  94. reconnectDialogGaveUpMessage
  95. .addValueChangeListener(event ->
  96. getReconnectDialogConfiguration().setDialogTextGaveUp(
  97. reconnectDialogGaveUpMessage.getValue()));
  98. final TextField reconnectDialogReconnectAttempts = new TextField(
  99. "Reconnect attempts");
  100. reconnectDialogReconnectAttempts.setConverter(Integer.class);
  101. reconnectDialogReconnectAttempts.setConvertedValue(
  102. getReconnectDialogConfiguration().getReconnectAttempts());
  103. reconnectDialogReconnectAttempts
  104. .addValueChangeListener(event ->
  105. getReconnectDialogConfiguration().setReconnectAttempts(
  106. (Integer) reconnectDialogReconnectAttempts
  107. .getConvertedValue()));
  108. final TextField reconnectDialogReconnectInterval = new TextField(
  109. "Reconnect interval (ms)");
  110. reconnectDialogReconnectInterval.setConverter(Integer.class);
  111. reconnectDialogReconnectInterval.setConvertedValue(
  112. getReconnectDialogConfiguration().getReconnectInterval());
  113. reconnectDialogReconnectInterval
  114. .addValueChangeListener(event ->
  115. getReconnectDialogConfiguration().setReconnectInterval(
  116. (Integer) reconnectDialogReconnectInterval
  117. .getConvertedValue()));
  118. final TextField reconnectDialogGracePeriod = new TextField(
  119. "Reconnect dialog grace period (ms)");
  120. reconnectDialogGracePeriod.setConverter(Integer.class);
  121. reconnectDialogGracePeriod.setConvertedValue(
  122. getReconnectDialogConfiguration().getDialogGracePeriod());
  123. reconnectDialogGracePeriod
  124. .addValueChangeListener(
  125. event -> getReconnectDialogConfiguration()
  126. .setDialogGracePeriod(
  127. (Integer) reconnectDialogGracePeriod
  128. .getConvertedValue()));
  129. final CheckBox reconnectDialogModal = new CheckBox(
  130. "Reconnect dialog modality");
  131. reconnectDialogModal
  132. .setValue(getReconnectDialogConfiguration().isDialogModal());
  133. reconnectDialogModal.addValueChangeListener(
  134. event -> getReconnectDialogConfiguration()
  135. .setDialogModal(reconnectDialogModal.getValue()));
  136. VerticalLayout vl = new VerticalLayout();
  137. vl.setMargin(true);
  138. vl.setSpacing(true);
  139. p.setContent(vl);
  140. vl.addComponents(reconnectDialogMessage, reconnectDialogGaveUpMessage,
  141. reconnectDialogGracePeriod, reconnectDialogModal,
  142. reconnectDialogReconnectAttempts,
  143. reconnectDialogReconnectInterval);
  144. return p;
  145. }
  146. private Component createTemporaryResponseCodeSetters(String type,
  147. final Response response) {
  148. HorizontalLayout hl = new HorizontalLayout();
  149. hl.setSpacing(true);
  150. hl.setDefaultComponentAlignment(Alignment.MIDDLE_LEFT);
  151. Label l1 = new Label("Respond to " + type + " requests with code");
  152. final TextField responseCode = new TextField(null, "" + response.code);
  153. responseCode.setConverter(Integer.class);
  154. responseCode.setWidth("5em");
  155. Label l2 = new Label("for the following");
  156. final TextField timeField = new TextField(null, "" + response.time);
  157. timeField.setConverter(Integer.class);
  158. timeField.setWidth("5em");
  159. Label l3 = new Label("seconds");
  160. responseCode.addValueChangeListener(event -> {
  161. Integer code = (Integer) responseCode.getConvertedValue();
  162. response.code = code;
  163. });
  164. timeField.addValueChangeListener(event -> {
  165. Integer time = (Integer) timeField.getConvertedValue();
  166. response.time = time;
  167. });
  168. hl.addComponents(l1, responseCode, l2, timeField, l3);
  169. return hl;
  170. }
  171. protected CommErrorEmulatorServlet getServlet() {
  172. return (CommErrorEmulatorServlet) VaadinServlet.getCurrent();
  173. }
  174. }