1 5 package net.sf.panoptes.controller; 6 7 import java.io.File ; 8 import java.io.FileInputStream ; 9 import java.io.FileNotFoundException ; 10 import java.io.FilenameFilter ; 11 import java.util.Properties ; 12 13 import javax.management.MBeanServer ; 14 import javax.management.MBeanServerConnection ; 15 import javax.management.MBeanServerFactory ; 16 import javax.management.ObjectName ; 17 import javax.swing.JDesktopPane ; 18 19 import net.sf.panoptes.component.jmx.connector.MBeanServerConnector; 20 import net.sf.panoptes.component.jmx.model.MBeanServerNode; 21 import net.sf.panoptes.component.jmx.model.ServerRegistry; 22 import net.sf.panoptes.controller.actions.ConnectToMBeanServerAction; 23 import net.sf.panoptes.controller.digester.ConfiguratorFactory; 24 import net.sf.panoptes.controller.digester.ConnectorFactory; 25 import net.sf.panoptes.controller.digester.TemplateFactory; 26 import net.sf.panoptes.model.node.GroupNode; 27 import net.sf.panoptes.model.node.Node; 28 import net.sf.panoptes.model.node.NodeSupport; 29 import net.sf.panoptes.model.node.RootNode; 30 import net.sf.panoptes.registry.ConfiguratorRegistry; 31 import net.sf.panoptes.registry.ConnectorRegistry; 32 import net.sf.panoptes.registry.Template; 33 import net.sf.panoptes.registry.TemplateRegistry; 34 import net.sf.panoptes.swing.OperationFactory; 35 import net.sf.panoptes.swing.propeditors.IntegerEditor; 36 import net.sf.panoptes.swing.propeditors.PropertyEditorRegistry; 37 import net.sf.panoptes.swing.propeditors.StringEditor; 38 import net.sf.panoptes.view.MainWindow; 39 import net.sf.panoptes.view.swing.MainWindowSwing; 40 41 import org.apache.commons.digester.Digester; 42 import org.apache.commons.logging.Log; 43 import org.apache.commons.logging.LogFactory; 44 45 import com.lc.jmxconsole.model.node.TemplateNode; 46 47 53 public class MainController { 54 55 private MainWindow mainWindow = null; 56 57 private Log log = LogFactory.getLog(getClass()); 58 private RootNode rootNode; 59 private NodeSupport currentNode = null; 60 61 private MBeanServer localMBeanServer = null; 62 private MBeanServerNode localMBeanServerNode = null; 63 64 private static MainController instance = null; 65 66 public MainController() { 67 instance = this; 68 PropertyEditorRegistry.registerEditor("int", IntegerEditor.class); 69 PropertyEditorRegistry.registerEditor("java.lang.Integer", IntegerEditor.class); 70 PropertyEditorRegistry.registerEditor("java.lang.String", StringEditor.class); 71 72 rootNode = new RootNode(); 73 74 localMBeanServer = MBeanServerFactory.createMBeanServer(); 75 localMBeanServerNode = new MBeanServerNode(rootNode, new MBeanServerConnector() { 76 public void disconnect(MBeanServerConnection conn) { 77 } 78 79 public void setProperties(Properties properties) { 80 } 81 82 public String getDefaultJNDIName() { 83 return null; 84 } 85 public MBeanServerConnection createConnection(Properties props) throws Exception { 86 return getLocalMBeanServer(); 87 } 88 89 public String getServerType() { 90 return "local"; 91 } 92 }); 93 localMBeanServerNode.setId("local"); 94 localMBeanServerNode.setHostName("localhost"); 95 96 try { 97 localMBeanServerNode.connect(); 98 } catch (Exception e) { 99 log.error("Unable to connect to local MBeanServer. Should never happen...", e); 100 } 101 ServerRegistry.getInstance().addServer("local", localMBeanServerNode); 102 rootNode.getContext().put("internalServer", localMBeanServerNode); 103 rootNode.getContext().put(MBeanServerNode.MBEANSERVERNODE_KEY, localMBeanServerNode); 104 105 mainWindow = new MainWindowSwing(this, rootNode); 106 107 110 try { 111 refreshConfigurators(); 112 refreshTemplates(); 113 refreshConnectors(); 114 } catch (Exception e) { 115 System.out.println("Unable to initialized - exiting."); 116 e.printStackTrace(); 117 System.exit(0); 118 } 119 120 } 121 122 public void refreshConnectors() throws Exception { 123 ConnectorRegistry.getInstance().removeAll(); 124 FileInputStream in = new FileInputStream ("config/connectors.xml"); 125 Digester digester = new Digester(); 126 digester.addFactoryCreate( 127 "*/connector", 128 new ConnectorFactory()); 129 digester.parse(in); 130 131 } 132 133 public void refreshTemplates() throws Exception { 134 TemplateRegistry.getInstance().removeAll(); 135 File dir = new File ("config/templates"); 136 String [] l = dir.list(new FilenameFilter () { 137 public boolean accept(File dir, String filename) { 138 return filename.endsWith("-templates.xml"); 139 } 140 }); 141 for (int i = 0; i < l.length; i++) { 142 Digester digester = new Digester(); 143 String filename = "config/templates/" + l[i]; 144 FileInputStream in = new FileInputStream (filename); 145 log.info("Parsing " + filename); 146 digester.push(rootNode); 147 digester.addFactoryCreate("templates/template", new TemplateFactory(rootNode)); 148 digester.parse(in); 149 } 150 refresh(rootNode, true); 151 mainWindow.refreshTemplates(); 152 153 } 154 155 public void refreshConfigurators() throws Exception { 156 ConfiguratorRegistry.getInstance().removeAll(); 157 File dir = new File ("config/configurators"); 158 String [] l = dir.list(new FilenameFilter () { 159 public boolean accept(File dir, String filename) { 160 return filename.endsWith("-configurators.xml"); 161 } 162 }); 163 for (int i = 0; i < l.length; i++) { 164 Digester digester = new Digester(); 165 String filename = "config/configurators/" + l[i]; 166 FileInputStream in = new FileInputStream (filename); 167 log.info("Parsing " + filename); 168 digester.push(rootNode); 169 digester.addFactoryCreate( 170 "*/configurator", 171 new ConfiguratorFactory(rootNode.getConfigRegistry())); 172 digester.parse(in); 173 } 174 } 175 176 public void attachTemplate(Template template, GroupNode node) { 177 node.addChild( 178 new TemplateNode(node, template.getName(), template.getDescription(), template)); 179 refresh(node, true); 180 OperationFactory.getFactory().createStatusMessage("Template attached"); 181 } 182 183 public static MainController getInstance() { 184 return instance; 185 } 186 187 190 public MainWindow getMainWindow() { 191 return mainWindow; 192 } 193 194 public JDesktopPane getDesktop() { 195 return ((MainWindowSwing) mainWindow).getDesktop(); 196 } 197 198 201 public RootNode getRootNode() { 202 return rootNode; 203 } 204 205 211 public void displayError(String title, String message) { 212 displayError(title, message, null); 213 } 214 215 222 public void displayError(final String title, final String message, final Throwable exception) { 223 mainWindow.displayError(title, message, exception); 224 } 225 226 private String nullSafeString(String string) { 227 if (string == null) 228 return ""; 229 else 230 return string; 231 } 232 233 236 public MBeanServer getLocalMBeanServer() { 237 return localMBeanServer; 238 } 239 240 public MBeanServerNode getLocalMBeanServerNode() { 241 return localMBeanServerNode; 242 } 243 244 public void setCurrentNode(NodeSupport node) { 245 this.currentNode = node; 246 } 247 248 251 public Node getCurrentNode() { 252 return currentNode; 253 } 254 255 258 public void refresh(Node node, boolean recursive) { 259 if (recursive) 261 node.refreshRecursive(); 262 else 263 node.refresh(); 264 265 if (mainWindow != null) 267 mainWindow.refresh(node, recursive); 268 } 269 270 public void revealNode(Node n) { 271 mainWindow.revealNode(n); 272 } 273 274 282 public void addMBeanServerConnection( 283 String name, 284 Properties properties, 285 MBeanServerConnector connector, 286 boolean connectImmediately) { 287 try { 288 289 MBeanServerNode connection = 290 new MBeanServerNode(MainController.getInstance().getRootNode(), connector); 291 connection.setProperties(properties); 292 293 connection.setId(name); 294 connection.setHostName((String ) properties.get("hostname")); 295 localMBeanServer.registerMBean( 296 connection, 297 new ObjectName ("mbeanserver:id=" + name + ",type=" + connection.getConnector().getName())); 298 299 if (connectImmediately) 300 new ConnectToMBeanServerAction(connection).actionPerformed(null); 301 ServerRegistry.getInstance().addServer(name, connection); 302 303 } catch (Exception e) { 304 log.error("Unable to connect to JMX Server", e); 305 MainController.getInstance().displayError("Unable to add server", e.getMessage(), e); 306 } 307 } 308 } 309 | Popular Tags |