1 5 package net.sf.panoptes.view.swing; 6 7 import java.awt.BorderLayout ; 8 import java.awt.Dimension ; 9 import java.awt.event.ActionEvent ; 10 import java.awt.event.ActionListener ; 11 import java.awt.event.WindowAdapter ; 12 import java.awt.event.WindowEvent ; 13 import java.util.Iterator ; 14 import java.util.Set ; 15 16 import javax.swing.ImageIcon ; 17 import javax.swing.JDesktopPane ; 18 import javax.swing.JFrame ; 19 import javax.swing.JInternalFrame ; 20 import javax.swing.JMenu ; 21 import javax.swing.JMenuBar ; 22 import javax.swing.JMenuItem ; 23 import javax.swing.JPanel ; 24 import javax.swing.JPopupMenu ; 25 import javax.swing.UIManager ; 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 61 public class MainWindowSwing extends JFrame implements MainWindow { 62 63 JDesktopPane desktop; 64 JMenuBar 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("net.sourceforge.mlf.metouia.MetouiaLookAndFeel"); 81 } catch (Exception e) { 82 e.printStackTrace(); 83 } 84 88 89 addWindowListener(new WindowAdapter () { 90 public void windowClosing(WindowEvent e) { 91 System.exit(0); 92 } 93 }); 94 95 setSize(new Dimension (730, 560)); 96 desktop = new JDesktopPane (); 97 98 menuBar = createMenuBar(); 99 setJMenuBar(menuBar); 100 JPanel contentPane = new JPanel (new BorderLayout ()); 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 createMenuBar() { 115 menuBar = new JMenuBar (); 116 117 JMenu fileMenu = new JMenu ("File"); 118 fileMenu.add(new JMenuItem (new NewMBeanServerAction(this))); 119 120 menuBar.add(fileMenu); 121 122 JMenu setMenu = new JMenu ("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 constructPopupMenu(final Node node, final MBeanTreeFrame tree) { 140 JPopupMenu m = new JPopupMenu ("MBean"); 141 m.add(new BaseAction("Refresh") { 142 public void actionPerformed(ActionEvent e) { 143 node.refresh(); 144 } 145 }); 146 147 if (node instanceof GroupNode) { 148 JMenu templateMenu = new JMenu ("Attach template"); 149 for (Iterator 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 queryMenu = new JMenu ("Query"); 160 queryMenu.add(new EditQueryAction(this, (MBeanQuery) node)); 161 m.add(queryMenu); 162 } 163 164 JMenu configuratorMenu = new JMenu ("Open with"); 165 try { 166 Set configurators = ConfiguratorRegistry.getInstance().findConfigurators("swing", node); 167 for (Iterator i = configurators.iterator(); i.hasNext();) { 168 final ConfiguratorEntry ce = (ConfiguratorEntry) i.next(); 169 final JMenuItem mi = new JMenuItem (ce.getName()); 170 mi.addActionListener(new ActionListener () { 171 public void actionPerformed(ActionEvent e) { 172 constructConfigurator(ce, node); 173 } 174 }); 175 if (ce.getIconName() != null) { 176 try { 177 mi.setIcon( 178 new ImageIcon ( 179 getClass().getClassLoader().getResource(ce.getIconName()))); 180 } catch (NullPointerException 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 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 frame = (JInternalFrame ) Worker.post(new Task() { 203 public Object run() throws Exception { 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 ( 215 getClass().getClassLoader().getResource(entry.getIconName()))); 216 } catch (NullPointerException 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 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 243 public void refreshTemplates() { 244 246 } 247 248 254 public void showError(String title, String message, Throwable cause) { 255 257 } 258 259 265 public void refresh(Node node, boolean recursive) { 266 268 } 269 270 public void displayError(String title, String message, Throwable exception) { 271 ErrorDialog dlg = new ErrorDialog(this, title, "Error", message, exception); 272 dlg.pack(); 273 dlg.show(); 274 } 275 276 281 public void revealNode(Node n) { 282 284 } 285 286 289 public JDesktopPane getDesktop() { 290 return desktop; 291 } 292 293 296 public static MainWindowSwing getInstance() { 297 return instance; 298 } 299 300 } 301 | Popular Tags |