⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mibtreebuilder.java

📁 很不错java的SNMP应用例子
💻 JAVA
字号:
/* * MibTreeBuilder.java * * This work is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2 of the License, * or (at your option) any later version. * * This work is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * * Copyright (c) 2004 Per Cederberg. All rights reserved. */package mibblebrowser;import java.awt.event.MouseEvent;import java.io.File;import java.io.IOException;import java.util.Enumeration;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.swing.JTree;import javax.swing.tree.TreeModel;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreePath;import javax.swing.tree.TreeSelectionModel;import net.percederberg.mibble.Mib;import net.percederberg.mibble.MibLoader;import net.percederberg.mibble.MibLoaderException;import net.percederberg.mibble.MibSymbol;import net.percederberg.mibble.MibValue;import net.percederberg.mibble.MibValueSymbol;import net.percederberg.mibble.value.ObjectIdentifierValue;/** * Handles loading MIB files and creating a JTree representation of * the parsed MIB. A singleton class. * * @author   Watsh Rajneesh * @author   Per Cederberg, <per at percederberg dot net> * @version  2.5 * @since    2.3 */public class MibTreeBuilder {    /**     * The single class instance.     */    private static MibTreeBuilder instance = null;    /**     * The root tree component. This acts as a placeholder for     * attaching multiple MIB sub-trees.     */    private JTree mibTree = null;    /**     * The MIB node map. This is indexed by the MIB symbol.     */    private HashMap nodes = new HashMap();    /**     * Returns the single instance of this class.     *     * @return the one and only instance     */    public static MibTreeBuilder getInstance() {        if (instance == null) {            instance = new MibTreeBuilder();        }        return instance;    }    /**     * Creates a new MIB tree builder.     */    private MibTreeBuilder() {        int  mode = TreeSelectionModel.SINGLE_TREE_SELECTION;        mibTree = new MibTree();        mibTree.setToolTipText("");        mibTree.getSelectionModel().setSelectionMode(mode);        mibTree.setRootVisible(false);    }    /**     * Returns the MIB tree component.     *     * @return the MIB tree component     */    public JTree getTree() {        return mibTree;    }    /**     * Returns the MIB node corresponding to the specified symbol.     *     * @param symbol         the symbol to search for     *     * @return the MIB node, or     *         null if none found     */    public MibNode getNode(MibSymbol symbol) {        return (MibNode) nodes.get(symbol);    }    /**     * Loads a MIB file.     *     * @param file           the file to load     *     * @return the MIB file loaded     *     * @throws IOException if the MIB file couldn't be found in the     *             MIB search path     * @throws MibLoaderException if the MIB file couldn't be loaded     *             correctly     */    public Mib loadMib(File file)        throws IOException, MibLoaderException {        MibLoader  loader = new MibLoader();        loader.addDir(file.getParentFile());        return loader.load(file);    }    /**     * Adds a MIB to the MIB tree.     *     * @param mib            the MIB to add     */    public void addMib(Mib mib) {        Iterator   iter = mib.getAllSymbols().iterator();        MibSymbol  symbol;        MibNode    root;        MibNode    node;        JTree      valueTree;        // Create value sub tree        node = new MibNode("VALUES", null);        valueTree = new JTree(node);        while (iter.hasNext()) {            symbol = (MibSymbol) iter.next();            addSymbol(valueTree.getModel(), symbol);        }        // TODO: create TYPES sub tree        // Add sub tree root to MIB tree        root = (MibNode) mibTree.getModel().getRoot();        node = new MibNode(mib.getName(), null);        node.add((MibNode) valueTree.getModel().getRoot());        root.add(node);    }    /**     * Adds a MIB symbol to a MIB tree model.     *     * @param model          the MIB tree model     * @param symbol         the MIB symbol     *     * @see #addToTree     */    private void addSymbol(TreeModel model, MibSymbol symbol) {        MibValue               value;        ObjectIdentifierValue  oid;        if (symbol instanceof MibValueSymbol) {            value = ((MibValueSymbol) symbol).getValue();            if (value instanceof ObjectIdentifierValue) {                oid = (ObjectIdentifierValue) value;                addToTree(model, oid);            }        }    }    /**     * Adds an object identifier value to a MIB tree model.     *     * @param model          the MIB tree model     * @param oid            the object identifier value     *     * @return the MIB tree node added     */    private MibNode addToTree(TreeModel model, ObjectIdentifierValue oid) {        MibNode  parent;        MibNode  node;        String   name;        // Add parent node to tree (if needed)        if (hasParent(oid)) {            parent = addToTree(model, oid.getParent());        } else {            parent = (MibNode) model.getRoot();        }        // Check if node already added        for (int i = 0; i < model.getChildCount(parent); i++) {            node = (MibNode) model.getChild(parent, i);            if (node.getValue().equals(oid)) {                return node;            }        }        // Create new node        name = oid.getName() + " (" + oid.getValue() + ")";        node = new MibNode(name, oid);        parent.add(node);        nodes.put(oid.getSymbol(), node);        return node;    }    /**     * Checks if the specified object identifier has a parent.     *     * @param oid            the object identifier to check     *     * @return true if the object identifier has a parent, or     *         false otherwise     */    private boolean hasParent(ObjectIdentifierValue oid) {        ObjectIdentifierValue  parent = oid.getParent();        return oid.getSymbol() != null            && oid.getSymbol().getMib() != null            && parent != null            && parent.getSymbol() != null            && parent.getSymbol().getMib() != null            && parent.getSymbol().getMib().equals(oid.getSymbol().getMib());    }    /**     * Unloads a MIB.     *     * @param mibName        the name of the MIB to unload     *     * @return true on success, or     *         false otherwise     */    public boolean unloadMib(String mibName) {        DefaultTreeModel model = (DefaultTreeModel) mibTree.getModel();        MibNode tempNode = null;        MibNode root = (MibNode) model.getRoot();        Enumeration e = root.preorderEnumeration();        while (e.hasMoreElements()) {            tempNode = (MibNode) e.nextElement();            if (tempNode.getValue() == null &&                tempNode.getName().equals(mibName)) {                removeNodes(tempNode);                model.removeNodeFromParent(tempNode);                return true;            }        }        return false;    }    /**     * Removes descendant nodes from the node hash.     *     * @param root           the root node     */    private void removeNodes(MibNode root) {        Iterator   iter = nodes.entrySet().iterator();        Map.Entry  entry;        MibNode    node;        while (iter.hasNext()) {            entry = (Map.Entry) iter.next();            node = (MibNode) entry.getValue();            if (node.isNodeDescendant(root)) {                iter.remove();            }        }    }    /**     * A MIB tree component.     */    private class MibTree extends JTree {        /**         * Creates a new MIB tree.         */        public MibTree() {            super(new MibNode("Mibble Browser", null));        }        /**         * Returns the tool tip text for a specified mouse event.         *         * @param e              the mouse event         *         * @return the tool tipe text, or         *         null for none         */        public String getToolTipText(MouseEvent e) {            TreePath  path;            MibNode   node;            if (getRowForLocation(e.getX(), e.getY()) == -1) {                return null;                }            path = getPathForLocation(e.getX(), e.getY());            node = (MibNode) path.getLastPathComponent();            return node.getToolTipText();        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -