annotate java-genomics-toolkit/gui/edu/unc/genomics/ToolsTreeModel.java @ 0:1daf3026d231

Upload alpha version
author timpalpant
date Mon, 13 Feb 2012 21:55:55 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
1 package edu.unc.genomics;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
2
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
3 import java.io.IOException;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
4 import java.nio.file.Files;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
5 import java.nio.file.Path;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
6 import java.nio.file.Paths;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
7
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
8 import javax.swing.tree.DefaultMutableTreeNode;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
9 import javax.swing.tree.DefaultTreeModel;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
10 import javax.xml.parsers.DocumentBuilder;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
11 import javax.xml.parsers.DocumentBuilderFactory;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
12 import javax.xml.parsers.ParserConfigurationException;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
13
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
14 import org.apache.log4j.Logger;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
15 import org.w3c.dom.Document;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
16 import org.w3c.dom.Node;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
17 import org.w3c.dom.NodeList;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
18 import org.xml.sax.SAXException;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
19
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
20 /**
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
21 * Model for the ToolsTree
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
22 * Essentially just a DefaultTreeModel, but provides methods for
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
23 * loading the available tools from a configuration file
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
24 *
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
25 * @author timpalpant
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
26 *
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
27 */
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
28 public class ToolsTreeModel extends DefaultTreeModel {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
29
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
30 public static final Path DEFAULT_CONFIGURATION_FILE = Paths.get("toolConf.xml");
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
31
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
32 private static final Logger log = Logger.getLogger(ToolsTreeModel.class);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
33
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
34 private static final long serialVersionUID = -6587614270922489960L;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
35
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
36 public ToolsTreeModel() {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
37 super(new DefaultMutableTreeNode("Tools"));
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
38 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
39
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
40 public static ToolsTreeModel loadDefaultConfig() throws ClassNotFoundException, ParserConfigurationException, SAXException, IOException {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
41 return loadConfig(ResourceManager.getResourceDirectory().resolve(DEFAULT_CONFIGURATION_FILE));
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
42 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
43
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
44 public static ToolsTreeModel loadConfig(Path p) throws ParserConfigurationException, SAXException, IOException, ClassNotFoundException {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
45 ToolsTreeModel model = new ToolsTreeModel();
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
46 DefaultMutableTreeNode root = (DefaultMutableTreeNode) model.getRoot();
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
47
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
48 // Populate the TreeModel with the tools in the default configuration file
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
49 log.debug("Loading tools from: " + DEFAULT_CONFIGURATION_FILE.toAbsolutePath());
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
50 DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
51 DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
52 Document doc = dBuilder.parse(p.toFile());
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
53
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
54 // Iterate over the sections
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
55 NodeList sections = doc.getElementsByTagName("section");
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
56 log.debug("Found "+sections.getLength()+" sections");
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
57 for (int i = 0; i < sections.getLength(); i++) {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
58 Node section = sections.item(i);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
59 String sectionName = section.getAttributes().getNamedItem("name").getNodeValue();
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
60 log.debug("Loading section: " + sectionName);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
61 DefaultMutableTreeNode sectionNode = new DefaultMutableTreeNode(sectionName);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
62 root.add(sectionNode);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
63 NodeList tools = section.getChildNodes();
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
64
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
65 // Iterate over the tools in each section
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
66 for (int j = 0; j < tools.getLength(); j++) {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
67 Node tool = tools.item(j);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
68 if (tool.getNodeType() == Node.ELEMENT_NODE && tool.getNodeName().equalsIgnoreCase("tool")) {
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
69 String toolName = tool.getAttributes().getNamedItem("name").getNodeValue();
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
70 log.debug("Loading tool: " + toolName);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
71 String toolClassName = tool.getAttributes().getNamedItem("class").getNodeValue();
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
72 Class<? extends CommandLineTool> toolClass = (Class<? extends CommandLineTool>) Class.forName(toolClassName);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
73 ToolsTreeNode toolNode = new ToolsTreeNode(toolName, toolClass);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
74 sectionNode.add(toolNode);
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
75 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
76 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
77 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
78
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
79 return model;
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
80 }
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
81
1daf3026d231 Upload alpha version
timpalpant
parents:
diff changeset
82 }