public TreeWalkerView(String filename) {
super("TreeWalkerView: "+filename);
try {
parser = new DOMParser();
parser.setFeature("http://apache.org/xml/features/dom/defer-node-expansion", true);
parser.setFeature("http://apache.org/xml/features/continue-after-fatal-error", true);
Errors errors = new Errors();
parser.setErrorHandler(errors);
parser.parse(filename);
document = parser.getDocument();
if (!document.isSupported("Traversal", "2.0")) {
// This cannot happen with the DOMParser...
throw new RuntimeException("This DOM Document does not support Traversal");
}
// jtree UI setup
jtree = new DOMTreeFull((Node)document);
jtree.getSelectionModel().setSelectionMode
(TreeSelectionModel.SINGLE_TREE_SELECTION);
// Listen for when the selection changes, call nodeSelected(node)
jtree.addTreeSelectionListener(
new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
TreePath path = (TreePath)e.getPath();
TreeNode treeNode = (TreeNode)path.getLastPathComponent();
if(jtree.getSelectionModel().isPathSelected(path))
nodeSelected(treeNode);
}
}
);
//
// controls
//
BorderLayout borderLayout = new BorderLayout();
//iterate panel
JPanel iteratePanel = new JPanel();
iteratePanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Document Order Traversal"),
BorderFactory.createEmptyBorder(4, 4, 4, 4)
));
prevButton = new JButton("Previous");
iteratePanel.add(prevButton);
prevButton.addActionListener(this);
nextButton = new JButton("Next");
iteratePanel.add(nextButton);
nextButton.addActionListener(this);
//walkerPanel
JPanel walkerPanel = new JPanel();
walkerPanel.setLayout(new BorderLayout());
walkerPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Walk"),
BorderFactory.createEmptyBorder(4, 4, 4, 4)
));
parentButton = new JButton("Parent");
walkerPanel.add(parentButton, BorderLayout.NORTH);
parentButton.addActionListener(this);
JPanel childPanel = new JPanel();
firstChildButton = new JButton("First Child");
childPanel.add(firstChildButton);
firstChildButton.addActionListener(this);
lastChildButton = new JButton("Last Child");
childPanel.add(lastChildButton);
lastChildButton.addActionListener(this);
walkerPanel.add(childPanel, BorderLayout.SOUTH);
nextSiblingButton = new JButton("Next Sibling");
walkerPanel.add(nextSiblingButton, BorderLayout.EAST);
nextSiblingButton.addActionListener(this);
previousSiblingButton = new JButton("Previous Sibling");
walkerPanel.add(previousSiblingButton, BorderLayout.WEST);
previousSiblingButton.addActionListener(this);
//DOM tree panel
JPanel domPanel = new JPanel();
domPanel.setLayout(new BorderLayout());
domPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Selected Node"),
BorderFactory.createEmptyBorder(4, 4, 4, 4)
));
JPanel buttonPanel = new JPanel();
currentButton = new JButton("Current");
buttonPanel.add(currentButton);
currentButton.addActionListener(this);
removeButton = new JButton("Remove");
buttonPanel.add(removeButton);
removeButton.addActionListener(this);
addButton = new JButton("Append Text");
addText = new JTextField(10);
buttonPanel.add(addButton);
domPanel.add(buttonPanel, BorderLayout.NORTH);
domPanel.add(addText, BorderLayout.CENTER);
addButton.addActionListener(this);
// treeWalker settings
JPanel settingsPanel = new JPanel();
settingsPanel.setLayout(new BorderLayout());
settingsPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Filter Settings"),
BorderFactory.createEmptyBorder(4, 4, 4, 4)
));
JPanel treeWalkerPanel = new JPanel();
treeWalkerPanel.setLayout(new BorderLayout());
newIterator = new JButton("createTreeWalker");
treeWalkerPanel.add(newIterator, BorderLayout.NORTH);
expandERs = new JCheckBox("expandEntityReferences");
expandERs.setSelected(true);
treeWalkerPanel.add(expandERs, BorderLayout.SOUTH);
settingsPanel.add(treeWalkerPanel, BorderLayout.NORTH);
newIterator.addActionListener(this);
JPanel whatPanel = new JPanel();
whatPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("whatToShow"),
BorderFactory.createEmptyBorder(0, 0, 0, 0)
));
whatToShow = new JList(whatArray);
JScrollPane whatScroll =
new JScrollPane(whatToShow) {
private static final long serialVersionUID = 3545240236637305138L;
public Dimension getPreferredSize(){
return new Dimension(200, 65 );
}
};
whatPanel.add(whatScroll);
JPanel filterPanel = new JPanel();
filterPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("NodeNameFilter"),
BorderFactory.createEmptyBorder(4, 4, 4, 4)
));
filterPanel.setLayout(new BorderLayout());
match = new JCheckBox("match/ignore node name", true);
nameFilter = new JTextField(10);
filterPanel.add(match, BorderLayout.NORTH);
filterPanel.add(nameFilter, BorderLayout.SOUTH);
settingsPanel.add(treeWalkerPanel, BorderLayout.NORTH);
settingsPanel.add(whatPanel, BorderLayout.CENTER);
settingsPanel.add(filterPanel, BorderLayout.SOUTH);
// Listen for when the selection changes, call nodeSelected(node)
whatToShow.addListSelectionListener(
new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
// do nothing on selection...
}
}
);
JPanel controlsPanel = new JPanel(new BorderLayout());
controlsPanel.setFont(new Font("Dialog", Font.PLAIN, 8));
JPanel buttonsPanel = new JPanel(new BorderLayout());
buttonsPanel.add(iteratePanel, BorderLayout.NORTH);
buttonsPanel.add(walkerPanel, BorderLayout.CENTER);
buttonsPanel.add(domPanel, BorderLayout.SOUTH);
controlsPanel.add(buttonsPanel, BorderLayout.NORTH);
controlsPanel.add(settingsPanel, BorderLayout.CENTER);
controlsPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Controls"),
BorderFactory.createEmptyBorder(4, 4, 4, 4)
));
// tree panel
JPanel treePanel = new JPanel(new BorderLayout());
JScrollPane treeScroll = new JScrollPane(jtree) ;
treeScroll.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Tree View"),
BorderFactory.createEmptyBorder(4, 4, 4, 4)
));
// message text UI setup
messageText = new JTextArea(3,5);
JPanel messagePanel = new JPanel(new BorderLayout());
messageScroll = new JScrollPane(messageText);
messagePanel.add(messageScroll);
messagePanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Messages"),
BorderFactory.createEmptyBorder(4, 4, 4, 4)
));
JPanel mainPanel = new JPanel();
mainPanel.setLayout(new BorderLayout());
mainPanel.add(controlsPanel, BorderLayout.EAST);
mainPanel.add(treeScroll, BorderLayout.CENTER);
mainPanel.add(messagePanel, BorderLayout.SOUTH);
getContentPane().add(mainPanel);
Hashtable errorNodes = errors.getErrorNodes();
Enumeration elements = errorNodes.elements();
while (elements.hasMoreElements()) {
//*** append errors to messageText
messageText.append( (String)elements.nextElement());
}
boolean expand = expandERs.isSelected();
treeWalker = ((DocumentTraversal)document).
createTreeWalker(
document,
NodeFilter.SHOW_ALL,
new NameNodeFilter(),
expand);
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
|