/* * JacORB - a free Java ORB * * Copyright (C) 1997-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Library General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) any * later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more * details. * * You should have received a copy of the GNU Library General Public License * along with this library; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. */ package org.jacorb.naming.namemanager; import java.awt.Dimension; import javax.swing.JOptionPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreePath; import org.jacorb.naming.Name; import org.omg.CosNaming.NamingContext; import org.omg.CosNaming.NamingContextHelper; import org.omg.CosNaming.NamingContextPackage.AlreadyBound; import org.omg.CosNaming.NamingContextPackage.CannotProceed; import org.omg.CosNaming.NamingContextPackage.InvalidName; import org.omg.CosNaming.NamingContextPackage.NotFound; /** * @author Gerald Brose, FU Berlin/XTRADYNE Technologies AG */ public class NSTree extends JTree { private NamingContext rootContext; private Dimension size; private boolean created; private org.omg.CORBA.ORB orb; public static NSTable nsTable; public NSTree (int width, int height, NSTable theTable, NamingContext rootCntxt, org.omg.CORBA.ORB orb) { this.orb = orb; DefaultMutableTreeNode root = new DefaultMutableTreeNode ("RootContext"); root.setAllowsChildren (true); setModel (new DefaultTreeModel (root, true)); created = false; size = new Dimension (width, height); nsTable = theTable; rootContext = rootCntxt; ContextNode cn = new ContextNode (orb, rootContext, (DefaultTreeModel)getModel ()); cn.setNode (root); root.setUserObject (cn); } /** * Bind a new name context and insert it */ public void bind (String name) throws NotFound, CannotProceed, InvalidName, AlreadyBound { TreePath path = null; int length = 0; try { path = getSelectionPath (); length = path.getPathCount (); } catch (Exception e) { JOptionPane.showMessageDialog (this, "Nothing selected", "Selection error", JOptionPane.ERROR_MESSAGE); return; } DefaultMutableTreeNode node = (DefaultMutableTreeNode)getModel ().getRoot (); NamingContext context = rootContext; if (length > 1) { for (int i = 1; i < length; i++) { node = (DefaultMutableTreeNode)path.getPathComponent (i); ContextNode bind = (ContextNode)node.getUserObject (); context = NamingContextHelper.narrow (context.resolve (bind.getName ())); if (context == null) { System.err.println ("Naming context narrow failed!"); System.exit (1); } } } if (node.getAllowsChildren ()) { Name bindname = new Name (name); if (context == null) System.err.println ("context null "); if (bindname.components () == null) System.err.println ("name is null "); context.bind_new_context (bindname.components ()); update (); } else { JOptionPane.showMessageDialog (this, "Please select a naming context", "Selection error", JOptionPane.ERROR_MESSAGE); } } public void bindObject (String name, String ior, boolean isRebind) throws NotFound, CannotProceed, InvalidName, AlreadyBound { TreePath path = null; int length = 0; try { path = getSelectionPath (); length = path.getPathCount (); } catch (Exception e) { JOptionPane.showMessageDialog (this, "Nothing selected", "Selection error", JOptionPane.ERROR_MESSAGE); return; } DefaultMutableTreeNode node = (DefaultMutableTreeNode)getModel ().getRoot (); NamingContext context = rootContext; if (length > 1) { for (int i = 1; i < length; i++) { node = (DefaultMutableTreeNode)path.getPathComponent (i); ContextNode bind = (ContextNode)node.getUserObject (); context = NamingContextHelper.narrow (context.resolve (bind.getName ())); if (context == null) { System.err.println ("Naming context narrow failed!"); System.exit (1); } } } if (node.getAllowsChildren ()) { Name bindname = new Name (name); if (context == null) System.err.println ("context null "); if (bindname.components () == null) System.err.println ("name is null "); try { context.bind (bindname.components (), orb.string_to_object (ior)); } catch (AlreadyBound ab) { if (isRebind) context.rebind (bindname.components (), orb.string_to_object (ior)); else throw ab; } update (); } else { JOptionPane.showMessageDialog (this, "Please select a naming context", "Selection error", JOptionPane.ERROR_MESSAGE); } } public Dimension getPreferredSize () { if (!created) { created = true; return size; } else return super.getPreferredSize (); } /** * unbind a context and remove it from this tree */ public void unbind () { DefaultMutableTreeNode node; NamingContext context = rootContext; TreePath path = null; int length = 0; try { path = getSelectionPath (); length = path.getPathCount (); if (length > 1) { for (int i = 1; i < length - 1; i++) { node = (DefaultMutableTreeNode)path.getPathComponent (i); ContextNode bind = (ContextNode)node.getUserObject (); context = NamingContextHelper.narrow (context.resolve (bind.getName ())); } } if (length > 0) { node = (DefaultMutableTreeNode)path.getPathComponent (length - 1); ContextNode binding = (ContextNode)node.getUserObject (); context.unbind (binding.getName ()); DefaultTreeModel model = (DefaultTreeModel)getModel (); model.removeNodeFromParent (node); // select the parent node and display its content DefaultMutableTreeNode parent = (DefaultMutableTreeNode)path.getPathComponent (length - 2); setSelectionPath (new TreePath (parent.getPath ())); ((ContextNode)parent.getUserObject ()).display (); } } catch (Exception e) { e.printStackTrace (); JOptionPane.showMessageDialog (this, "Nothing selected or invalid selection", "Selection error", JOptionPane.ERROR_MESSAGE); } } /** * update the entire tree of contexts */ public synchronized void update () { DefaultTreeModel model = (DefaultTreeModel)getModel (); ((ContextNode)((DefaultMutableTreeNode)model.getRoot ()).getUserObject ()).display(); nsTable.update (); } }