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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 435 - (hide annotations)
Sun Oct 4 23:33:30 2009 UTC (15 years, 4 months ago) by alfonx
Original Path: branches/1.0-gt2-2.6/src/skrueger/swing/DialogManager.java
File MIME type: text/plain
File size: 3832 byte(s)
* Debugged AtlasStyler stand-alone with the new structure
1 alfonx 420 package skrueger.swing;
2    
3     import java.awt.Component;
4     import java.awt.event.WindowAdapter;
5     import java.awt.event.WindowEvent;
6 alfonx 422 import java.util.Collection;
7 alfonx 420 import java.util.HashMap;
8     import java.util.HashSet;
9    
10     import javax.swing.JDialog;
11    
12     import org.apache.log4j.Logger;
13    
14 alfonx 421 public abstract class DialogManager<KEY, DIALOG extends JDialog> {
15     final static private Logger LOGGER = Logger.getLogger(DialogManager.class);
16 alfonx 420
17     public abstract class FactoryInterface {
18    
19     public abstract DIALOG create();
20 alfonx 433
21     /** May be overridden to add Listeners **/
22     public void appendListeners(DIALOG newInstance){};
23 alfonx 420
24 alfonx 435 /** May be overridden to remove Listeners added earlier **/
25     public void removeListeners(DIALOG newInstance){};
26    
27 alfonx 420 }
28    
29 alfonx 422 protected HashMap<KEY, DIALOG> dialogCache = new HashMap<KEY, DIALOG>();
30 alfonx 420
31 alfonx 421 /**
32     * A {@link DialogManager} instance can be created for any extension of
33     * {@link JDialog} that will implement the
34     * {@link #getInstanceFor(Object, Component, Object...)} method.
35     */
36 alfonx 420 public DialogManager() {
37     }
38    
39     /**
40     * This will be done with every dialog that an instance is required for.
41     *
42     * @param dialog
43     * @return
44     */
45     protected DIALOG bringup(DIALOG dialog) {
46     if (!dialog.isVisible())
47     dialog.setVisible(true);
48     dialog.toFront();
49    
50     return dialog;
51     }
52    
53     public abstract DIALOG getInstanceFor(final KEY key, final Component owner,
54     final Object... constArgs);
55    
56     /**
57     * @return Is there an open/visible dialog for the given layer id?
58     */
59     public boolean isVisibleFor(KEY key) {
60     return dialogCache.containsKey(key) && dialogCache.get(key).isVisible();
61     }
62    
63     /**
64     * Will dispose any dialog that is registered to the given parent
65     * {@link Component}
66     *
67     * @param parent
68     */
69     public void disposeInstanceForParent(final Component parent) {
70    
71     final HashMap<KEY, JDialog> clonedHashMap = (HashMap<KEY, JDialog>) dialogCache
72     .clone();
73    
74     for (KEY chartId : clonedHashMap.keySet()) {
75     if (dialogCache.get(chartId).getParent() == parent) {
76     disposeInstanceFor(chartId);
77     }
78     }
79     }
80    
81     public boolean disposeInstanceFor(KEY chartId) {
82     synchronized (dialogCache) {
83    
84     final DIALOG dialog = dialogCache.get(chartId);
85     if (dialog != null) {
86     dialog.dispose();
87 alfonx 421 dialogCache.remove(chartId);
88 alfonx 420 return true;
89     }
90     return false;
91     }
92     }
93    
94     /**
95     * Checks whether there already is an instance for that key and otherwise
96     * will create the instance by invoking the {@link FactoryInterface} #create
97     * method.
98     *
99     * @param factory
100     * {@link FactoryInterface} that creates the DIALOG
101     *
102 alfonx 421 * @return Always a visible and inFront instance of DIALOG for the given
103     * key.
104 alfonx 420 */
105 alfonx 435 public DIALOG getInstanceFor(final KEY key, final FactoryInterface factory) {
106     final DIALOG dialog;
107 alfonx 420 if (isVisibleFor(key)) {
108     dialog = dialogCache.get(key);
109     } else {
110    
111     dialog = factory.create();
112    
113     dialogCache.put(key, dialog);
114    
115     dialog.addWindowListener(new WindowAdapter() {
116     @Override
117     public void windowClosed(final WindowEvent e) {
118 alfonx 435 factory.removeListeners(dialog);
119 alfonx 420 disposeInstanceFor(key);
120     }
121     });
122 alfonx 433
123     factory.appendListeners(dialog);
124 alfonx 420 }
125 alfonx 435
126     dialog.setVisible(true);
127     dialog.toFront();
128    
129 alfonx 420 return dialog;
130     }
131    
132     /**
133 alfonx 421 * Disposes all open instances and removes them from the cache.
134 alfonx 420 *
135     * @return <code>true</code> if at least one window has been disposed.
136     */
137     public boolean disposeAll() {
138 alfonx 421
139 alfonx 420 boolean atLeastOne = false;
140     HashSet<KEY> tempKeys = new HashSet<KEY>(dialogCache.keySet());
141     for (KEY key : tempKeys) {
142 alfonx 421 DIALOG dialog = dialogCache.get(key);
143 alfonx 420 if (dialog != null) {
144     dialog.dispose();
145     atLeastOne = true;
146     }
147     }
148     tempKeys.clear();
149     dialogCache.clear();
150     return atLeastOne;
151     }
152 alfonx 421
153 alfonx 422 /**
154     * @return All instances of DIALOG as they are cached.
155     */
156     public Collection<DIALOG> getAllInstances() {
157     return dialogCache.values();
158     }
159    
160    
161 alfonx 420 }

Properties

Name Value
svn:eol-style native
svn:keywords Id URL
svn:mime-type text/plain

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26