1 7 package org.columba.core.gui.plugin; 8 9 import java.util.Enumeration ; 10 import java.util.HashMap ; 11 import java.util.Map ; 12 13 import javax.swing.table.TableColumn ; 14 import javax.swing.tree.DefaultTreeModel ; 15 import javax.swing.tree.TreeNode ; 16 import javax.swing.tree.TreePath ; 17 18 import org.columba.api.plugin.PluginMetadata; 19 import org.columba.core.plugin.PluginManager; 20 import org.frapuccino.treetable.Tree; 21 import org.frapuccino.treetable.TreeTable; 22 23 33 public class PluginTree extends TreeTable { 34 35 final static String [] columns = { "Description", "Version", "Enabled" }; 36 37 final static String [] CATEGORIES = { "Look and Feel", "Filter", 38 "Filter Action", "Spam", "Mail Import", "Addressbook Import", 39 "Interpreter Language", "Examples", "Uncategorized" }; 40 41 protected Map map; 42 43 protected PluginTreeTableModel model; 44 45 48 public PluginTree() { 49 super(); 50 51 map = new HashMap (); 52 53 model = new PluginTreeTableModel(columns); 54 model.setTree((Tree) getTree()); 55 56 59 initTree(); 60 61 setModel(model); 62 63 getTree().setCellRenderer(new DescriptionTreeRenderer()); 64 65 TableColumn tc = getColumn(columns[1]); 67 tc.setCellRenderer(new VersionRenderer()); 68 tc.setMaxWidth(80); 69 tc.setMinWidth(80); 70 71 tc = getColumn(columns[2]); 73 tc.setCellRenderer(new EnabledRenderer()); 74 tc.setCellEditor(new EnabledEditor()); 75 76 tc.setMaxWidth(80); 77 tc.setMinWidth(80); 78 79 } 80 81 public void addPlugin(PluginMetadata metadata) { 82 if (metadata == null) { 84 return; 85 } 86 87 String category = metadata.getCategory(); 88 89 if (category == null) { 90 category = "Uncategorized"; 92 } 93 94 PluginNode childNode = new PluginNode(); 95 childNode.setCategory(false); 96 childNode.setId(metadata.getId()); 97 childNode.setTooltip(metadata.getDescription()); 98 childNode.setVersion(metadata.getVersion()); 99 100 boolean enabled = metadata.isEnabled(); 101 102 childNode.setEnabled(enabled); 103 childNode.setAllowsChildren(false); 104 105 PluginNode node = (PluginNode) map.get(category); 106 107 if (node == null) { 108 category = "Uncategorized"; 111 node = (PluginNode) map.get(category); 112 } 113 114 node.add(childNode); 116 117 ((DefaultTreeModel ) getTree().getModel()).nodeStructureChanged(node); 119 120 getTree().expandPath(new TreePath (childNode)); 122 123 } 124 125 public void initTree() { 126 PluginNode root = new PluginNode(); 127 root.setId("root"); 128 129 initCategories(root); 130 131 Enumeration e = PluginManager.getInstance() 132 .getPluginMetadataEnumeration(); 133 while (e.hasMoreElements()) { 134 PluginMetadata metadata = (PluginMetadata) e.nextElement(); 135 addPlugin(metadata); 136 } 137 138 model.set(root); 139 } 140 141 protected void initCategories(PluginNode root) { 142 for (int i = 0; i < CATEGORIES.length; i++) { 143 String c = CATEGORIES[i]; 144 PluginNode node = new PluginNode(); 145 node.setAllowsChildren(true); 146 node.setId(c); 147 node.setEnabled(true); 148 node.setCategory(true); 149 root.add(node); 150 map.put(c, node); 151 } 152 } 153 154 public void removePluginNode(PluginNode node) { 155 TreeNode parent = node.getParent(); 156 157 node.removeFromParent(); 159 160 ((DefaultTreeModel ) getTree().getModel()).nodeStructureChanged(parent); 162 163 } 164 } | Popular Tags |