import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.text.AttributeSet;
import javax.swing.text.Element;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.DefaultTreeSelectionModel;
import javax.swing.tree.TreeSelectionModel;
import org.apache.xerces.parsers.DOMParser;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/*
* Created on 15.07.2005
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author Manuel
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class Formular extends JFrame implements ActionListener, TreeSelectionListener{
private static DefaultMutableTreeNode treeNode;
private Box mainbox;
private static JPanel contentPane = new JPanel();
private static DefaultMutableTreeNode treeRoot = new DefaultMutableTreeNode("Click File -> New/Load");
private static DefaultTreeModel model = new DefaultTreeModel(treeRoot);
private static JTree tree = new JTree(model);
private static JSplitPane splitPane;
private static Node node;
private static JPanel panel = new JPanel();
private static JMenuBar menuBar = new JMenuBar();
private JMenuItem makeNew = new JMenuItem ("New");
private JMenuItem load = new JMenuItem ("Load");
private JMenuItem save = new JMenuItem ("Save");
private JMenuItem exit = new JMenuItem ("Exit");
private JMenu file = new JMenu ("File");
private File datei;
public Formular() {
setContentPane(contentPane);
setJMenuBar(menuBar);
setTitle( "Formular-Plugin" );
setBackground( Color.blue );
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TreeSelectionModel tsm = new DefaultTreeSelectionModel();
tsm.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); //Einfachselektion aktivieren
tree.setSelectionModel(tsm);
tree.setCellRenderer(new XMLDocumentTreeRenderer());
mainbox = new Box(BoxLayout.Y_AXIS);
panel.add(mainbox);
load.setToolTipText("loading a new file");
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// int selRow = tree.getRowForLocation(e.getX(), e.getY());
// TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
// if(selRow != -1) {
if(e.getClickCount() == 1) {
System.out.println("1 klicked");
}
else if(e.getClickCount() == 2) {
System.out.println("2 klicked");
//}
}
}
};
tree.addMouseListener(ml);
tree.addTreeSelectionListener(this);
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
file.add(makeNew);
file.add(load);
file.add(save);
file.add(exit);
menuBar.add(file);
exit.addActionListener(this);
makeNew.addActionListener(this);
save.addActionListener(this);
load.addActionListener(this);
try {
JFrame frame = new JFrame ("Formular-Plugin");
frame.setContentPane(contentPane);
frame.setJMenuBar(menuBar);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing (WindowEvent we){
System.exit(0);
}});
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(splitPane);
splitPane.setLeftComponent(new JScrollPane(tree));
splitPane.setRightComponent(new JScrollPane(panel));
//contentPane.setFocusable(false);
splitPane.setDividerLocation(350);
splitPane.setPreferredSize(new Dimension(685, 510));
frame.pack();
frame.setSize(700, 600);
frame.setLocation(100, 100);
frame.setVisible(true);
} catch (Exception e){
}
}
public static void xmlToTree (Node node, DefaultMutableTreeNode treeNode){
DefaultMutableTreeNode helperTreeNode;
DefaultMutableTreeNode helperTreeNode2;
DefaultMutableTreeNode helperTreeNode3;
switch (node.getNodeType()){
case Node.DOCUMENT_NODE:
Document doc = (Document)node ;
xmlToTree(doc.getDocumentElement() , treeNode);
break;
case Node.ELEMENT_NODE:
String name = node.getNodeName();
helperTreeNode = new DefaultMutableTreeNode(name);
treeNode.add(helperTreeNode);
NamedNodeMap attributes = node.getAttributes();
for (int i = 0; i < attributes.getLength(); i++){
Node current = attributes.item(i);
helperTreeNode2 = new DefaultMutableTreeNode(current.getNodeName()+ "=" + "\"" + current.getNodeValue() + "\"" );
helperTreeNode.add(helperTreeNode2);
}
NodeList children = node.getChildNodes();
if (children.getLength() != 0){
for (int i = 0; i < children.getLength(); i++){
xmlToTree(children.item(i), helperTreeNode); //hier wird die Methode rekursiv aufgerufen
}
}
break;
case Node.COMMENT_NODE:
case Node.TEXT_NODE:
case Node.CDATA_SECTION_NODE:
String nodeValue = node.getNodeValue();
nodeValue = nodeValue.trim();
if (nodeValue.length() != 0){
helperTreeNode3 = new DefaultMutableTreeNode(nodeValue);
treeNode.add(helperTreeNode3);
}
break;
}
}
public void performParsing(String uri){
treeRoot = new DefaultMutableTreeNode("?xml version=\"1.0\" encoding=\"ISO-8859-1\"?");
try {
DOMParser parser = new DOMParser();
parser.setFeature("http://xml.org/sax/features/validation", true);
parser.setFeature("http://apache.org/xml/features/validation/schema", true);
parser.parse(uri);
Document doc = parser.getDocument();
xmlToTree(doc, treeRoot);
}
catch (Exception e){
System.out.println("Parsing Error: " + e.getMessage());
}
model = new DefaultTreeModel(treeRoot);
tree = new JTree(model);
tree.addTreeSelectionListener(this);
tree.setRootVisible(true);
TreeSelectionModel tsm = new DefaultTreeSelectionModel();
tsm.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.setSelectionModel(tsm);
splitPane.setLeftComponent(new JScrollPane(tree));
splitPane.setDividerLocation(350);
tree.setEditable(true);
}
public void loading (File datei){
JFileChooser fileChooser = new JFileChooser();
int returnVal = fileChooser.showOpenDialog(this);
if(returnVal == JFileChooser.APPROVE_OPTION){
datei = fileChooser.getSelectedFile();
String pfad = datei.getAbsolutePath();
//performParsing(pfad);
int check = JOptionPane.showOptionDialog(tree, "File " + "\"" + datei.getName() + "\"" + " is not wellformed! Open anyway? "
, "File Exists", JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE, null, new String[] {
"Yes", "Ignore", "Cancel"
},"");
switch (check){
case 0: // Yes
performParsing(pfad);
break;
case 1: // Ignore
return;
default: // Cancel
return;
}
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == load)
loading(datei);
}
public static void main(String [] args) {
Formular formular = new Formular();
}
/* (non-Javadoc)
* @see javax.swing.event.TreeSelectionListener#valueChanged(javax.swing.event.TreeSelectionEvent)
*/
/* public void valueChanged(TreeSelectionEvent event) {
TreePath tp = event.getPath();
if (tp != null){
System.out.println(" Selektiert: " + tp.toString());
JLabel lab1 = new JLabel(((JTree)event.getSource()).getSelectionPath().toString());
JTextField text = new JTextField("hallo", 10);
Box upper = new Box(BoxLayout.X_AXIS);
upper.add(lab1);
upper.add(text);
mainbox.add(upper);
} else {
System.out.println(" Kein Element selektiert");
}
}*/
public void valueChanged (TreeSelectionEvent event){
DefaultMutableTreeNode node = (DefaultMutableTreeNode) ((JTree) event.getSource())
.getLastSelectedPathComponent();
if(node == null)
return;
try {
Object user = node.getUserObject();
// if(user instanceof Element){
System.out.println(user);
Object e = user;
//AttributeSet name = e.getAttributes();
String name = (String) ((AttributeSet) e).getAttribute("name");
System.out.println(name);
String type = (String) ((AttributeSet) e).getAttribute("type");
//System.out.println(type);
JLabel lab = new JLabel(name);
Box upper = new Box(BoxLayout.X_AXIS);
upper.add(lab);
JComponent comp = null;
if(type.equals("xsd:element")){
comp = new JTextField("hallo",20);
upper.add(comp);
upper.add(lab);
mainbox.add(upper);
}else if(type.equals("xsd:attribute")) {
comp = new JCheckBox();
upper.add(comp);
upper.add(lab);
mainbox.add(upper);
}
} catch (Exception e){
System.out.println("da lief aber was gewaltig schief!");
}
}
// }
}