Package org.jacorb.naming.namemanager

Source Code of org.jacorb.naming.namemanager.NSTree

/*
*        JacORB - a free Java ORB
*
*   Copyright (C) 1997-2004 Gerald Brose.
*
*   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.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
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
@version $Id: NSTree.java,v 1.10 2008-11-14 08:55:30 nick.cross Exp $
*/

public class NSTree
    extends JTree
{
    public static final int MAX_BIND = 40;
    private NamingContextExt rootContext;
    private ContextNode rootNode;
    private Dimension size;
    private boolean created;
    private org.omg.CORBA.ORB orb;

    public static NSTable nsTable;

    public NSTree(int width,
                  int height,
                  NSTable theTable,
                  NamingContextExt 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(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();
  NamingContextExt context = rootContext;

  if (length > 1)
  {
      for (int i = 1; i < length; i++)
      {
    node = (DefaultMutableTreeNode)path.getPathComponent(i);
    ContextNode bind = (ContextNode)node.getUserObject();
    context = NamingContextExtHelper.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();
  NamingContextExt context = rootContext;

  if (length>1)
  {
      for (int i = 1;i<length;i++)
      {
    node = (DefaultMutableTreeNode) path.getPathComponent(i);
    ContextNode bind = (ContextNode) node.getUserObject();
    context = NamingContextExtHelper.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;
  NamingContextExt 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 = NamingContextExtHelper.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()).update();
  nsTable.update();
    }
}

TOP

Related Classes of org.jacorb.naming.namemanager.NSTree

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.