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.

DetachOldUIOnReload.java 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package com.vaadin.tests.application;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.vaadin.server.VaadinRequest;
  5. import com.vaadin.tests.components.AbstractTestUIWithLog;
  6. import com.vaadin.ui.Button;
  7. import com.vaadin.ui.Label;
  8. public class DetachOldUIOnReload extends AbstractTestUIWithLog {
  9. private static final String PERSISTENT_MESSAGES_ATTRIBUTE = DetachOldUIOnReload.class
  10. .getName() + ".sessionMessages";
  11. @Override
  12. protected void setup(VaadinRequest request) {
  13. addComponent(new Label("This is UI " + getUIId()));
  14. addComponent(new Button("Reload page", event -> getPage().reload()));
  15. addComponent(new Button("Read log messages from session", event -> {
  16. for (String message : getSessionMessages(false)) {
  17. log(message);
  18. }
  19. }));
  20. }
  21. private List<String> getSessionMessages(boolean storeIfNeeded) {
  22. @SuppressWarnings("unchecked")
  23. List<String> messages = (List<String>) getSession()
  24. .getAttribute(PERSISTENT_MESSAGES_ATTRIBUTE);
  25. if (messages == null) {
  26. messages = new ArrayList<>();
  27. if (storeIfNeeded) {
  28. getSession().setAttribute(PERSISTENT_MESSAGES_ATTRIBUTE,
  29. messages);
  30. }
  31. }
  32. return messages;
  33. }
  34. private void logToSession(String message) {
  35. getSessionMessages(true).add(message);
  36. }
  37. @Override
  38. public void detach() {
  39. super.detach();
  40. logToSession("UI " + getUIId() + " has been detached");
  41. }
  42. @Override
  43. protected String getTestDescription() {
  44. return "Tests that the previous UI gets cleaned immediately when refreshing.";
  45. }
  46. @Override
  47. protected Integer getTicketNumber() {
  48. return Integer.valueOf(10338);
  49. }
  50. }