KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > panoptes > view > swing > MainWindowSwing


1 /*
2  * Created on Aug 26, 2003
3  *
4  */

5 package net.sf.panoptes.view.swing;
6
7 import java.awt.BorderLayout JavaDoc;
8 import java.awt.Dimension JavaDoc;
9 import java.awt.event.ActionEvent JavaDoc;
10 import java.awt.event.ActionListener JavaDoc;
11 import java.awt.event.WindowAdapter JavaDoc;
12 import java.awt.event.WindowEvent JavaDoc;
13 import java.util.Iterator JavaDoc;
14 import java.util.Set JavaDoc;
15
16 import javax.swing.ImageIcon JavaDoc;
17 import javax.swing.JDesktopPane JavaDoc;
18 import javax.swing.JFrame JavaDoc;
19 import javax.swing.JInternalFrame JavaDoc;
20 import javax.swing.JMenu JavaDoc;
21 import javax.swing.JMenuBar JavaDoc;
22 import javax.swing.JMenuItem JavaDoc;
23 import javax.swing.JPanel JavaDoc;
24 import javax.swing.JPopupMenu JavaDoc;
25 import javax.swing.UIManager JavaDoc;
26
27 import net.sf.panoptes.component.jmx.model.MBeanQuery;
28 import net.sf.panoptes.controller.MainController;
29 import net.sf.panoptes.controller.actions.AttachTemplateAction;
30 import net.sf.panoptes.controller.actions.BaseAction;
31 import net.sf.panoptes.controller.actions.EditQueryAction;
32 import net.sf.panoptes.controller.actions.NewMBeanServerAction;
33 import net.sf.panoptes.controller.actions.RefreshConfiguratorsAction;
34 import net.sf.panoptes.controller.actions.RefreshTemplatesAction;
35 import net.sf.panoptes.model.node.GroupNode;
36 import net.sf.panoptes.model.node.Node;
37 import net.sf.panoptes.model.node.RootNode;
38 import net.sf.panoptes.registry.ConfiguratorEntry;
39 import net.sf.panoptes.registry.ConfiguratorRegistry;
40 import net.sf.panoptes.registry.Template;
41 import net.sf.panoptes.registry.TemplateRegistry;
42 import net.sf.panoptes.swing.Operation;
43 import net.sf.panoptes.swing.OperationFactory;
44 import net.sf.panoptes.swing.dialogs.ErrorDialog;
45 import net.sf.panoptes.swing.panels.StatusBar;
46 import net.sf.panoptes.view.MainWindow;
47 import net.sf.panoptes.view.swing.configurator.ConfiguratorFrame;
48 import net.sf.panoptes.view.swing.configurator.JavaBeanInspector;
49 import net.sf.panoptes.view.swing.configurator.SwingConfigurator;
50
51 import org.apache.commons.logging.Log;
52 import org.apache.commons.logging.LogFactory;
53
54 import foxtrot.Task;
55 import foxtrot.Worker;
56
57 /**
58  * @author Dag Liodden
59  * @version 0.1
60  */

