Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

DirtyConnectorTracker.java 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package com.vaadin.ui;
  2. import java.util.Collection;
  3. import java.util.HashSet;
  4. import java.util.Set;
  5. import java.util.logging.Logger;
  6. import com.vaadin.terminal.Paintable.RepaintRequestEvent;
  7. import com.vaadin.terminal.Paintable.RepaintRequestListener;
  8. public class DirtyConnectorTracker implements RepaintRequestListener {
  9. private Set<Component> dirtyComponents = new HashSet<Component>();
  10. private Root root;
  11. public static Logger getLogger() {
  12. return Logger.getLogger(DirtyConnectorTracker.class.getName());
  13. }
  14. public DirtyConnectorTracker(Root root) {
  15. this.root = root;
  16. }
  17. public void repaintRequested(RepaintRequestEvent event) {
  18. markDirty((Component) event.getPaintable());
  19. }
  20. public void componentAttached(Component component) {
  21. component.addListener(this);
  22. markDirty(component);
  23. }
  24. private void markDirty(Component component) {
  25. // TODO Remove debug info
  26. if (!dirtyComponents.contains(component)) {
  27. debug(component, "is now dirty");
  28. }
  29. dirtyComponents.add(component);
  30. }
  31. private void debug(Component component, String string) {
  32. getLogger().info(getDebugInfo(component) + " " + string);
  33. }
  34. private void markClean(Component component) {
  35. // TODO Remove debug info
  36. if (dirtyComponents.contains(component)) {
  37. debug(component, "is no longer dirty");
  38. }
  39. dirtyComponents.remove(component);
  40. // TODO .... WTF ....
  41. component.requestRepaintRequests();
  42. }
  43. private String getDebugInfo(Component component) {
  44. String message = getObjectString(component);
  45. if (component.getParent() != null) {
  46. message += " (parent: " + getObjectString(component.getParent())
  47. + ")";
  48. }
  49. return message;
  50. }
  51. private String getObjectString(Object component) {
  52. return component.getClass().getName() + "@"
  53. + Integer.toHexString(component.hashCode());
  54. }
  55. public void componentDetached(Component component) {
  56. component.removeListener(this);
  57. markClean(component);
  58. }
  59. public void markAllComponentsDirty() {
  60. markComponentsDirtyRecursively(root);
  61. System.out.println("All components are now dirty");
  62. }
  63. public void markAllComponentsClean() {
  64. dirtyComponents.clear();
  65. System.out.println("All components are now clean");
  66. }
  67. private void markComponentsDirtyRecursively(Component c) {
  68. markDirty(c);
  69. if (c instanceof HasComponents) {
  70. HasComponents container = (HasComponents) c;
  71. for (Component child : container) {
  72. markComponentsDirtyRecursively(child);
  73. }
  74. }
  75. }
  76. public Collection<Component> getDirtyComponents() {
  77. return dirtyComponents;
  78. }
  79. }