/[schmitzm]/trunk/src/skrueger/swing/DialogManager.java
ViewVC logotype

Diff of /trunk/src/skrueger/swing/DialogManager.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

branches/1.0-gt2-2.6/src/skrueger/swing/DialogManager.java revision 421 by alfonx, Thu Oct 1 21:06:37 2009 UTC trunk/src/skrueger/swing/DialogManager.java revision 1041 by alfonx, Wed Sep 22 10:56:20 2010 UTC
# Line 3  package skrueger.swing; Line 3  package skrueger.swing;
3  import java.awt.Component;  import java.awt.Component;
4  import java.awt.event.WindowAdapter;  import java.awt.event.WindowAdapter;
5  import java.awt.event.WindowEvent;  import java.awt.event.WindowEvent;
6    import java.util.Collection;
7  import java.util.HashMap;  import java.util.HashMap;
8  import java.util.HashSet;  import java.util.HashSet;
9    
# Line 10  import javax.swing.JDialog; Line 11  import javax.swing.JDialog;
11    
12  import org.apache.log4j.Logger;  import org.apache.log4j.Logger;
13    
14  public abstract class DialogManager<KEY, DIALOG extends JDialog> {  public abstract class DialogManager<KEY, DIALOG extends AtlasDialog> {
15          final static private Logger LOGGER = Logger.getLogger(DialogManager.class);          final static private Logger LOGGER = Logger.getLogger(DialogManager.class);
16    
17          public abstract class FactoryInterface {          public abstract class FactoryInterface {
18    
19                  public abstract DIALOG create();                  public abstract DIALOG create();
20    
21                    /** May be overridden to add Listeners **/
22                    public void afterCreation(DIALOG newInstance) {
23                    };
24    
25                    /** May be overridden to remove Listeners added earlier **/
26                    public void beforeDispose(DIALOG newInstance) {
27                    };
28    
29          }          }
30    
31          private HashMap<KEY, DIALOG> dialogCache = new HashMap<KEY, DIALOG>();          protected HashMap<KEY, DIALOG> dialogCache = new HashMap<KEY, DIALOG>();
32    
33          /**          /**
34           * A {@link DialogManager} instance can be created for any extension of           * A {@link DialogManager} instance can be created for any extension of
# Line 36  public abstract class DialogManager<KEY, Line 45  public abstract class DialogManager<KEY,
45           * @return           * @return
46           */           */
47          protected DIALOG bringup(DIALOG dialog) {          protected DIALOG bringup(DIALOG dialog) {
48                    if (dialog == null){
49                            // The dialog creation may have been cancelled
50                            return null;
51                    }
52                  if (!dialog.isVisible())                  if (!dialog.isVisible())
53                          dialog.setVisible(true);                          dialog.setVisible(true);
54                  dialog.toFront();                  dialog.toFront();
# Line 43  public abstract class DialogManager<KEY, Line 56  public abstract class DialogManager<KEY,
56                  return dialog;                  return dialog;
57          }          }
58    
59            /**
60             * Implementing this should have a <br/>
61             * <code>try { ... return ... } catch (Exception e) {
62                                    ExceptionDialog.show(owner, e);
63                                    return null;
64                            } </code> block.
65             *
66             * @param key
67             * @param owner
68             * @param constArgs
69             * @return a cached instance or creates a new instance. Instances are always
70             *         returned visible and toFront.
71             */
72          public abstract DIALOG getInstanceFor(final KEY key, final Component owner,          public abstract DIALOG getInstanceFor(final KEY key, final Component owner,
73                          final Object... constArgs);                          final Object... constArgs);
74    
# Line 71  public abstract class DialogManager<KEY, Line 97  public abstract class DialogManager<KEY,
97                  }                  }
98          }          }
99    
100          public boolean disposeInstanceFor(KEY chartId) {          public boolean disposeInstanceFor(KEY key) {
101                  synchronized (dialogCache) {                  synchronized (dialogCache) {
102    
103                          final DIALOG dialog = dialogCache.get(chartId);                          final DIALOG dialog = dialogCache.get(key);
104                          if (dialog != null) {                          if (dialog != null) {
105                                  dialog.dispose();                                  dialog.dispose();
106                                  dialogCache.remove(chartId);                                  dialogCache.remove(key);
107                                  return true;                                  return true;
108                          }                          }
109                          return false;                          return false;
# Line 95  public abstract class DialogManager<KEY, Line 121  public abstract class DialogManager<KEY,
121           * @return Always a visible and inFront instance of DIALOG for the given           * @return Always a visible and inFront instance of DIALOG for the given
122           *         key.           *         key.
123           */           */
124          public DIALOG getInstanceFor(final KEY key, FactoryInterface factory) {          public DIALOG getInstanceFor(final KEY key, final FactoryInterface factory) {
125                  DIALOG dialog;                  final DIALOG dialog;
126                  if (isVisibleFor(key)) {                  if (isVisibleFor(key)) {
127                          dialog = dialogCache.get(key);                          dialog = dialogCache.get(key);
128                  } else {                  } else {
129    
130                          dialog = factory.create();                          dialog = factory.create();
131                            if (dialog.isDisposed) {
132                                    // The creation of the Dialog may have been cancelled for some reason
133                                    return null;
134                            }
135                          dialogCache.put(key, dialog);                          dialogCache.put(key, dialog);
136                            dialog.setVisible(true);
137                            dialog.toFront();
138    
139                          dialog.addWindowListener(new WindowAdapter() {                          dialog.addWindowListener(new WindowAdapter() {
140                                  @Override                                  @Override
141                                  public void windowClosed(final WindowEvent e) {                                  public void windowClosed(final WindowEvent e) {
142                                          disposeInstanceFor(key);                                          dialogCache.remove(key);
143                                            factory.beforeDispose(dialog);
144                                    }
145    
146                                    @Override
147                                    public void windowClosing(final WindowEvent e) {
148                                  }                                  }
149                          });                          });
150    
151                            factory.afterCreation(dialog);
152                  }                  }
153    
154                  return dialog;                  return dialog;
155          }          }
156    
# Line 136  public abstract class DialogManager<KEY, Line 175  public abstract class DialogManager<KEY,
175                  return atLeastOne;                  return atLeastOne;
176          }          }
177    
178            /**
179             * @return All instances of DIALOG as they are cached.
180             */
181            public Collection<DIALOG> getAllInstances() {
182                    return dialogCache.values();
183            }
184    
185  }  }

Legend:
Removed from v.421  
changed lines
  Added in v.1041

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26