/*
* 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 net.percederberg.mibble.browser;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);
}
* 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 net.percederberg.mibble.browser;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);
}
解决方案 »
- 使用Struts 2 在Action中返回josn对象时发生如下错误
- 单点登录
- MYSQL hibernate3 SQL 别名问题
- 关于struts里面的调用问题
- 为什么我数据库里的数据在WEB页面上显示的是问号呢?
- hibernate manytomany问题,请大家帮我看看.
- 最近公司的一个项目要用到工作流,请问有没有对这方面很了解的朋友?
- 关于Java的图像处理问题,高分求解!
- 如何在windows2000下安装apache服务器?
- java中有没有读写profile的api.高分
- java 查询sql server 只有英文时没错,一旦字段中包括英文和数字是 不能查询
- 请问Hibernian分页查询问题
/**
* 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();
}
}
}主要的代码如上所示,怎么能将这个转换成xml形式的tree
谢谢