View Javadoc
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-2001,2003 (C) Exoffice Technologies Inc. All Rights Reserved. 42 * 43 * $Id: OpenJMSContext.java,v 1.6 2003/08/17 01:32:23 tanderson Exp $ 44 * 45 * Date Author Changes 46 * $Date jimm Created 47 */ 48 package org.exolab.jms.jndiadministration; 49 50 import java.awt.Rectangle; 51 import java.awt.event.ActionEvent; 52 import java.awt.event.ActionListener; 53 import java.util.Enumeration; 54 55 import javax.naming.Context; 56 import javax.naming.NameClassPair; 57 import javax.naming.NamingException; 58 import javax.swing.JMenuItem; 59 import javax.swing.JOptionPane; 60 import javax.swing.JPopupMenu; 61 import javax.swing.JTree; 62 import javax.swing.tree.DefaultMutableTreeNode; 63 import javax.swing.tree.DefaultTreeModel; 64 65 66 /*** 67 * This class controls all dispay characteristics and menus related to a 68 * queue/topic object. Currently only add/delete, edit and purge is supported. 69 * Add is added from the OpenJMSServer node. Only one menu is created for 70 * all queue/topics since it is modal, it can be shared by all the nodes. 71 * 72 * @version $Revision: 1.6 $ $Date: 2003/08/17 01:32:23 $ 73 * @author <a href="mailto:mourikis@exolab.org">Jim Mourikis</a> 74 * @see AdminMgr 75 */ 76 public class OpenJMSContext extends DefaultMutableTreeNode 77 implements OpenJMSNode { 78 79 // The Context Name 80 private String contextName_; 81 82 // The display name 83 private String displayName_; 84 85 // Does this context have any nodes 86 private boolean isLeaf_; 87 88 // Whether this node has been opened and explored already. 89 private boolean isExplored_ = false; 90 91 // A reference to the tree this node belongs to. 92 static private JTree tree_ = null; 93 94 // A flag indicating if the menu has been created yet. 95 static private boolean commandsCreated_ = false; 96 97 // The popup menu for all contexts 98 static private JPopupMenu commands_ = null; 99 100 101 /*** 102 * The constructor gets its unique name for this context and a 103 * reference to its parent tree. 104 * 105 * <P>If this is the first context call, the menu for all contexts 106 * is created. 107 * 108 * @param contextName This context name. 109 * @param tree The parent tree this context belongs to. 110 * 111 */ 112 public OpenJMSContext(String contextName, String parentName, JTree tree) { 113 if (parentName != null) { 114 contextName_ = parentName + "." + contextName; 115 } else { 116 contextName_ = contextName; 117 } 118 displayName_ = contextName; 119 120 isLeaf_ = false; 121 if (!commandsCreated_) { 122 tree_ = tree; 123 createCommands(); 124 commandsCreated_ = true; 125 } 126 } 127 128 /*** 129 * Create the menu for all contexts and set up the Action events for 130 * each menu item. Since menus are shared, the callbacks called are 131 * static. Once a menu is slected, the slected node can be determined 132 * from the parent object. 133 * 134 */ 135 protected void createCommands() { 136 commands_ = new JPopupMenu(); 137 JMenuItem m = new JMenuItem("Add Context"); 138 m.addActionListener(new ActionListener() { 139 140 public void actionPerformed(ActionEvent evt) { 141 createContext(); 142 } 143 }); 144 commands_.add(m); 145 146 m = new JMenuItem("Bind Object"); 147 m.addActionListener(new ActionListener() { 148 149 public void actionPerformed(ActionEvent evt) { 150 bindObject(); 151 } 152 }); 153 commands_.add(m); 154 155 m = new JMenuItem("Rename Context"); 156 m.addActionListener(new ActionListener() { 157 158 public void actionPerformed(ActionEvent evt) { 159 renameContext(); 160 } 161 }); 162 commands_.add(m); 163 164 m = new JMenuItem("Delete Context"); 165 m.addActionListener(new ActionListener() { 166 167 public void actionPerformed(ActionEvent evt) { 168 deleteContext(); 169 } 170 }); 171 commands_.add(m); 172 } 173 174 /*** 175 * Children are allowed for all contexts 176 * 177 * @return boolean Always returns true. 178 * 179 */ 180 public boolean getAllowsChildren() { 181 return true; 182 } 183 184 /*** 185 * Contexts are leaves iff they have no objects registered against 186 * them. 187 * 188 * @return boolean true if no objects are registered. 189 */ 190 public boolean isLeaf() { 191 return isLeaf_; 192 } 193 194 /*** 195 * As a performance enhancement, no child is added to the context until 196 * after it is expanded. 197 */ 198 public void update() { 199 if (!isExplored_) { 200 Object ob = AdminConnection.instance().lookup(contextName_); 201 if (ob != null) { 202 if (ob instanceof Context) { 203 Enumeration e = AdminConnection.instance().getAllContexts 204 (contextName_); 205 if (e != null) { 206 while (e.hasMoreElements()) { 207 NameClassPair pair = 208 (NameClassPair) e.nextElement(); 209 add(new OpenJMSContext 210 (pair.getName(), contextName_, tree_)); 211 } 212 } 213 } else { 214 add(new OpenJMSObject(ob.getClass().getName(), tree_)); 215 } 216 refresh(); 217 } 218 isExplored_ = true; 219 } 220 } 221 222 /*** 223 * This node has been right clicked. The locations of this node is given 224 * by the loc object. Use this location to popup the context 225 * menu. 226 * 227 * @param The location of this node. 228 * 229 */ 230 public void displayCommands(Rectangle loc) { 231 double x; 232 double y; 233 234 x = loc.getX(); 235 y = loc.getY(); 236 y += loc.getHeight(); 237 238 commands_.show(tree_, (int) x, (int) y); 239 } 240 241 /*** 242 * The unique name of this Context 243 * 244 * @return String the context name 245 */ 246 public String toString() { 247 return displayName_; 248 } 249 250 /*** 251 * This node has changed. Inform the parent tree that it needs to be 252 * re-drawn. 253 */ 254 private void refresh() { 255 DefaultTreeModel model = (DefaultTreeModel) tree_.getModel(); 256 model.nodeStructureChanged((DefaultMutableTreeNode) this); 257 } 258 259 /*** 260 * Get the particular instance of the context that has been selected. 261 * 262 * @return OpenJMSContext the instance selected. 263 */ 264 static private OpenJMSContext getInstanceSelected() { 265 Object loc = tree_.getLastSelectedPathComponent(); 266 return (OpenJMSContext) loc; 267 } 268 269 /*** 270 * Create a new context. Popup the dialog, and prompt the user for the 271 * context name. Attempt to create the context. If creation is successfull 272 * add the node to the tree. 273 */ 274 static private void createContext() { 275 OpenJMSContext This = getInstanceSelected(); 276 ObjectDialog.instance().display("Enter a unique context name", 277 "Context Creation"); 278 if (ObjectDialog.instance().isConfirmed()) { 279 try { 280 AdminConnection.instance().createContext 281 (This.contextName_ + "." + 282 ObjectDialog.instance().getName()); 283 This.add(new OpenJMSContext 284 (ObjectDialog.instance().getName(), This.contextName_, 285 tree_)); 286 This.refresh(); 287 } catch (NamingException exception) { 288 JOptionPane.showMessageDialog( 289 tree_, exception.getMessage(), "Context Create Error", 290 JOptionPane.ERROR_MESSAGE); 291 } 292 } 293 } 294 295 /*** 296 * Rename the selected context. 297 */ 298 static private void renameContext() { 299 OpenJMSContext This = getInstanceSelected(); 300 ObjectDialog.instance().display( 301 "Enter a new context name\n" + 302 "for context: " + This.displayName_, "Rename Context"); 303 if (ObjectDialog.instance().isConfirmed()) { 304 try { 305 String newName = This.contextName_.substring 306 (0, This.contextName_.indexOf(This.displayName_)); 307 newName += ObjectDialog.instance().getName(); 308 AdminConnection.instance().renameContext( 309 This.contextName_, newName); 310 This.contextName_ = newName; 311 This.displayName_ = ObjectDialog.instance().getName(); 312 This.refresh(); 313 } catch (NamingException exception) { 314 JOptionPane.showMessageDialog( 315 tree_, exception.getMessage(), 316 "Context Rename Error", JOptionPane.ERROR_MESSAGE); 317 } 318 } 319 } 320 321 /*** 322 * Create a new Object. The object must be given its fully qualified name 323 * and have a default constructor. 324 * For this release no paramaters are passed in. 325 */ 326 static private void bindObject() { 327 String errorString = null; 328 329 OpenJMSContext This = getInstanceSelected(); 330 ObjectDialog.instance().display( 331 "Enter the objects fully qualified name", "Bind Object"); 332 if (ObjectDialog.instance().isConfirmed()) { 333 try { 334 Object ob = null; 335 336 if (ObjectDialog.instance().getName().equals( 337 "org.exolab.jms.client.JmsTopic")) { 338 ob = new org.exolab.jms.client.JmsTopic(This.contextName_); 339 } else if (ObjectDialog.instance().getName().equals( 340 "org.exolab.jms.client.JmsQueue")) { 341 ob = new org.exolab.jms.client.JmsQueue(This.contextName_); 342 ((org.exolab.jms.client.JmsDestination) 343 ob).setPersistent(true); 344 } else { 345 ob = Class.forName( 346 ObjectDialog.instance().getName()).newInstance(); 347 } 348 349 AdminConnection.instance().rebind(This.contextName_, ob); 350 This.removeAllChildren(); 351 This.add(new OpenJMSObject( 352 ObjectDialog.instance().getName(), tree_)); 353 This.refresh(); 354 } catch (NamingException exception) { 355 errorString = exception.getMessage(); 356 } catch (IllegalAccessException exception) { 357 errorString = "Illegal Access error for\n" + "Object: " + 358 ObjectDialog.instance().getName(); 359 } catch (InstantiationException exception) { 360 errorString = "Object: " + ObjectDialog.instance().getName() + 361 "\nCannot be instantaiated"; 362 } catch (ClassNotFoundException exception) { 363 errorString = "Object: " + ObjectDialog.instance().getName() + 364 "\nCannot be found"; 365 } 366 367 if (errorString != null) { 368 JOptionPane.showMessageDialog( 369 tree_, errorString, "Object bind error", 370 JOptionPane.ERROR_MESSAGE); 371 } 372 } 373 } 374 375 /*** 376 * Delete the selected context object. Display a confirmation dialog 377 * and wait for its return. If the user has confirmed the action, first 378 * delete it from the database and if that is successful remove the node 379 * from the tree. 380 * 381 * <P>Note: deleting a context also deletes all subcontexts and bound 382 * objects. 383 */ 384 static private void deleteContext() { 385 OpenJMSContext This = getInstanceSelected(); 386 QueryDialog.instance().display( 387 "Are you sure you want to delete \nselected Context: " 388 + This.displayName_); 389 if (QueryDialog.instance().isConfirmed()) { 390 try { 391 AdminConnection.instance().destroyContext(This.contextName_); 392 This.removeFromParent(); 393 This.refresh(); 394 } catch (NamingException exception) { 395 JOptionPane.showMessageDialog( 396 tree_, exception.getMessage(), "Context Destroy Error", 397 JOptionPane.ERROR_MESSAGE); 398 } 399 } 400 } 401 402 } //-- OpenJMSContext

This page was automatically generated by Maven