61 public class MainWindowSwing extends JFrame JavaDoc implements MainWindow {
62
63     JDesktopPane JavaDoc desktop;
64     JMenuBar JavaDoc menuBar;
65     StatusBar statusBar;
66
67     private Log log = LogFactory.getLog(getClass());
68     private MainController controller;
69     private final RootNode rootNode;
70     private JavaBeanInspector introspector;
71     private static MainWindowSwing instance;
72
73     public MainWindowSwing(MainController controller, final RootNode rootNode) {
74         this.controller = controller;
75         this.rootNode = rootNode;
76         instance = this;
77         setTitle("Panoptes");
78         try {
79             //UIManager.setLookAndFeel("com.jgoodies.plaf.plastic.PlasticXPLookAndFeel");
80
UIManager.setLookAndFeel("net.sourceforge.mlf.metouia.MetouiaLookAndFeel");
81         } catch (Exception JavaDoc e) {
82             e.printStackTrace();
83         }
84         /*
85          * WaitCursorEventQueue eventQueue = new WaitCursorEventQueue(200);
86          * Toolkit.getDefaultToolkit().getSystemEventQueue()
87          */

88
89         addWindowListener(new WindowAdapter JavaDoc() {
90             public void windowClosing(WindowEvent JavaDoc e) {
91                 System.exit(0);
92             }
93         });
94
95         setSize(new Dimension JavaDoc(730, 560));
96         desktop = new JDesktopPane JavaDoc();
97
98         menuBar = createMenuBar();
99         setJMenuBar(menuBar);
100         JPanel JavaDoc contentPane = new JPanel JavaDoc(new BorderLayout JavaDoc());
101
102         desktop.putClientProperty("JDesktopPane.dragMode", "faster");
103         contentPane.add(desktop, BorderLayout.CENTER);
104
105         statusBar = new StatusBar();
106         OperationFactory.setFactory(statusBar.getFactory());
107         contentPane.add(statusBar, BorderLayout.SOUTH);
108
109         setContentPane(contentPane);
110
111         createMBeanTree();
112     }
113
114     private JMenuBar JavaDoc createMenuBar() {
115         menuBar = new JMenuBar JavaDoc();
116
117         JMenu JavaDoc fileMenu = new JMenu JavaDoc("File");
118         fileMenu.add(new JMenuItem JavaDoc(new NewMBeanServerAction(this)));
119
120         menuBar.add(fileMenu);
121
122         JMenu JavaDoc setMenu = new JMenu JavaDoc("Settings");
123         setMenu.add(new RefreshTemplatesAction());
124         setMenu.add(new RefreshConfiguratorsAction());
125
126         menuBar.add(setMenu);
127
128         return menuBar;
129     }
130
131     private void createMBeanTree() {
132         MBeanTreeFrame mbeanFrame = new MBeanTreeFrame(rootNode, this);
133         mbeanFrame.pack();
134         desktop.add(mbeanFrame);
135         mbeanFrame.setVisible(true);
136
137     }
138
139     protected JPopupMenu JavaDoc constructPopupMenu(final Node node, final MBeanTreeFrame tree) {
140         JPopupMenu JavaDoc m = new JPopupMenu JavaDoc("MBean");
141         m.add(new BaseAction("Refresh") {
142             public void actionPerformed(ActionEvent JavaDoc e) {
143                 node.refresh();
144             }
145         });
146
147         if (node instanceof GroupNode) {
148             JMenu JavaDoc templateMenu = new JMenu JavaDoc("Attach template");
149             for (Iterator JavaDoc i = TemplateRegistry.getInstance().getTemplates().iterator();
150                 i.hasNext();
151                 ) {
152                 Template t = (Template) i.next();
153                 templateMenu.add(new AttachTemplateAction(t.getName(), t, (GroupNode) node));
154             }
155             m.add(templateMenu);
156         }
157
158         if (node instanceof MBeanQuery) {
159             JMenu JavaDoc queryMenu = new JMenu JavaDoc("Query");
160             queryMenu.add(new EditQueryAction(this, (MBeanQuery) node));
161             m.add(queryMenu);
162         }
163
164         JMenu JavaDoc configuratorMenu = new JMenu JavaDoc("Open with");
165         try {
166             Set JavaDoc configurators = ConfiguratorRegistry.getInstance().findConfigurators("swing", node);
167             for (Iterator JavaDoc i = configurators.iterator(); i.hasNext();) {
168                 final ConfiguratorEntry ce = (ConfiguratorEntry) i.next();
169                 final JMenuItem JavaDoc mi = new JMenuItem JavaDoc(ce.getName());
170                 mi.addActionListener(new ActionListener JavaDoc() {
171                     public void actionPerformed(ActionEvent JavaDoc e) {
172                         constructConfigurator(ce, node);
173                     }
174                 });
175                 if (ce.getIconName() != null) {
176                     try {
177                         mi.setIcon(
178                             new ImageIcon JavaDoc(
179                                 getClass().getClassLoader().getResource(ce.getIconName())));
180                     } catch (NullPointerException JavaDoc e) {
181                         log.warn(
182                             "Configurator "
183                                 + ce.getName()
184                                 + " has an invalid icon name: "
185                                 + ce.getIconName(),
186                             e);
187                     }
188                 }
189                 configuratorMenu.add(mi);
190
191             }
192             m.add(configuratorMenu);
193         } catch (Exception JavaDoc e) {
194             log.warn("Unable to get configurators for " + node.toString(), e);
195         }
196         return m;
197     }
198
199     private void constructConfigurator(final ConfiguratorEntry entry, final Node node) {
200         final Operation op = OperationFactory.getFactory().createOperation("Opening configurator");
201         try {
202             JInternalFrame JavaDoc frame = (JInternalFrame JavaDoc) Worker.post(new Task() {
203                 public Object JavaDoc run() throws Exception JavaDoc {
204                     op.newTask("Instanciating");
205                     op.setProgress(1, 3);
206                     SwingConfigurator configurator =
207                         (SwingConfigurator) entry.getClazz().newInstance();
208                     op.setProgress(2, 3);
209                     op.newTask("Embedding");
210                     ConfiguratorFrame frame = new ConfiguratorFrame(entry.getName());
211                     if (entry.getIconName() != null) {
212                         try {
213                             frame.setFrameIcon(
214                                 new ImageIcon JavaDoc(
215                                     getClass().getClassLoader().getResource(entry.getIconName())));
216                         } catch (NullPointerException JavaDoc e) {
217                         }
218                     }
219                     frame.setConfigurator(configurator, entry.getAttributes());
220                     frame.setNode(op, node);
221                     frame.pack();
222                     return frame;
223                 }
224             });
225             desktop.add(frame);
226             frame.show();
227         } catch (Exception JavaDoc e) {
228             log.error("Unable to create configurator", e);
229             controller.displayError(
230                 "Unable to create configurator",
231                 "An error occured during construction of this configurator",
232                 e);
233         } finally {
234             op.operationFinished();
235         }
236     }
237
238     /*
239      * (non-Javadoc)
240      *
241      * @see net.sf.panoptes.view.swt.MainWindow#refreshTemplates()
242      */

243     public void refreshTemplates() {
244         // TODO Auto-generated method stub
245

246     }
247
248     /*
249      * (non-Javadoc)
250      *
251      * @see net.sf.panoptes.view.swt.MainWindow#showError(java.lang.String,
252      * java.lang.String, java.lang.Throwable)
253      */

254     public void showError(String JavaDoc title, String JavaDoc message, Throwable JavaDoc cause) {
255         // TODO Auto-generated method stub
256

257     }
258
259     /*
260      * (non-Javadoc)
261      *
262      * @see net.sf.panoptes.view.swt.MainWindow#refresh(net.sf.panoptes.model.node.NodeSupport,
263      * boolean)
264      */

265     public void refresh(Node node, boolean recursive) {
266         // TODO Auto-generated method stub
267

268     }
269
270     public void displayError(String JavaDoc title, String JavaDoc message, Throwable JavaDoc exception) {
271         ErrorDialog dlg = new ErrorDialog(this, title, "Error", message, exception);
272         dlg.pack();
273         dlg.show();
274     }
275
276     /*
277      * (non-Javadoc)
278      *
279      * @see net.sf.panoptes.view.swt.MainWindow#revealNode(net.sf.panoptes.model.node.NodeSupport)
280      */

281     public void revealNode(Node n) {
282         // TODO Auto-generated method stub
283

284     }
285
286     /**
287      * @return
288      */

289     public JDesktopPane JavaDoc getDesktop() {
290         return desktop;
291     }
292
293     /**
294      * @return
295      */

296     public static MainWindowSwing getInstance() {
297         return instance;
298     }
299
300 }
301
Popular Tags