1 /***
2 * Redistribution and use of this software and associated documentation
3 * ("Software"), with or without modification, are permitted provided
4 * that the following conditions are met:
5 *
6 * 1. Redistributions of source code must retain copyright
7 * statements and notices. Redistributions must also contain a
8 * copy of this document.
9 *
10 * 2. Redistributions in binary form must reproduce the
11 * above copyright notice, this list of conditions and the
12 * following disclaimer in the documentation and/or other
13 * materials provided with the distribution.
14 *
15 * 3. The name "Exolab" must not be used to endorse or promote
16 * products derived from this Software without prior written
17 * permission of Exoffice Technologies. For written permission,
18 * please contact info@exolab.org.
19 *
20 * 4. Products derived from this Software may not be called "Exolab"
21 * nor may "Exolab" appear in their names without prior written
22 * permission of Exoffice Technologies. Exolab is a registered
23 * trademark of Exoffice Technologies.
24 *
25 * 5. Due credit should be given to the Exolab Project
26 * (http://www.exolab.org/).
27 *
28 * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
29 * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
30 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
31 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
32 * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
33 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
37 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
39 * OF THE POSSIBILITY OF SUCH DAMAGE.
40 *
41 * Copyright 2000 (C) Exoffice Technologies Inc. All Rights Reserved.
42 *
43 * $Id: OpenJMSDestination.java,v 1.1 2004/11/26 01:51:15 tanderson Exp $ *
44 * Date Author Changes
45 * $Date jimm Created
46 */
47
48
49 package org.exolab.jms.tools.admin;
50
51 import java.awt.Rectangle;
52 import java.text.SimpleDateFormat;
53
54 import javax.swing.JPopupMenu;
55 import javax.swing.JTree;
56 import javax.swing.tree.DefaultMutableTreeNode;
57 import javax.swing.tree.DefaultTreeModel;
58
59
60 /***
61 * This is the base class for all destination nodes. A destination is either
62 * a queue or a topic.
63 *
64 * @version $Revision: 1.1 $ $Date: 2004/11/26 01:51:15 $
65 * @author <a href="mailto:mourikis@exolab.org">Jim Mourikis</a>
66 */
67 abstract public class OpenJMSDestination extends DefaultMutableTreeNode
68 implements OpenJMSNode {
69
70
71 protected String destinationName_;
72
73
74 protected boolean isLeaf_;
75
76
77 protected boolean isExplored_ = false;
78
79
80 protected JPopupMenu commands_ = null;
81
82
83 protected boolean commandsCreated_ = false;
84
85
86 static protected SimpleDateFormat dateFormat_;
87
88
89 static protected JTree tree_ = null;
90
91
92 /***
93 * The constructor gets its unique name for this queue/topic and a
94 * reference to its parent tree.
95 *
96 * <P>If this is the first queue/topic call, the menu for all queue/topics
97 * is created.
98 *
99 * @param destinationName This queue/topic name.
100 * @param tree The parent tree this queue/topic belongs to.
101 *
102 */
103 public OpenJMSDestination(String destinationName, JTree tree) {
104 destinationName_ = destinationName;
105 isLeaf_ = false;
106 if (!commandsCreated_) {
107 tree_ = tree;
108 createCommands();
109 commandsCreated_ = true;
110 dateFormat_ = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
111 dateFormat_.setLenient(false);
112 }
113 }
114
115
116 /***
117 * Create the menu for all queue/topics and set up the Action events for
118 * each menu item. Since menus are shared, the callbacks called are
119 * static. Once a menu is slected, the slected node can be determined
120 * from the parent object.
121 *
122 */
123 abstract protected void createCommands();
124
125 /***
126 * Children are allowed for all queue/topics
127 *
128 * @return boolean Always returns true.
129 *
130 */
131 public boolean getAllowsChildren() {
132 return true;
133 }
134
135 /***
136 * Queue/Topics are leaves iff they have no consumers registered against
137 * them.
138 *
139 * @return boolean true if no consumers are registered.
140 *
141 */
142 public boolean isLeaf() {
143 return isLeaf_;
144 }
145
146 /***
147 * This node has been right clicked. The locations of this node is given
148 * by the loc object. Use this location to popup the queue/topic message
149 * menu.
150 *
151 * @param The location of this Consumer node.
152 *
153 */
154 public void displayCommands(Rectangle loc) {
155 double x;
156 double y;
157
158 x = loc.getX();
159 y = loc.getY();
160 y += loc.getHeight();
161
162 commands_.show(tree_, (int) x, (int) y);
163 }
164
165 /***
166 * The unique name of this queue/topic.
167 *
168 * @return String the queue/topic name.
169 *
170 */
171 public String toString() {
172 return destinationName_;
173 }
174
175 /***
176 * This node has changed. Inform the parent tree that it needs to be
177 * re-drawn.
178 *
179 */
180 protected void refresh() {
181 DefaultTreeModel model = (DefaultTreeModel) tree_.getModel();
182 model.nodeStructureChanged((DefaultMutableTreeNode) this);
183 }
184
185 /***
186 * Get the particular instance of the queue/topic that has been selected.
187 *
188 * @return OpenJMSDestination the instance selected.
189 *
190 */
191 static protected OpenJMSDestination getInstanceSelected() {
192 Object loc = tree_.getLastSelectedPathComponent();
193 return (OpenJMSDestination) loc;
194 }
195 }