Source code: it/rabellino/toska/gui/KeysTree.java
1 package it.rabellino.toska.gui;
2
3 import it.rabellino.toska.ConfigHandler;
4 import it.rabellino.toska.Host;
5 import it.rabellino.toska.Key;
6 import it.rabellino.toska.User;
7 import java.awt.event.MouseEvent;
8 import java.awt.event.MouseListener;
9 import java.util.HashMap;
10 import java.util.Iterator;
11 import java.util.Vector;
12
13 import javax.swing.JPopupMenu;
14 import javax.swing.JTree;
15 import javax.swing.event.TreeSelectionEvent;
16 import javax.swing.event.TreeSelectionListener;
17 import javax.swing.tree.DefaultMutableTreeNode;
18 import javax.swing.tree.DefaultTreeModel;
19 import javax.swing.tree.TreePath;
20 import org.apache.avalon.framework.activity.Initializable;
21 import org.apache.avalon.framework.component.Component;
22 import org.apache.avalon.framework.component.ComponentException;
23 import org.apache.avalon.framework.component.ComponentManager;
24 import org.apache.avalon.framework.component.Composable;
25 import org.apache.avalon.framework.context.Context;
26 import org.apache.avalon.framework.context.ContextException;
27 import org.apache.avalon.framework.context.Contextualizable;
28 import org.apache.avalon.framework.context.DefaultContext;
29 import org.apache.avalon.framework.logger.LogEnabled;
30 import org.apache.avalon.framework.logger.Logger;
31
32 /**
33 * @author <a href="gianugo@apache.org">Gianugo Rabellino</a>
34 *
35 */
36 public class KeysTree
37 extends
38 JTree
39 implements
40 Component,
41 Composable,
42 Contextualizable,
43 Initializable,
44 LogEnabled,
45 TreeSelectionListener,
46 MouseListener {
47
48 public static String ROLE = "it.rabellino.toska.gui.KeysTree";
49
50 private DefaultMutableTreeNode root;
51 private ConfigHandler handler;
52 private KeysAdmin admin;
53 private DefaultContext context;
54 private ComponentManager manager;
55 private Logger logger;
56 private PopupMenuManager popupFactory;
57
58
59 /**
60 * Empty constructor, as per Avalon specs
61 *
62 */
63 public KeysTree() {
64 super(new DefaultMutableTreeNode("Toska"));
65
66 this.putClientProperty("JTree.lineStyle", "Angled");
67 // Shameless hack
68
69 this.root = (DefaultMutableTreeNode)getModel().getRoot();
70 this.addMouseListener(this);
71
72 }
73
74
75 public void populateTree(ConfigHandler handler) {
76 this.handler = handler;
77 root.removeAllChildren();
78
79 logger.debug("Adding \"Keys\" node to root");
80 DefaultMutableTreeNode keysNode = new DefaultMutableTreeNode("Keys");
81 keysNode.setUserObject(new String("Keys"));
82 logger.debug("Adding \"Hosts\" node to root");
83 DefaultMutableTreeNode hostsNode = new DefaultMutableTreeNode("Hosts");
84 hostsNode.setUserObject(new String("Hosts"));
85
86 Iterator keysIterator;
87 if (handler.getKeys() != null) {
88 keysIterator = handler.getKeys().values().iterator();
89 } else {
90 keysIterator = new Vector().iterator();
91 }
92
93 while (keysIterator.hasNext()) {
94 Key userKey = (Key) keysIterator.next();
95
96 DefaultMutableTreeNode userKeyNode = new DefaultMutableTreeNode(userKey);
97 keysNode.add(userKeyNode);
98 }
99
100 Iterator hosts;
101
102 if (handler.getHosts() != null) {
103 hosts = handler.getHosts().values().iterator();
104 } else {
105 hosts = new HashMap().values().iterator();
106 }
107
108 while (hosts.hasNext()) {
109 Host host = (Host) hosts.next();
110 DefaultMutableTreeNode hostNode =
111 new DefaultMutableTreeNode(host);
112
113 Iterator users = host.getUsers().values().iterator();
114 while (users.hasNext()) {
115 User user = (User) users.next();
116 DefaultMutableTreeNode userNode =
117 new DefaultMutableTreeNode(user);
118
119 hostNode.add(userNode);
120
121 Iterator keys = user.getKeys().values().iterator();
122 while (keys.hasNext()) {
123 Key key = (Key) keys.next();
124 if(!key.isDisabled()) {
125 DefaultMutableTreeNode keyNode =
126 new DefaultMutableTreeNode(key);
127 userNode.add(keyNode);
128 }
129
130 }
131 }
132
133 hostsNode.add(hostNode);
134
135 }
136 root.add(keysNode);
137 root.add(hostsNode);
138
139 ((DefaultTreeModel)this.getModel()).nodeStructureChanged(root);
140
141 }
142
143 /**
144 * @see TreeSelectionListener#valueChanged(TreeSelectionEvent)
145 */
146 public void valueChanged(TreeSelectionEvent tse) {
147 DefaultMutableTreeNode node = (DefaultMutableTreeNode)this.getLastSelectedPathComponent();
148
149 Object selected = node.getUserObject();
150
151 if (selected instanceof Host) {
152 Host host = (Host) selected;
153 host.getName();
154 }
155
156 }
157
158 public void mouseReleased(MouseEvent evt) {
159 if (evt.isPopupTrigger()) {
160 int x = evt.getX();
161 int y = evt.getY();
162 TreePath path = getPathForLocation(x, y);
163 DefaultMutableTreeNode currentNode =
164 (DefaultMutableTreeNode)path.getLastPathComponent();
165 //JPopupMenu menu = new JPopupMenu();
166
167
168 JPopupMenu menu = popupFactory.getMenu(currentNode);
169 menu.show(this, x, y);
170
171
172 }
173
174
175 }
176
177 public void mouseClicked(MouseEvent evt) {}
178
179 public void mousePressed(MouseEvent evt) {
180 if (evt.isPopupTrigger()) {
181 int x = evt.getX();
182 int y = evt.getY();
183 TreePath path = getPathForLocation(x, y);
184 DefaultMutableTreeNode currentNode =
185 (DefaultMutableTreeNode)path.getLastPathComponent();
186 //JPopupMenu menu = new JPopupMenu();
187
188
189 JPopupMenu menu = popupFactory.getMenu(currentNode);
190 menu.show(this, x, y);
191
192
193 }
194
195
196 }
197
198 public void mouseEntered(MouseEvent evt) {}
199
200 public void mouseExited(MouseEvent evt) {}
201
202 /**
203 * @see Contextualizable#contextualize(Context)
204 */
205 public void contextualize(Context context) throws ContextException {
206 this.context = (DefaultContext)context;
207 this.context.put(Constants.KEYS_TREE, this);
208 }
209
210 /**
211 * @see Initializable#initialize()
212 */
213 public void initialize() throws Exception {
214 popupFactory = (PopupMenuManager)manager.lookup(PopupMenuManager.ROLE);
215 this.setCellRenderer(new KeysTreeCellRenderer());
216 this.populateTree((ConfigHandler)context.get(Constants.CONFIGHANDLER));
217 }
218
219 /**
220 * @see LogEnabled#enableLogging(Logger)
221 */
222 public void enableLogging(Logger logger) {
223 this.logger = logger;
224 }
225
226 /**
227 * @see Composable#compose(ComponentManager)
228 */
229 public void compose(ComponentManager manager) throws ComponentException {
230 this.manager = manager;
231 }
232
233 }