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.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  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.addValueChangeListener(
  86. event -> getReconnectDialogConfiguration()
  87. .setDialogText(reconnectDialogMessage.getValue()));
  88. final TextField reconnectDialogGaveUpMessage = new TextField(
  89. "Reconnect gave up message");
  90. reconnectDialogGaveUpMessage.setWidth("50em");
  91. reconnectDialogGaveUpMessage.setValue(
  92. getReconnectDialogConfiguration().getDialogTextGaveUp());
  93. reconnectDialogGaveUpMessage.addValueChangeListener(
  94. event -> getReconnectDialogConfiguration().setDialogTextGaveUp(
  95. reconnectDialogGaveUpMessage.getValue()));
  96. final TextField reconnectDialogReconnectAttempts = new TextField(
  97. "Reconnect attempts");
  98. reconnectDialogReconnectAttempts.setConverter(Integer.class);
  99. reconnectDialogReconnectAttempts.setConvertedValue(
  100. getReconnectDialogConfiguration().getReconnectAttempts());
  101. reconnectDialogReconnectAttempts.addValueChangeListener(
  102. event -> getReconnectDialogConfiguration().setReconnectAttempts(
  103. (Integer) reconnectDialogReconnectAttempts
  104. .getConvertedValue()));
  105. final TextField reconnectDialogReconnectInterval = new TextField(
  106. "Reconnect interval (ms)");
  107. reconnectDialogReconnectInterval.setConverter(Integer.class);
  108. reconnectDialogReconnectInterval.setConvertedValue(
  109. getReconnectDialogConfiguration().getReconnectInterval());
  110. reconnectDialogReconnectInterval.addValueChangeListener(
  111. event -> getReconnectDialogConfiguration().setReconnectInterval(
  112. (Integer) reconnectDialogReconnectInterval
  113. .getConvertedValue()));
  114. final TextField reconnectDialogGracePeriod = new TextField(
  115. "Reconnect dialog grace period (ms)");
  116. reconnectDialogGracePeriod.setConverter(Integer.class);
  117. reconnectDialogGracePeriod.setConvertedValue(
  118. getReconnectDialogConfiguration().getDialogGracePeriod());
  119. reconnectDialogGracePeriod.addValueChangeListener(
  120. event -> getReconnectDialogConfiguration().setDialogGracePeriod(
  121. (Integer) reconnectDialogGracePeriod
  122. .getConvertedValue()));
  123. final CheckBox reconnectDialogModal = new CheckBox(
  124. "Reconnect dialog modality");
  125. reconnectDialogModal
  126. .setValue(getReconnectDialogConfiguration().isDialogModal());
  127. reconnectDialogModal.addValueChangeListener(
  128. event -> getReconnectDialogConfiguration()
  129. .setDialogModal(reconnectDialogModal.getValue()));
  130. VerticalLayout vl = new VerticalLayout();
  131. vl.setMargin(true);
  132. vl.setSpacing(true);
  133. p.setContent(vl);
  134. vl.addComponents(reconnectDialogMessage, reconnectDialogGaveUpMessage,
  135. reconnectDialogGracePeriod, reconnectDialogModal,
  136. reconnectDialogReconnectAttempts,
  137. reconnectDialogReconnectInterval);
  138. return p;
  139. }
  140. private Component createTemporaryResponseCodeSetters(String type,
  141. final Response response) {
  142. HorizontalLayout hl = new HorizontalLayout();
  143. hl.setSpacing(true);
  144. hl.setDefaultComponentAlignment(Alignment.MIDDLE_LEFT);
  145. Label l1 = new Label("Respond to " + type + " requests with code");
  146. final TextField responseCode = new TextField(null, "" + response.code);
  147. responseCode.setConverter(Integer.class);
  148. responseCode.setWidth("5em");
  149. Label l2 = new Label("for the following");
  150. final TextField timeField = new TextField(null, "" + response.time);
  151. timeField.setConverter(Integer.class);
  152. timeField.setWidth("5em");
  153. Label l3 = new Label("seconds");
  154. responseCode.addValueChangeListener(event -> {
  155. Integer code = (Integer) responseCode.getConvertedValue();
  156. response.code = code;
  157. });
  158. timeField.addValueChangeListener(event -> {
  159. Integer time = (Integer) timeField.getConvertedValue();
  160. response.time = time;
  161. });
  162. hl.addComponents(l1, responseCode, l2, timeField, l3);
  163. return hl;
  164. }
  165. protected CommErrorEmulatorServlet getServlet() {
  166. return (CommErrorEmulatorServlet) VaadinServlet.getCurrent();
  167. }
  168. }