//
// MappingWindow.java
//
/*
OME Metadata Notes application for exploration and editing of OME-XML and
OME-TIFF metadata. Copyright (C) 2006-@year@ Christopher Peterson.
This program 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 program 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
*/
package loci.ome.notes.editor;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Enumeration;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
/**
* Window for choosing an OME-XML mapping.
*
* <dl><dt><b>Source code:</b></dt>
* <dd><a href="http://trac.openmicroscopy.org.uk/ome/browser/bioformats.git/components/legacy/ome-notes/src/loci/ome/notes/editor/MappingWindow.java">Trac</a>,
* <a href="http://git.openmicroscopy.org/?p=bioformats.git;a=blob;f=components/legacy/ome-notes/src/loci/ome/notes/editor/MappingWindow.java;hb=HEAD">Gitweb</a></dd></dl>
*/
public class MappingWindow extends JPopupMenu implements ActionListener {
// -- Constants --
private static final CellConstraints CC = new CellConstraints();
// -- Fields --
protected TemplateEditor parent;
protected boolean nameMap;
protected JTabbedPane tabPane;
// -- Constructor --
public MappingWindow(TemplateEditor parent, boolean nameMap) {
super();
this.parent = parent;
this.nameMap = nameMap;
tabPane = new JTabbedPane();
// set up search tab
/* TODO
FormLayout layout = new FormLayout("pref,pref:grow,pref,pref:grow,pref",
"pref,pref:grow,pref,pref:grow,pref");
JPanel p = new JPanel(layout);
JTextField searchField = new JTextField();
p.add(searchField, CC.xy(2, 2));
JButton search = new JButton("Search");
search.setActionCommand("search");
search.addActionListener(this);
p.add(search, CC.xy(4, 2));
JButton ok = new JButton("OK");
ok.setActionCommand("chooseMapping");
ok.addActionListener(parent);
p.add(ok, CC.xywh(2, 4, 3, 1));
tabPane.add(p, "Search");
*/
// set up schema tab
/* TODO
layout = new FormLayout("pref,pref:grow,pref",
"pref,pref:grow,pref,pref:grow,pref");
p = new JPanel(layout);
JPanel schemaPanel = new JPanel();
JScrollPane scroll = new JScrollPane();
JTree tree = new JTree(new DefaultMutableTreeNode());
try {
InputStream is = getClass().getResourceAsStream("schema.ome");
byte[] b = new byte[is.available()];
is.read(b);
OMENode node = new OMENode(new String(b));
Document doc = node.getOMEDocument(false);
DefaultMutableTreeNode treeRoot = new DefaultMutableTreeNode();
((DefaultTreeModel) tree.getModel()).setRoot(treeRoot);
if (doc != null) {
buildTree(doc.getDocumentElement(), treeRoot);
expandTree(tree, treeRoot);
}
}
catch (Exception e) {
((TemplateEditor) getParent()).error("Failed to load schema file", e);
}
tree.setPreferredSize(new Dimension(512, 256));
schemaPanel.add(tree);
scroll.add(schemaPanel);
p.add(scroll, CC.xy(2, 2));
ok = new JButton("OK");
ok.setActionCommand("chooseMapping");
ok.addActionListener(parent);
p.add(ok, CC.xy(2, 4));
tabPane.add(p, "Choose from schema");
*/
// set up custom mapping tab
FormLayout layout = new FormLayout("pref,pref:grow,pref,pref:grow,pref",
"pref,pref:grow,pref,pref:grow,pref,pref:grow,pref");
JPanel p = new JPanel(layout);
//JLabel msg =
// new JLabel("A mapping is a colon-separated path to an attribute.");
//p.add(msg, CC.xywh(2, 2, 3, 1));
JLabel label = new JLabel("Mapping:");
p.add(label, CC.xy(2, 4));
JTextField field = new JTextField();
p.add(field, CC.xy(4, 4));
JButton ok = new JButton("OK");
ok.setActionCommand("chooseMapping");
ok.addActionListener(parent);
p.add(ok, CC.xy(3, 6));
tabPane.add(p, "Custom");
add(tabPane);
setPreferredSize(new Dimension(512, 256));
pack();
}
// -- ActionListener API methods --
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
}
// -- Helper methods --
private void buildTree(Element el, DefaultMutableTreeNode node) {
DefaultMutableTreeNode child =
new DefaultMutableTreeNode(new ElementWrapper(el));
node.add(child);
NodeList nodeList = el.getChildNodes();
for (int i=0; i<nodeList.getLength(); i++) {
Node n = (Node) nodeList.item(i);
if (n instanceof Element) buildTree((Element) n, child);
}
}
private void expandTree(JTree tree, DefaultMutableTreeNode node) {
if (node.isLeaf()) return;
tree.expandPath(new TreePath(node.getPath()));
Enumeration e = node.children();
while (e.hasMoreElements()) {
expandTree(tree, (DefaultMutableTreeNode) e.nextElement());
}
}
// -- Helper class --
public class ElementWrapper {
public Element el;
public ElementWrapper(Element el) { this.el = el; }
public String toString() { return el == null ? "null" : el.getTagName(); }
}
}