/src/com/atlassian/uwc/ui/listeners/HasAllConvertSettingsListener.java

https://bitbucket.org/atlassianlabs/universal-wiki-connector · Java · 132 lines · 50 code · 17 blank · 65 comment · 3 complexity · 7e5e3d9c5cf0e031346109233e84c254 MD5 · raw file

  1. package com.atlassian.uwc.ui.listeners;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.awt.event.FocusEvent;
  5. import java.awt.event.FocusListener;
  6. import java.util.HashSet;
  7. import java.util.Observable;
  8. import java.util.Observer;
  9. import java.util.Set;
  10. import javax.swing.JComponent;
  11. import javax.swing.event.DocumentEvent;
  12. import javax.swing.event.DocumentListener;
  13. import com.atlassian.uwc.ui.UWCForm3;
  14. /**
  15. * controls the usability of a ui element, by checking to see
  16. * that all necessary data has been provided by the user, every time the element
  17. * that this listener listens to has changed.
  18. *
  19. * To use:
  20. * <ol>
  21. * <li>instantiate the object with The Form containing the relevent elements
  22. * <br/>Example:
  23. * <pre>
  24. * public class UWCForm3 {
  25. * ...
  26. * this.hasAllConvertSettingsListener = new HasAllConvertSettingsListener(this);
  27. * ...
  28. * }
  29. * </pre>
  30. * </li>
  31. * <li>register the ui elements whose enabled state will be controlled by this listener.
  32. * <br/>Example: <pre>this.hasAllConvertSettingsListener.registerComponent(getJButtonConvert());</pre></li>
  33. * <li>Add the instantiated object as an actionlistener, focuslistener, or observer
  34. * to any ui element that should trigger a check-in to
  35. * see if the registered components should be enabled or disabled.
  36. * <br/>Examples:
  37. * <pre>this.removePagesListener.addObserver(getHasAllListener());</pre>
  38. * <pre>jTextFieldSpace.addFocusListener(getHasAllListener());</pre>
  39. * <pre>jComboBox_WikiType.addActionListener(getHasAllListener());</pre>
  40. * </li>
  41. * <li>For observables, notify observers as appropriate:
  42. * <br/>Example:
  43. * <pre>//do something
  44. setChanged();
  45. notifyObservers();
  46. * </pre>
  47. * </li>
  48. * </ol>
  49. */
  50. public class HasAllConvertSettingsListener implements ActionListener, FocusListener, DocumentListener, Observer {
  51. private UWCForm3 form;
  52. /**
  53. * set of ui elements that will be disabled or enabled based on the
  54. * existence of all necessary data
  55. */
  56. private Set<JComponent> components; //set preserves uniqueness
  57. public HasAllConvertSettingsListener(UWCForm3 form) {
  58. this.form = form;
  59. components = new HashSet<JComponent>();
  60. }
  61. /**
  62. * registers the given component with the listener. registered components will be
  63. * enabled or disabled based on the settings necessary to convert.
  64. * @param component
  65. */
  66. public void registerComponent(JComponent component) {
  67. components.add(component);
  68. }
  69. /**
  70. * @see HasAllConvertSettingsListener#actionPerformed()
  71. * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
  72. */
  73. public void actionPerformed(ActionEvent e) {
  74. actionPerformed();
  75. }
  76. /**
  77. * checks to see if all conditions have been met.
  78. * If so, enables each component from this.components.
  79. * If not, disables each component.
  80. */
  81. public void actionPerformed() {
  82. boolean hasAllSettings = this.form.hasSetAllConverterSettings();
  83. for (JComponent component : this.components) {
  84. component.setEnabled(hasAllSettings);
  85. }
  86. }
  87. /**
  88. * trigger this actionPerformed every time the focus is lost.
  89. * @see HasAllConvertSettingsListener#actionPerformed()
  90. * @see java.awt.event.FocusListener#focusLost(java.awt.event.FocusEvent)
  91. */
  92. public void focusLost(FocusEvent event) {
  93. if (event.getID() == FocusEvent.FOCUS_LOST) {
  94. actionPerformed(new ActionEvent(
  95. event.getSource(), event.getID(), ""));
  96. }
  97. }
  98. /**
  99. * trigger this actionPerformed every time a change has been observed
  100. * @see HasAllConvertSettingsListener#actionPerformed()
  101. * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
  102. */
  103. public void update(Observable o, Object arg) {
  104. actionPerformed();
  105. }
  106. public void insertUpdate(DocumentEvent e) {
  107. actionPerformed();
  108. }
  109. public void removeUpdate(DocumentEvent e) {
  110. actionPerformed();
  111. }
  112. /* Listener methods we're not using */
  113. public void focusGained(FocusEvent arg0) { /*Not using this method*/ }
  114. public void changedUpdate(DocumentEvent e) { /*Not using this method*/ }
  115. }