blob: b2bce97d9f3998f7cfdfe28daa42c4ab33506399 [file] [log] [blame]
package org.tianocore.migration;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class MsaTreeEditor extends JPanel {
/**
* Define class Serial Version UID
*/
private static final long serialVersionUID = 3169905938472150649L;
MsaTreeEditor() throws Exception {
rootNode = new DefaultMutableTreeNode("Root Node");
treeModel = new DefaultTreeModel(rootNode);
tree = new JTree(treeModel);
tree.setEditable(true);
tree.getSelectionModel().setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setShowsRootHandles(false);
tree.addMouseListener(mouseadapter);
JScrollPane scrollPane = new JScrollPane(tree);
// scrollPane.setSize(800, 600);
add(scrollPane);
popupmenu = new JPopupMenu();
menuitemadd = new JMenuItem("Add Node");
menuitemdel = new JMenuItem("Delete Node");
menuitemedit = new JMenuItem("Edit Node");
popupmenu.add(menuitemadd);
popupmenu.add(menuitemdel);
popupmenu.add(menuitemedit);
menuitemadd.addActionListener(actionListener);
menuitemdel.addActionListener(actionListener);
menuitemedit.addActionListener(actionListener);
genDomTree(MigrationTool.ui.getFilepath("Select a msa file",
JFileChooser.FILES_AND_DIRECTORIES));
}
// private ModuleSurfaceAreaDocument msadoc;
private JTree tree;
private DefaultMutableTreeNode rootNode;
private DefaultTreeModel treeModel;
private JMenuItem menuitemadd, menuitemdel, menuitemedit;
private JPopupMenu popupmenu;
private MouseAdapter mouseadapter = new MouseAdapter() {
public void mouseReleased(MouseEvent me) {
if (me.getClickCount() == 1
&& SwingUtilities.isRightMouseButton(me)) {
tree.setSelectionPath(tree.getPathForLocation(me.getX(), me
.getY()));
popupmenu.show(tree, me.getX(), me.getY());
}
}
};
private ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == menuitemadd) {
addNode();
} else if (ae.getSource() == menuitemdel) {
delNode();
} else if (ae.getSource() == menuitemedit) {
editNode();
}
}
};
private void editNode() {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) (tree
.getSelectionPath().getLastPathComponent());
Element element = (Element) node.getUserObject();
System.out.println(element.getTextContent());
}
private void delNode() {
treeModel.removeNodeFromParent((DefaultMutableTreeNode) (tree
.getSelectionPath().getLastPathComponent()));
}
private void addNode() {
addNode((DefaultMutableTreeNode) (tree.getSelectionPath()
.getLastPathComponent()), MigrationTool.ui
.getInput("Input Node Name"));
}
private DefaultMutableTreeNode addNode(DefaultMutableTreeNode parentNode,
Object child) {
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(child);
treeModel.insertNodeInto(childNode, parentNode, parentNode
.getChildCount());
tree.scrollPathToVisible(new TreePath(childNode.getPath()));
return childNode;
}
private final void handleNode(Node node, DefaultMutableTreeNode parentNode) {
DefaultMutableTreeNode curNode = null;
if (node.getNodeType() == Node.ELEMENT_NODE) {
System.out.println("elem");
curNode = addNode(parentNode, node);
} else if (node.getNodeType() == Node.DOCUMENT_NODE) {
System.out.println("doc");
curNode = addNode(parentNode, "MsaDocum"); // can Docum be with
// Root Node?
}
NodeList nodelist = node.getChildNodes();
for (int i = 0; i < nodelist.getLength(); i++) {
handleNode(nodelist.item(i), curNode);
}
}
private final void genDomTree(String filename) throws Exception {
DocumentBuilder builder = DocumentBuilderFactory.newInstance()
.newDocumentBuilder();
Document document = builder.parse(filename);
handleNode(document, rootNode);
}
public static final void init() throws Exception {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
JFrame frame = new JFrame("MsaTreeEditor");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MsaTreeEditor mte = new MsaTreeEditor();
mte.setLayout(new GridBagLayout());
mte.setOpaque(true);
frame.setContentPane(mte);
frame.pack();
frame.setVisible(true);
}
}