KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > core > gui > plugin > PluginTree


1 /*
2  * Created on 06.08.2003
3  *
4  * To change the template for this generated file go to
5  * Window>Preferences>Java>Code Generation>Code and Comments
6  */

7 package org.columba.core.gui.plugin;
8
9 import java.util.Enumeration JavaDoc;
10 import java.util.HashMap JavaDoc;
11 import java.util.Map JavaDoc;
12
13 import javax.swing.table.TableColumn JavaDoc;
14 import javax.swing.tree.DefaultTreeModel JavaDoc;
15 import javax.swing.tree.TreeNode JavaDoc;
16 import javax.swing.tree.TreePath JavaDoc;
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 /**
24  * TreeTable component responsible for displaying plugins in a categorized way.
25  *
26  * Additionally shows plugin version information, the plugin description as
27  * tooltip.
28  *
29  * The third column is a checkbox to enable/disable the plugin.
30  *
31  * @author fdietz
32  */

33 public class PluginTree extends TreeTable {
34
35     final static String JavaDoc[] columns = { "Description", "Version", "Enabled" };
36
37     final static String JavaDoc[] CATEGORIES = { "Look and Feel", "Filter",
38             "Filter Action", "Spam", "Mail Import", "Addressbook Import",
39             "Interpreter Language", "Examples", "Uncategorized" };
40
41     protected Map JavaDoc map;
42
43     protected PluginTreeTableModel model;
44
45     /**
46      *
47      */

48     public PluginTree() {
49         super();
50
51         map = new HashMap JavaDoc();
52
53         model = new PluginTreeTableModel(columns);
54         model.setTree((Tree) getTree());
55
56         // ((DefaultTreeModel)
57
// model.getTree().getModel()).setAsksAllowsChildren(true);
58

59         initTree();
60
61         setModel(model);
62
63         getTree().setCellRenderer(new DescriptionTreeRenderer());
64
65         // make "version" column fixed size
66
TableColumn JavaDoc tc = getColumn(columns[1]);
67         tc.setCellRenderer(new VersionRenderer());
68         tc.setMaxWidth(80);
69         tc.setMinWidth(80);
70
71         // make "enabled" column fixed size
72
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         // plugin wasn't correctly loaded
83
if (metadata == null) {
84             return;
85         }
86
87         String JavaDoc category = metadata.getCategory();
88
89         if (category == null) {
90             // this plugin doesn't define a category to which it belongs
91
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             // unknown category found
109
// -> just add this plugin to "Uncategorized"
110
category = "Uncategorized";
111             node = (PluginNode) map.get(category);
112         }
113
114         // add node
115
node.add(childNode);
116
117         // notify tree model
118
((DefaultTreeModel JavaDoc) getTree().getModel()).nodeStructureChanged(node);
119
120         // make new node visible
121
getTree().expandPath(new TreePath JavaDoc(childNode));
122
123     }
124
125     public void initTree() {
126         PluginNode root = new PluginNode();
127         root.setId("root");
128
129         initCategories(root);
130
131         Enumeration JavaDoc 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 JavaDoc 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 JavaDoc parent = node.getParent();
156
157         // notify tree
158
node.removeFromParent();
159
160         // update tree model
161
((DefaultTreeModel JavaDoc) getTree().getModel()).nodeStructureChanged(parent);
162
163     }
164 }
Popular Tags