DwSnmpMibTreeGUI.java :  » Net » JMIBBrowser » com » dwipal » Java Open Source

Java Open Source » Net » JMIBBrowser 
JMIBBrowser » com » dwipal » DwSnmpMibTreeGUI.java
package com.dwipal;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JTree;
import javax.swing.tree.*;
import javax.swing.event.*;
import java.io.*;
import java.util.*;

public class DwSnmpMibTreeGUI
    implements ActionListener, MouseListener, TreeSelectionListener {

  DwSnmpMibTreeBuilder treeSupport;
  //DwSnmpOidSupport  oidSupport;
  DwSnmpMibBrowserFunctions snmp;
  DwSnmpMibOutputHandler output = new DwSnmpMibOutputHandler();

  JTree myTree;
  JScrollPane treeScrollPane;
  JPanel treePane;

  JButton btnLoadMib;

  JPanel paneMain = new JPanel(new BorderLayout());

  // Other GUI stuff
  JTextField selectedTreeOid = new JTextField("Selected oid..");
  JTextArea resultText;
  JButton btnGet = new JButton("Get");
  JButton btnSet = new JButton("Set");
  JButton btnStop = new JButton("Stop");
  JCheckBox chkScroll = new JCheckBox("Scroll Display");
  JButton btnOidDetails = new JButton("Details");
  JButton btnClear = new JButton("Clear");

  // Tooltips and Toolbars
  JToolBar mainToolbar;
  JButton toolbarBtnIP;
  JButton toolbarBtnAbout;

  JToolBar statusToolbar;
  // Initial Vars

  PipedInputStream pin;
  PipedOutputStream pout;
  PrintStream out;
  BufferedReader in;

  public DwSnmpMibTreeGUI() {
    output.setLogging(true);
    try {
      jbInit();
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

  public DwSnmpOidSupport getOidSupport() {
    return treeSupport.oidSupport;
  }

  public JPanel getMainPane() {
    return paneMain;
  }

  public JTree getTree() {
    return myTree;
  }

  public Component createComponents() {
    // First initialise the output text area and Status areas
    btnOidDetails.setToolTipText("Get details of selected element");
    btnClear.setToolTipText("Clear the contents of result window");
    btnOidDetails.addActionListener(this);
    btnClear.addActionListener(this);

    resultText = new JTextArea();
    JScrollPane resultPane = new JScrollPane(resultText);

    // Set everyone's output to resulttext
    output = new DwSnmpMibOutputHandler();
    output.setOutput(resultText);
    output.setOutputError(resultText);
    snmp = new DwSnmpMibBrowserFunctions();
    snmp.setOutput(output);

    selectedTreeOid = new JTextField("Your Selection");

    // Create a tooltip for jlabel, and also add a message handler to it.
    selectedTreeOid.setToolTipText(
        "Click here for more information on this variable");
    selectedTreeOid.setText("Selected Element's OID");
    selectedTreeOid.addMouseListener(this);

    // Create the TREE and Tree pane.

    outputText("Building tree..");
    treeSupport = new DwSnmpMibTreeBuilder();
    treeSupport.setOutput(output);
    String projectdir = System.getProperty("ProjectDir");
    if (projectdir == null) {
      projectdir = ".";
    }
    if (treeSupport.addDirectory(projectdir + "/mibs/") == false) {
      outputError("Directory " + projectdir +
                  "/mibs/ not found, or it is an empty directory!");
    }

    //treeSupport.addFile("mib_core.txt");
    //  treeSupport.addFile("mib_II.txt");

    myTree = treeSupport.buildTree();
    if (myTree == null || treeSupport.oidSupport == null) {
      outputError("Error in loading MIB tree, quitting");
      return null;
    }
    snmp.setOidSupport(treeSupport.oidSupport);
    myTree.addTreeSelectionListener(this);
    treeScrollPane = new JScrollPane(myTree);

    btnLoadMib = new JButton("Load MIB");
    treePane = new JPanel(new BorderLayout());
    treePane.add("Center", treeScrollPane);
    treePane.add("South", btnLoadMib);

    //buildOidToNameResolutionTable(rootNode,oidResolveHash);

    statusToolbar = new JToolBar();
    statusToolbar.add(btnClear);
    statusToolbar.add(btnOidDetails);
    statusToolbar.addSeparator();
    statusToolbar.add(selectedTreeOid);

    // Create the Right pane containing buttons,status and textbox
    btnGet.setToolTipText("Get the values for selected element");
    btnSet.setToolTipText("Set the value of selected element");
    btnStop.setToolTipText("Stop the current action");

    JPanel paneBtn = new JPanel(new FlowLayout());
    btnGet.addActionListener(this);
    btnSet.addActionListener(this);
    btnStop.addActionListener(this);
    chkScroll.setSelected(true);
    chkScroll.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        output.setAutoScroll(chkScroll.isSelected());
      }
    });

    paneBtn.add(btnGet);
    paneBtn.add(btnSet);
    paneBtn.add(btnStop);
    paneBtn.add(chkScroll);

    JPanel paneStatus = new JPanel(new BorderLayout());
    paneStatus.add("South", paneBtn);
    paneStatus.add("North", statusToolbar);
    paneStatus.add("Center", resultPane);

    // Create the Main Toolbar
    mainToolbar = new JToolBar();
    toolbarBtnIP = new JButton("Select Server");
    toolbarBtnAbout = new JButton("About");

    toolbarBtnIP.addActionListener(this);
    toolbarBtnAbout.addActionListener(this);
    btnLoadMib.addActionListener(this);

    mainToolbar.add(toolbarBtnIP);
    mainToolbar.add(toolbarBtnAbout);

    // Create the Content pane and add other panes to it :)
    JSplitPane paneContent = new JSplitPane();
    paneContent.setLeftComponent(treePane);
    paneContent.setRightComponent(paneStatus);
    paneContent.setDividerLocation(250);

    // Finally create the Main Pane with the toolbar and content pane in it
    paneMain.add("Center", paneContent);
    paneMain.add("North", mainToolbar);

    return paneMain;
  }

  /** Returns the tree pane
   */
  public JPanel getTreePane() {
    return treePane;
  }

  public void setTreePane(JPanel treePanel) {

  }

  /** TREE SELECTION LISTENER.
   * LISTENS TO THE EVENTS IN THE TREE "myTree"
   */

  public void valueChanged(TreeSelectionEvent e) {
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) myTree.
        getLastSelectedPathComponent();
    if (node == null) {
      selectedTreeOid.setText(" ");
      return;
    }
    selectedTreeOid.setText(treeSupport.oidSupport.getNodeOid(node));
  }

  /** END OF TREE SELECTION EVENT LISTENER
   */
  public void mouseClicked(MouseEvent evt) {
    Object source = evt.getSource();
    if (source == selectedTreeOid) {
      DwSnmpMibRecord node = getSelectedTreeNode();
      if(node != null)
        outputText(node.getCompleteString());
    }
  }
  private DwSnmpMibRecord getSelectedTreeNode() {
    DwSnmpMibRecord ret=null;
    DefaultMutableTreeNode node = (DefaultMutableTreeNode) myTree.getLastSelectedPathComponent();
    if(node!=null) {
      ret=(DwSnmpMibRecord) node.getUserObject();
    }
    return ret;
  }

  public void mouseEntered(MouseEvent e) {}

  public void mouseExited(MouseEvent e) {}

  public void mousePressed(MouseEvent e) {}

  public void mouseReleased(MouseEvent e) {}

  public void actionPerformed(ActionEvent evt) {
    Object source = evt.getSource();

    try {
      if (source == btnGet) {
        sendGetRequest(selectedTreeOid.getText());
        return;
      }
      else if (source == btnSet) {
        DwSnmpMibRecord node=getSelectedTreeNode();
        if(!node.isWritable()) {
          JOptionPane.showMessageDialog(getMainPane(), "The selected node is not writable.", "Error", JOptionPane.ERROR_MESSAGE);
          return;
        }

        String oid = selectedTreeOid.getText();
        String oidText=getOidSupport().resolveOidName(oid);
        String setValue = "";
        String message="Enter new value for " + oidText;
        if(node.getSyntaxID()!=DwSnmpMibRecord.VALUE_TYPE_NONE) {
          message=message+"\nValue Type: " + node.syntax.trim() + " [" + node.getSyntaxIDString() + "]";
        } else {
          message=message+"\nValue type " + node.syntax.trim() + " unknown, will use STRING.";
        }
        setValue = JOptionPane.showInputDialog(message);
        if(setValue!=null && node.checkValidValue(setValue)) {
          outputText("Request : Set  " + oid + "  Value : " + setValue);
          if (snmp.processSetRequest(node, oid, setValue) == null) {
            outputError("Error in processing variable data/set request");
            return;
          }
          //DwSnmpRequestSet(oid,setValue);
          outputText("Set command executed...");
          outputText("Getting new value of " + oid + " ...");
          sendGetRequest(oid);
        }
        return;
      }
      else if (source == btnStop) {
        snmp.destroySession();
        outputText(" ******** Cancelled *********\n");
        return;
      }
      else if (source == btnClear) {
        resultText.setText("");
        return;
      }
      else if (source == btnOidDetails) {
        mouseClicked(new MouseEvent(selectedTreeOid, 0, 0, 0, 0, 0, 0, true));
        return;
      }
      else if (source == toolbarBtnAbout) {
        JOptionPane.showMessageDialog(paneMain,
                                      "JMibBrowser version 1.1 Copyright (C) 2005 Dwipal Desai\n\n" +
                                      "This program comes with ABSOLUTELY NO WARRANTY. This is free software, and you are\n" +
                                      "welcome to redistribute it under certain conditions. See License.txt for details.\n\n" +
                                      "This software uses snmp4j from http://www.snmp4j.org.\n\n" +
                                      "Please email your suggestions to mibbrowser@dwipal.com.\n",
                                      "About JMibBrowser",
                                      JOptionPane.INFORMATION_MESSAGE);

        return;
      }
      else if (source == toolbarBtnIP) {
        try {
          String newIP = new String(" ");
          if (snmp == null) {
            snmp = new DwSnmpMibBrowserFunctions();
            snmp.setOidSupport(treeSupport.oidSupport);
          }
          getNewIPInfo();
        }
        catch (Exception e) {
          System.err.println("Error in changing IP..\n" + e.toString());
        }
        return;
      }
      else if (source == btnLoadMib) {
        loadNewMib();
        return;
      }
    }
    catch (Exception e) {
      outputError("\nError in processing user request : \n" + e.toString());
    }
  }

  void getNewIPInfo() {
    DwSnmpSelectServerDialog ipSrv = new DwSnmpSelectServerDialog();

    String ipInfo[] = ipSrv.show(snmp.getIP(), snmp.getPort(),
                                 snmp.getReadCommunity(),
                                 snmp.getWriteCommunity());

    if (ipInfo == null) {
      return;
    }

    snmp.setIP(ipInfo[0]);
    snmp.setPort(Integer.parseInt(ipInfo[1]));
    snmp.setCommunity(ipInfo[2], ipInfo[3]);

  }

  public void loadNewMib() {

    try {
      JFileChooser fileChooser = new JFileChooser();
      fileChooser.setVisible(true);
      fileChooser.setDialogTitle("Select the MIB File to Load");
      fileChooser.setDialogType(JFileChooser.OPEN_DIALOG);
      fileChooser.setCurrentDirectory(new File("."));
      fileChooser.setMultiSelectionEnabled(true);

      String strFileName = "";
      int returnVal = fileChooser.showOpenDialog(null);
      if (returnVal == JFileChooser.APPROVE_OPTION) {
        File[] files = fileChooser.getSelectedFiles();
        if (files != null && files.length > 0) {
          for (int i = 0; i < files.length; i++) {
            try {
              loadSingleFile(files[i]);
            }
            catch (Exception e) {
              outputError("Error in loading file: " + files[i].getAbsolutePath());
            }
          }
        }
      }
      else {
        return;
      }

//      treeSupport.addFile(strFileName);
    }
    catch (Exception e) {
      System.out.println("Error in getting new MIB Filenames.\n" + e.toString());
    }

    /*    try {
       myTree.removeTreeSelectionListener(this);
       myTree.removeAll();
       treeScrollPane.remove(myTree);
       System.out.println("Building tree..");
       String fileNames[]=treeSupport.getFiles();
       treeSupport=new DwSnmpMibTreeBuilder();
       treeSupport.setOutput(output);
       try {
        for(int i=0;i<fileNames.length;i++) {
         treeSupport.addFile(fileNames[i]);
        }
       } catch(Exception e) {
     System.out.println("Error in loadin new MIB Filenames.\n" + e.toString());
       }

       try{
       myTree=treeSupport.buildTree();
       } catch(Exception e) {
       System.out.println("Error in building new MIB tree.\n" + e.toString());
       }

       myTree.addTreeSelectionListener(this);
       treeScrollPane.setEnabled(true);
       //treeScrollPane.add(myTree);
       treeScrollPane.setViewportView(myTree);
       treeScrollPane.repaint();
      }catch(Exception e){
       System.out.println("Error in loading new MIB.\n" + e.toString());
      }

     */
  }

  private void loadSingleFile(File file) {
    String strFileName = file.getAbsolutePath();
    treeSupport.loadNewFile(strFileName);
  }

  public static void main(String[] args) {
    try {
      UIManager.setLookAndFeel(
          UIManager.getSystemLookAndFeelClassName());
    }
    catch (Exception e) {}

    //Create the top-level container and add contents to it.
    JFrame frame = new JFrame("MIB Browser");
    frame.setSize(700, 550);
    DwSnmpMibTreeGUI tree1 = new DwSnmpMibTreeGUI();
    Component comp = tree1.createComponents();
    if (comp != null) {
      frame.getContentPane().add(comp);
    }
    else {
      JOptionPane.showMessageDialog(frame.getContentPane(),
                                    "Error in loading default MIBs.");
    }
    //Finish setting up the frame, and show it.
    frame.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });

    //frame.pack();
    frame.setVisible(true);
  }

  void sendGetRequest(String strReq) {
    if (strReq.endsWith("0")) {
      strReq = strReq.substring(0, strReq.lastIndexOf("."));
      outputText("Request : Get  " + strReq + "\n");
    } else if (strReq.endsWith("*")) {
      strReq = strReq.substring(0, strReq.lastIndexOf("*") - 1);
      outputText("Request : Walk " + strReq + "\n");
    } else if (strReq.endsWith(")")) {
      strReq = strReq.substring(0, strReq.indexOf("(") - 1);
      outputText("Request : Walk " + strReq + "\n");
    } else {
      outputError("Error in request. Please check the OID.");
    }

    final String strReqFin=strReq;
    Thread t=new Thread(new Runnable() {
      public void run() {
        snmp.snmpRequestGet(strReqFin);
      }
    });
    t.start();
  }


  void outputText(String s) {
    if (output != null) {
      output.println(s);
    }
    else {
      System.out.println(s);
    }
  }

  void outputError(String e) {
    if (output != null) {
      output.printError(e);
    }
    else {
      System.out.println(e);

    }
  }

  private void jbInit() throws Exception {
  }
} // END OF CLASS *****************************************
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.