KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > panoptes > controller > MainController


1 /*
2  * Created on 09.mar.2003
3  *
4  */

5 package net.sf.panoptes.controller;
6
7 import java.io.File JavaDoc;
8 import java.io.FileInputStream JavaDoc;
9 import java.io.FileNotFoundException JavaDoc;
10 import java.io.FilenameFilter JavaDoc;
11 import java.util.Properties JavaDoc;
12
13 import javax.management.MBeanServer JavaDoc;
14 import javax.management.MBeanServerConnection JavaDoc;
15 import javax.management.MBeanServerFactory JavaDoc;
16 import javax.management.ObjectName JavaDoc;
17 import javax.swing.JDesktopPane JavaDoc;
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 /**
48  * Main controller for Panoptes.
49  *
50  * @author Dag Liodden
51  * @version 0.1
52  */

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 JavaDoc 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 JavaDoc conn) {
77             }
78
79             public void setProperties(Properties JavaDoc properties) {
80             }
81
82             public String JavaDoc getDefaultJNDIName() {
83                 return null;
84             }
85             public MBeanServerConnection JavaDoc createConnection(Properties JavaDoc props) throws Exception JavaDoc {
86                 return getLocalMBeanServer();
87             }
88
89             public String JavaDoc getServerType() {
90                 return "local";
91             }
92         });
93         localMBeanServerNode.setId("local");
94         localMBeanServerNode.setHostName("localhost");
95
96         try {
97             localMBeanServerNode.connect();
98         } catch (Exception JavaDoc 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         /**
108          * Populate the rootnode
109          */

110         try {
111             refreshConfigurators();
112             refreshTemplates();
113             refreshConnectors();
114         } catch (Exception JavaDoc 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 JavaDoc {
123         ConnectorRegistry.getInstance().removeAll();
124         FileInputStream JavaDoc in = new FileInputStream JavaDoc("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 JavaDoc {
134         TemplateRegistry.getInstance().removeAll();
135         File JavaDoc dir = new File JavaDoc("config/templates");
136         String JavaDoc[] l = dir.list(new FilenameFilter JavaDoc() {
137             public boolean accept(File JavaDoc dir, String JavaDoc 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 JavaDoc filename = "config/templates/" + l[i];
144             FileInputStream JavaDoc in = new FileInputStream JavaDoc(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 JavaDoc {
156         ConfiguratorRegistry.getInstance().removeAll();
157         File JavaDoc dir = new File JavaDoc("config/configurators");
158         String JavaDoc[] l = dir.list(new FilenameFilter JavaDoc() {
159             public boolean accept(File JavaDoc dir, String JavaDoc 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 JavaDoc filename = "config/configurators/" + l[i];
166             FileInputStream JavaDoc in = new FileInputStream JavaDoc(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     /**
188      * @return MainWindow
189      */

190     public MainWindow getMainWindow() {
191         return mainWindow;
192     }
193
194     public JDesktopPane JavaDoc getDesktop() {
195         return ((MainWindowSwing) mainWindow).getDesktop();
196     }
197
198     /**
199      * @return RootNode
200      */

201     public RootNode getRootNode() {
202         return rootNode;
203     }
204
205     /**
206      * Displays an error message.
207      *
208      * @param title
209      * @param message
210      */

211     public void displayError(String JavaDoc title, String JavaDoc message) {
212         displayError(title, message, null);
213     }
214
215     /**
216      * Displays an error message with a cause.
217      *
218      * @param title
219      * @param message
220      * @param exception
221      */

222     public void displayError(final String JavaDoc title, final String JavaDoc message, final Throwable JavaDoc exception) {
223         mainWindow.displayError(title, message, exception);
224     }
225
226     private String JavaDoc nullSafeString(String JavaDoc string) {
227         if (string == null)
228             return "";
229         else
230             return string;
231     }
232
233     /**
234      * @return
235      */

236     public MBeanServer JavaDoc 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     /**
249      * @return
250      */

251     public Node getCurrentNode() {
252         return currentNode;
253     }
254
255     /**
256      *
257      */

258     public void refresh(Node node, boolean recursive) {
259         // Refresh model
260
if (recursive)
261             node.refreshRecursive();
262         else
263             node.refresh();
264
265         // Refresh view
266
if (mainWindow != null)
267             mainWindow.refresh(node, recursive);
268     }
269
270     public void revealNode(Node n) {
271         mainWindow.revealNode(n);
272     }
273
274     /**
275      * Called by the NewNodeWizard when it is done.
276      *
277      * @param name
278      * @param url
279      * @param rmiPort
280      * @param connectImmediately
281      */

282     public void addMBeanServerConnection(
283         String JavaDoc name,
284         Properties JavaDoc 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 JavaDoc) properties.get("hostname"));
295             localMBeanServer.registerMBean(
296                 connection,
297                 new ObjectName JavaDoc("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 JavaDoc 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