package org.trade.ui.base;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Image;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreeSelectionModel;
import org.trade.core.xml.DOMParserSaveEncoding;
import org.w3c.dom.Document;
public class SimpleXMLTreeViewPanel extends BasePanel {
private static final long serialVersionUID = -6919104650081619931L;
/** Default parser name. */
static final String DEFAULT_PARSER_NAME = "org.apache.xerces.parsers.DOMParser";
static int WARNING = 0;
static int ERROR = 1;
static int FATAL_ERROR = 2;
static final String title = "TreeViewer";
static final String openString = "Open";
static final String quitString = "Quit";
static final String reloadString = "Reload current XML file";
static final String expandString = "Expand Tree";
static final String collapseString = "Collapse Tree";
//
// Data
//
// ErrorStorer ef = null;
String fname = null;
// DOMTree m_tree = null;
Vector<String> textLine = null;
// DOMParserSaveEncoding parser = null;
Image openFolder = null;
Image closedFolder = null;
Image leafImage = null;
BorderLayout borderLayout1 = new BorderLayout();
// JTextArea messageText = new JTextArea();
/**
* Constructor
*/
public SimpleXMLTreeViewPanel(String xml) {
this.setLayout(borderLayout1);
openFolder = DefaultImages.createOpenFolderImage();
closedFolder = DefaultImages.createClosedFolderImage();
leafImage = DefaultImages.createLeafImage();
this.add(createUI(xml), BorderLayout.CENTER);
}
/**
* create and return the entire UI from the root TreeNode
*/
JComponent createUI(String xml) {
// create the JTree and scroll pane.
final JPanel treePanel = new JPanel(new BorderLayout());
final DOMTree m_tree = new DOMTree(this);
m_tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
// Listen for when the selection changes, call nodeSelected(node)
m_tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
// nodeSelected(node, m_tree);
}
});
m_tree.setRowHeight(18);
m_tree.setFont(new Font("dialog", Font.PLAIN, 12));
treePanel.add(new JScrollPane(m_tree) {
/**
*
*/
private static final long serialVersionUID = -8726326914798956438L;
@Override
public Dimension getPreferredSize() {
final Dimension size = SimpleXMLTreeViewPanel.this.getSize();
return new Dimension(size.width / 2, (size.height * 3) / 5);
}
@Override
public Dimension getMinimumSize() {
return new Dimension(100, 10);
}
}, BorderLayout.CENTER);
treePanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("Tree View"),
BorderFactory.createEmptyBorder(4, 4, 4, 4)));
// refreshUI loads everthything !
refreshUI(xml, m_tree);
return treePanel;
}
public void doOpen(String xml) {
// refreshUI(xml);
}
/**
* refreshUI is called when we have a new filename to parse.
*/
void refreshUI(String xml, DOMTree m_tree) {
if ((xml == null) || xml.equals("")) {
setErrorMessage("Error", "No input XML specified \n");
return;
}
final Document newRoot = getRoot(xml);
if (newRoot == null) {
setErrorMessage("Error", "Unable to get new DOM Tree \n");
return;
}
m_tree.setDocument(newRoot);
}
/**
* Invoke the Parser on fname and return the root TreeNode.
*/
public Document getRoot(String xml) {
if ((xml == null) || xml.equals("")) {
setErrorMessage("Error:", " Invalid XML document could not get ROOT");
return null;
}
try {
//
// Reset the Error Storage and handling
//
final DOMParserSaveEncoding parser = new DOMParserSaveEncoding();
final Document document = parser.parse(xml);
/***/
return document;
} catch (final Exception e) {
setErrorMessage("Error: Invalid XML document could not get ROOT", e);
}
return null;
}
public void setErrorMessage(String title, Throwable t) {
JOptionPane.showMessageDialog(this.getRootPane(), t.getMessage(), title, JOptionPane.ERROR_MESSAGE);
}
public void setErrorMessage(String title, String message) {
JOptionPane.showMessageDialog(this.getRootPane(), message, title, JOptionPane.ERROR_MESSAGE);
}
public void doWindowOpen() {
}
public void doWindowClose() {
}
public void doWindowActivated() {
}
public boolean doWindowDeActivated() {
return true;
}
}