home *** CD-ROM | disk | FTP | other *** search
/ io Programmo 14 / IOPROG_14.ISO / soft / sdkjava / sdkjava.exe / SDKJava.cab / Samples / ActiveXBeans / orgtree / OrgTree.java < prev    next >
Encoding:
Java Source  |  1998-03-05  |  6.0 KB  |  204 lines

  1. /**
  2.  *  OrgTree.java
  3.  *
  4.  *      This component builds a tree control out of a list of employees
  5.  *      and their titles and managers.
  6.  *
  7.  *  (C) Copyright 1998, Microsoft Corporation. All rights reserved.
  8.  *
  9.  */
  10.  
  11. import java.awt.*;                  // standard java
  12. import java.applet.*;               // standard java
  13. import java.util.*;                 // standard java
  14. import com.ms.ui.*;                 // microsoft afc
  15. import com.ms.ui.event.*;
  16. import java.io.*;
  17.  
  18. public class OrgTree extends AwtUIApplet
  19. {
  20.     OrgTreeImpl inner;
  21.  
  22.     public OrgTree()
  23.     {
  24.     super(new OrgTreeImpl());   
  25.         
  26.         inner = (OrgTreeImpl) getUIApplet();
  27.     }
  28.  
  29.     public void addOrgTreeEventListener(OrgTreeEventListener l)
  30.     {
  31.         inner.addOrgTreeEventListener(l);     
  32.     }
  33.  
  34.     public void removeOrgTreeEventListener(OrgTreeEventListener l)
  35.     {
  36.         inner.removeOrgTreeEventListener(l);     
  37.     }
  38.  
  39.     public OrgTreeNode addEmployee( String empName,
  40.                                     String empTitle,
  41.                                     String empManager,
  42.                                     int dbRow)
  43.     {
  44.         return inner.addEmployee(empName, empTitle, empManager, dbRow);
  45.     }
  46. }
  47.  
  48. class OrgTreeImpl extends UIApplet implements IUIItemListener, Serializable
  49. {
  50.  
  51.     // base of the org chart
  52.     private UITree root;
  53.  
  54.     // listeners for node clicks
  55.     transient Vector listeners = new Vector();
  56.  
  57.     public void init()
  58.     {
  59.         // initialize our node class
  60.         OrgTreeNode.oneTimeInit( getApplet() );
  61.  
  62.         root = new UITree("Organization");
  63.         root.setExpanded(true);
  64.  
  65.         setLayout(new UIBorderLayout());
  66.         setFont(new Font("Helvetica", 0, 12));
  67.         setSize(400,200);
  68.         root.addItemListener(this);
  69.         add(new UIScrollViewer(root), "center" );
  70.     }
  71.  
  72.     // done once on applet init
  73.     public OrgTreeImpl()
  74.     {
  75.     }
  76.  
  77.  
  78.     public void itemStateChanged(UIItemEvent evt)
  79.     {
  80.         if ((evt.getStateChange() == UIItemEvent.SELECTED) && (evt.getItem() instanceof OrgTreeNode) )
  81.         {
  82.             System.out.println("Tree node selected" );
  83.             OrgTreeNode emp = (OrgTreeNode)evt.getItem();
  84.             String empName  = emp.getName();
  85.             String empTitle = emp.getTitle();
  86.             String empMgr   = (emp.getManagerNode() == null) ? null : emp.getManagerNode().getName();
  87.             int r           = emp.getRow();
  88.  
  89.             // get a picture of the listeners in an array
  90.             OrgTreeEventListener otl[];
  91.             synchronized(listeners)
  92.             {
  93.                 otl = new OrgTreeEventListener[listeners.size()];
  94.                 listeners.copyInto(otl);
  95.             }
  96.  
  97.             for (int i=0; i<otl.length; i++)
  98.             {
  99.                 System.out.println( "Sending employee "+empName );
  100.  
  101.                 // notify that an employee was selected
  102.                 otl[i].employeeSelected(empName, empTitle, empMgr, r);
  103.             }
  104.         }
  105.         
  106.     }
  107.  
  108.     /**
  109.      *  Adds a listener for org tree selection events
  110.      */
  111.     public void addOrgTreeEventListener(OrgTreeEventListener l)
  112.     {
  113.         System.out.println("Adding an event listener");
  114.         listeners.addElement(l);    
  115.     }
  116.  
  117.     /**
  118.      *  Removes a listener for org tree selection events
  119.      */
  120.     public void removeOrgTreeEventListener(OrgTreeEventListener l)
  121.     {
  122.         listeners.removeElement(l);
  123.     }
  124.  
  125.     /** 
  126.      *  Adds an employee to the org tree
  127.      *  it first finds the employee's manager in the existing tree and then
  128.      *  adds the employee to the tree in the appropriate place.
  129.      */ 
  130.     public OrgTreeNode addEmployee( String empName,
  131.                                     String empTitle,
  132.                                     String empManager,
  133.                                     int dbRow)
  134.     {
  135.         // if the employee has a manager,
  136.         // look for them in the existing tree, also look for any
  137.         // employees in the existing tree with this employee as their
  138.         // manager
  139.  
  140.         System.out.println("Adding "+empName );
  141.  
  142.         // this will hold the parent (root or manager)
  143.         int         i;
  144.         int         c;
  145.         UIComponent   cmp;
  146.  
  147.         // create a node
  148.         OrgTreeNode emp = new OrgTreeNode(empName,empTitle,empManager,dbRow);
  149.  
  150.         // look for any employees which work for this employee &
  151.         // remove them from the root and add them to this one
  152.         // the only possible candidates are nodes on the root which have
  153.         // a manager. We don't synchronize this, but we should. 
  154.         c = root.getComponentCount();
  155.  
  156.         // loop through all root components and put this mgr's team members in the node
  157.         for ( i = 0; i < c; i++ )
  158.         {
  159.             String mn;
  160.  
  161.             cmp = (UIComponent) root.getComponent(i);
  162.  
  163.             // if we are this employee's manager, add them to our tree
  164.             if ((cmp instanceof OrgTreeNode) &&
  165.                 (mn = ((OrgTreeNode)cmp).getManagerName()) != null &&
  166.                 mn.equalsIgnoreCase( empName ))
  167.             {
  168.                 // remove this one, reduce our count and our total
  169.                 root.remove( i );
  170.                 i--;
  171.                 c--;
  172.                 // add this component to our tree
  173.                 emp.add( cmp );
  174.                 emp.setManager(true);
  175.             }
  176.         }
  177.  
  178.         // look for our team and add us to it
  179.         c = root.getComponentCount();
  180.  
  181.         // loop through all root components and put us in the proper team
  182.         for ( i = 0; i < c; i++ )
  183.         {
  184.             cmp = (UIComponent) root.getComponent(i);
  185.  
  186.             // if we find our team, we're done
  187.             if ((cmp instanceof OrgTreeNode) &&
  188.                 ((OrgTreeNode)(cmp)).addTeamMember( emp ) )
  189.             {
  190.                 break;
  191.             }
  192.         }
  193.  
  194.         // if we didn't find a team, we're a root
  195.         if ( i == c )
  196.         {
  197.             root.add( emp );
  198.         }
  199.  
  200.         setValid(true);
  201.         return (emp);
  202.     }
  203. }
  204.