KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > dwipal > DwSnmpMibTreeGUI


1 package com.dwipal;
2
3 import javax.swing.*;
4 import java.awt.*;
5 import java.awt.event.*;
6 import javax.swing.JTree JavaDoc;
7 import javax.swing.tree.*;
8 import javax.swing.event.*;
9 import java.io.*;
10 import java.util.*;
11
12 public class DwSnmpMibTreeGUI
13     implements ActionListener, MouseListener, TreeSelectionListener {
14
15   DwSnmpMibTreeBuilder treeSupport;
16   //DwSnmpOidSupport oidSupport;
17
DwSnmpMibBrowserFunctions snmp;
18   DwSnmpMibOutputHandler output = new DwSnmpMibOutputHandler();
19
20   JTree JavaDoc myTree;
21   JScrollPane treeScrollPane;
22   JPanel treePane;
23
24   JButton btnLoadMib;
25
26   JPanel paneMain = new JPanel(new BorderLayout());
27
28   // Other GUI stuff
29
JTextField selectedTreeOid = new JTextField("Selected oid..");
30   JTextArea resultText;
31   JButton btnGet = new JButton("Get");
32   JButton btnSet = new JButton("Set");
33   JButton btnStop = new JButton("Stop");
34   JCheckBox chkScroll = new JCheckBox("Scroll Display");
35   JButton btnOidDetails = new JButton("Details");
36   JButton btnClear = new JButton("Clear");
37
38   // Tooltips and Toolbars
39
JToolBar mainToolbar;
40   JButton toolbarBtnIP;
41   JButton toolbarBtnAbout;
42
43   JToolBar statusToolbar;
44   // Initial Vars
45

46   PipedInputStream pin;
47   PipedOutputStream pout;
48   PrintStream out;
49   BufferedReader in;
50
51   public DwSnmpMibTreeGUI() {
52     output.setLogging(true);
53     try {
54       jbInit();
55     }
56     catch (Exception JavaDoc ex) {
57       ex.printStackTrace();
58     }
59   }
60
61   public DwSnmpOidSupport getOidSupport() {
62     return treeSupport.oidSupport;
63   }
64
65   public JPanel getMainPane() {
66     return paneMain;
67   }
68
69   public JTree JavaDoc getTree() {
70     return myTree;
71   }
72
73   public Component createComponents() {
74     // First initialise the output text area and Status areas
75
btnOidDetails.setToolTipText("Get details of selected element");
76     btnClear.setToolTipText("Clear the contents of result window");
77     btnOidDetails.addActionListener(this);
78     btnClear.addActionListener(this);
79
80     resultText = new JTextArea();
81     JScrollPane resultPane = new JScrollPane(resultText);
82
83     // Set everyone's output to resulttext
84
output = new DwSnmpMibOutputHandler();
85     output.setOutput(resultText);
86     output.setOutputError(resultText);
87     snmp = new DwSnmpMibBrowserFunctions();
88     snmp.setOutput(output);
89
90     selectedTreeOid = new JTextField("Your Selection");
91
92     // Create a tooltip for jlabel, and also add a message handler to it.
93
selectedTreeOid.setToolTipText(
94         "Click here for more information on this variable");
95     selectedTreeOid.setText("Selected Element's OID");
96     selectedTreeOid.addMouseListener(this);
97
98     // Create the TREE and Tree pane.
99

100     outputText("Building tree..");
101     treeSupport = new DwSnmpMibTreeBuilder();
102     treeSupport.setOutput(output);
103     String JavaDoc projectdir = System.getProperty("ProjectDir");
104     if (projectdir == null) {
105       projectdir = ".";
106     }
107     if (treeSupport.addDirectory(projectdir + "/mibs/") == false) {
108       outputError("Directory " + projectdir +
109                   "/mibs/ not found, or it is an empty directory!");
110     }
111
112     //treeSupport.addFile("mib_core.txt");
113
// treeSupport.addFile("mib_II.txt");
114

115     myTree = treeSupport.buildTree();
116     if (myTree == null || treeSupport.oidSupport == null) {
117       outputError("Error in loading MIB tree, quitting");
118       return null;
119     }
120     snmp.setOidSupport(treeSupport.oidSupport);
121     myTree.addTreeSelectionListener(this);
122     treeScrollPane = new JScrollPane(myTree);
123
124     btnLoadMib = new JButton("Load MIB");
125     treePane = new JPanel(new BorderLayout());
126     treePane.add("Center", treeScrollPane);
127     treePane.add("South", btnLoadMib);
128
129     //buildOidToNameResolutionTable(rootNode,oidResolveHash);
130

131     statusToolbar = new JToolBar();
132     statusToolbar.add(btnClear);
133     statusToolbar.add(btnOidDetails);
134     statusToolbar.addSeparator();
135     statusToolbar.add(selectedTreeOid);
136
137     // Create the Right pane containing buttons,status and textbox
138
btnGet.setToolTipText("Get the values for selected element");
139     btnSet.setToolTipText("Set the value of selected element");
140     btnStop.setToolTipText("Stop the current action");
141
142     JPanel paneBtn = new JPanel(new FlowLayout());
143     btnGet.addActionListener(this);
144     btnSet.addActionListener(this);
145     btnStop.addActionListener(this);
146     chkScroll.setSelected(true);
147     chkScroll.addActionListener(new ActionListener() {
148       public void actionPerformed(ActionEvent e) {
149         output.setAutoScroll(chkScroll.isSelected());
150       }
151     });
152
153     paneBtn.add(btnGet);
154     paneBtn.add(btnSet);
155     paneBtn.add(btnStop);
156     paneBtn.add(chkScroll);
157
158     JPanel paneStatus = new JPanel(new BorderLayout());
159     paneStatus.add("South", paneBtn);
160     paneStatus.add("North", statusToolbar);
161     paneStatus.add("Center", resultPane);
162
163     // Create the Main Toolbar
164
mainToolbar = new JToolBar();
165     toolbarBtnIP = new JButton("Select Server");
166     toolbarBtnAbout = new JButton("About");
167
168     toolbarBtnIP.addActionListener(this);
169     toolbarBtnAbout.addActionListener(this);
170     btnLoadMib.addActionListener(this);
171
172     mainToolbar.add(toolbarBtnIP);
173     mainToolbar.add(toolbarBtnAbout);
174
175     // Create the Content pane and add other panes to it :)
176
JSplitPane paneContent = new JSplitPane();
177     paneContent.setLeftComponent(treePane);
178     paneContent.setRightComponent(paneStatus);
179     paneContent.setDividerLocation(250);
180
181     // Finally create the Main Pane with the toolbar and content pane in it
182
paneMain.add("Center", paneContent);
183     paneMain.add("North", mainToolbar);
184
185     return paneMain;
186   }
187
188   /** Returns the tree pane
189    */

190   public JPanel getTreePane() {
191     return treePane;
192   }
193
194   public void setTreePane(JPanel treePanel) {
195
196   }
197
198   /** TREE SELECTION LISTENER.
199    * LISTENS TO THE EVENTS IN THE TREE "myTree"
200    */

201
202   public void valueChanged(TreeSelectionEvent e) {
203     DefaultMutableTreeNode node = (DefaultMutableTreeNode) myTree.
204         getLastSelectedPathComponent();
205     if (node == null) {
206       selectedTreeOid.setText(" ");
207       return;
208     }
209     selectedTreeOid.setText(treeSupport.oidSupport.getNodeOid(node));
210   }
211
212   /** END OF TREE SELECTION EVENT LISTENER
213    */

214   public void mouseClicked(MouseEvent evt) {
215     Object JavaDoc source = evt.getSource();
216     if (source == selectedTreeOid) {
217       DwSnmpMibRecord node = getSelectedTreeNode();
218       if(node != null)
219         outputText(node.getCompleteString());
220     }
221   }
222   private DwSnmpMibRecord getSelectedTreeNode() {
223     DwSnmpMibRecord ret=null;
224     DefaultMutableTreeNode node = (DefaultMutableTreeNode) myTree.getLastSelectedPathComponent();
225     if(node!=null) {
226       ret=(DwSnmpMibRecord) node.getUserObject();
227     }
228     return ret;
229   }
230
231   public void mouseEntered(MouseEvent e) {}
232
233   public void mouseExited(MouseEvent e) {}
234
235   public void mousePressed(MouseEvent e) {}
236
237   public void mouseReleased(MouseEvent e) {}
238
239   public void actionPerformed(ActionEvent evt) {
240     Object JavaDoc source = evt.getSource();
241
242     try {
243       if (source == btnGet) {
244         sendGetRequest(selectedTreeOid.getText());
245         return;
246       }
247       else if (source == btnSet) {
248         DwSnmpMibRecord node=getSelectedTreeNode();
249         if(!node.isWritable()) {
250           JOptionPane.showMessageDialog(getMainPane(), "The selected node is not writable.", "Error", JOptionPane.ERROR_MESSAGE);
251           return;
252         }
253
254         String JavaDoc oid = selectedTreeOid.getText();
255         String JavaDoc oidText=getOidSupport().resolveOidName(oid);
256         String JavaDoc setValue = "";
257         String JavaDoc message="Enter new value for " + oidText;
258         if(node.getSyntaxID()!=DwSnmpMibRecord.VALUE_TYPE_NONE) {
259           message=message+"\nValue Type: " + node.syntax.trim() + " [" + node.getSyntaxIDString() + "]";
260         } else {
261           message=message+"\nValue type " + node.syntax.trim() + " unknown, will use STRING.";
262         }
263         setValue = JOptionPane.showInputDialog(message);
264         if(setValue!=null && node.checkValidValue(setValue)) {
265           outputText("Request : Set " + oid + " Value : " + setValue);
266           if (snmp.processSetRequest(node, oid, setValue) == null) {
267             outputError("Error in processing variable data/set request");
268             return;
269           }
270           //DwSnmpRequestSet(oid,setValue);
271
outputText("Set command executed...");
272           outputText("Getting new value of " + oid + " ...");
273           sendGetRequest(oid);
274         }
275         return;
276       }
277       else if (source == btnStop) {
278         snmp.destroySession();
279         outputText(" ******** Cancelled *********\n");
280         return;
281       }
282       else if (source == btnClear) {
283         resultText.setText("");
284         return;
285       }
286       else if (source == btnOidDetails) {
287         mouseClicked(new MouseEvent(selectedTreeOid, 0, 0, 0, 0, 0, 0, true));
288         return;
289       }
290       else if (source == toolbarBtnAbout) {
291         JOptionPane.showMessageDialog(paneMain,
292                                       "JMibBrowser version 1.1 Copyright (C) 2005 Dwipal Desai\n\n" +
293                                       "This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are\n" +
294                                       "welcome to redistribute it under certain conditions. See License.txt for details.\n\n" +
295                                       "This software uses snmp4j from http://www.snmp4j.org.\n\n" +
296                                       "Please email your suggestions to mibbrowser@dwipal.com.\n",
297                                       "About JMibBrowser",
298                                       JOptionPane.INFORMATION_MESSAGE);
299
300         return;
301       }
302       else if (source == toolbarBtnIP) {
303         try {
304           String JavaDoc newIP = new String JavaDoc(" ");
305           if (snmp == null) {
306             snmp = new DwSnmpMibBrowserFunctions();
307             snmp.setOidSupport(treeSupport.oidSupport);
308           }
309           getNewIPInfo();
310         }
311         catch (Exception JavaDoc e) {
312           System.err.println("Error in changing IP..\n" + e.toString());
313         }
314         return;
315       }
316       else if (source == btnLoadMib) {
317         loadNewMib();
318         return;
319       }
320     }
321     catch (Exception JavaDoc e) {
322       outputError("\nError in processing user request : \n" + e.toString());
323     }
324   }
325
326   void getNewIPInfo() {
327     DwSnmpSelectServerDialog ipSrv = new DwSnmpSelectServerDialog();
328
329     String JavaDoc ipInfo[] = ipSrv.show(snmp.getIP(), snmp.getPort(),
330                                  snmp.getReadCommunity(),
331                                  snmp.getWriteCommunity());
332
333     if (ipInfo == null) {
334       return;
335     }
336
337     snmp.setIP(ipInfo[0]);
338     snmp.setPort(Integer.parseInt(ipInfo[1]));
339     snmp.setCommunity(ipInfo[2], ipInfo[3]);
340
341   }
342
343   public void loadNewMib() {
344
345     try {
346       JFileChooser fileChooser = new JFileChooser();
347       fileChooser.setVisible(true);
348       fileChooser.setDialogTitle("Select the MIB File to Load");
349       fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
350       fileChooser.setCurrentDirectory(new File("."));
351       fileChooser.setMultiSelectionEnabled(true);
352
353       String JavaDoc strFileName = "";
354       int returnVal = fileChooser.showOpenDialog(null);
355       if (returnVal == JFileChooser.APPROVE_OPTION) {
356         File[] files = fileChooser.getSelectedFiles();
357         if (files != null && files.length > 0) {
358           for (int i = 0; i < files.length; i++) {
359             try {
360               loadSingleFile(files[i]);
361             }
362             catch (Exception JavaDoc e) {
363               outputError("Error in loading file: " + files[i].getAbsolutePath());
364             }
365           }
366         }
367       }
368       else {
369         return;
370       }
371
372 // treeSupport.addFile(strFileName);
373
}
374     catch (Exception JavaDoc e) {
375       System.out.println("Error in getting new MIB Filenames.\n" + e.toString());
376     }
377
378     /* try {
379        myTree.removeTreeSelectionListener(this);
380        myTree.removeAll();
381        treeScrollPane.remove(myTree);
382        System.out.println("Building tree..");
383        String fileNames[]=treeSupport.getFiles();
384        treeSupport=new DwSnmpMibTreeBuilder();
385        treeSupport.setOutput(output);
386        try {
387         for(int i=0;i<fileNames.length;i++) {
388          treeSupport.addFile(fileNames[i]);
389         }
390        } catch(Exception e) {
391      System.out.println("Error in loadin new MIB Filenames.\n" + e.toString());
392        }
393
394        try{
395        myTree=treeSupport.buildTree();
396        } catch(Exception e) {
397        System.out.println("Error in building new MIB tree.\n" + e.toString());
398        }
399
400        myTree.addTreeSelectionListener(this);
401        treeScrollPane.setEnabled(true);
402        //treeScrollPane.add(myTree);
403        treeScrollPane.setViewportView(myTree);
404        treeScrollPane.repaint();
405       }catch(Exception e){
406        System.out.println("Error in loading new MIB.\n" + e.toString());
407       }
408
409      */

410   }
411
412   private void loadSingleFile(File file) {
413     String JavaDoc strFileName = file.getAbsolutePath();
414     treeSupport.loadNewFile(strFileName);
415   }
416
417   public static void main(String JavaDoc[] args) {
418     try {
419       UIManager.setLookAndFeel(
420           UIManager.getSystemLookAndFeelClassName());
421     }
422     catch (Exception JavaDoc e) {}
423
424     //Create the top-level container and add contents to it.
425
JFrame frame = new JFrame("MIB Browser");
426     frame.setSize(700, 550);
427     DwSnmpMibTreeGUI tree1 = new DwSnmpMibTreeGUI();
428     Component comp = tree1.createComponents();
429     if (comp != null) {
430       frame.getContentPane().add(comp);
431     }
432     else {
433       JOptionPane.showMessageDialog(frame.getContentPane(),
434                                     "Error in loading default MIBs.");
435     }
436     //Finish setting up the frame, and show it.
437
frame.addWindowListener(new WindowAdapter() {
438       public void windowClosing(WindowEvent e) {
439         System.exit(0);
440       }
441     });
442
443     //frame.pack();
444
frame.setVisible(true);
445   }
446
447   void sendGetRequest(String JavaDoc strReq) {
448     if (strReq.endsWith("0")) {
449       strReq = strReq.substring(0, strReq.lastIndexOf("."));
450       outputText("Request : Get " + strReq + "\n");
451     } else if (strReq.endsWith("*")) {
452       strReq = strReq.substring(0, strReq.lastIndexOf("*") - 1);
453       outputText("Request : Walk " + strReq + "\n");
454     } else if (strReq.endsWith(")")) {
455       strReq = strReq.substring(0, strReq.indexOf("(") - 1);
456       outputText("Request : Walk " + strReq + "\n");
457     } else {
458       outputError("Error in request. Please check the OID.");
459     }
460
461     final String JavaDoc strReqFin=strReq;
462     Thread JavaDoc t=new Thread JavaDoc(new Runnable JavaDoc() {
463       public void run() {
464         snmp.snmpRequestGet(strReqFin);
465       }
466     });
467     t.start();
468   }
469
470
471   void outputText(String JavaDoc s) {
472     if (output != null) {
473       output.println(s);
474     }
475     else {
476       System.out.println(s);
477     }
478   }
479
480   void outputError(String JavaDoc e) {
481     if (output != null) {
482       output.printError(e);
483     }
484     else {
485       System.out.println(e);
486
487     }
488   }
489
490   private void jbInit() throws Exception JavaDoc {
491   }
492 } // END OF CLASS *****************************************
493
Popular Tags