home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / prosrc.bin / QueryNavigatorLink.java < prev    next >
Text File  |  1998-03-18  |  6KB  |  180 lines

  1. /*
  2.  * @(#)QueryNavigatorLink.java
  3.  *
  4.  * Copyright (c) 1997 Symantec Corporation. All Rights Reserved.
  5.  *
  6.  */
  7.  
  8. // Each QuerySynchronizer object contains one and only one
  9. // QueryNavigatorTree object.  This tree class implements the JFC
  10. // swing tree interface.  The parent child relationships between tree
  11. // nodes correspond to the master detail relationships between
  12. // QueryNavigators objects.  Each node contains a reference to a
  13. // QueryNavigatorLink object.  The purpose of this link is to hold
  14. // a spot for a QueryNavigator when the alias is known from a detail
  15. // QueryNavigator object before the master QueryNavigator object is
  16. // registered.
  17.  
  18. package symantec.itools.db.beans.binding;
  19.  
  20. import javax.awt.swing.tree.*;
  21. import java.beans.PropertyChangeListener;
  22. import java.beans.PropertyChangeSupport;
  23. import java.beans.PropertyChangeEvent;
  24.  
  25. final class QueryNavigatorLink implements SynchronizerLink,PropertyChangeListener
  26. {
  27.     private String m_Alias = "";
  28.     private String m_MasterAlias = "";
  29.     private TreeNode m_Node = null;
  30.     private Synchronizable m_Synchronizable = null;
  31.     private QuerySynchronizer m_Synchronizer = null;
  32.  
  33.     public synchronized String getAlias() { return m_Alias; }
  34.     public synchronized String getMasterAlias() { return m_MasterAlias; }
  35.     public synchronized TreeNode getNode() { return m_Node; }
  36.     public synchronized Synchronizable getSynchronizable() { return m_Synchronizable; }
  37.     public synchronized QuerySynchronizer getSynchronizer() { return m_Synchronizer; }
  38.  
  39.     public synchronized void setAlias(String value)
  40.     {
  41.         m_Alias = value;
  42.         QuerySynchronizer.addLink(this);
  43.     }
  44.  
  45.     public synchronized void setMasterAlias(String value)
  46.     {
  47.         m_MasterAlias = value;
  48.     }
  49.  
  50.     public synchronized void setNode(TreeNode value)
  51.     {
  52.         m_Node = value;
  53.     }
  54.  
  55.     public synchronized void setSynchronizable(Synchronizable value)
  56.     {
  57.         // Foo : Check for conflicts...
  58.         m_Synchronizable = value;
  59.         setAlias(value.getAliasName());
  60.         setMasterAlias(value.getMasterAliasName());
  61.         m_Synchronizable.addPropertyChangeListener(this);
  62.     }
  63.  
  64.     public synchronized void setSynchronizer(QuerySynchronizer value)
  65.     {
  66.         m_Synchronizer = value;
  67.     }
  68.  
  69.     public synchronized boolean isOpen()
  70.     {
  71.         return m_Synchronizable == null;
  72.     }
  73.  
  74.     public String toString()
  75.     {
  76.         if (isOpen()) {
  77.             return "\t\tOPEN\t\t" + m_Alias;
  78.         }
  79.         else {
  80.             return m_Synchronizable.toString();
  81.         }
  82.     }
  83.  
  84.     /**
  85.      * Invoked by the synchronizable object to perform saveAll
  86.      */
  87.     public void saveAll() throws RelationshipPendingException, ParentInvalidRecordException
  88.     {
  89.         m_Synchronizer.saveAll(this);
  90.     }
  91.  
  92.     /**
  93.      * Invoked by the synchronizable object to perform saveAllLevels
  94.      */
  95.     public void saveAllLevels() throws RelationshipPendingException, ParentInvalidRecordException
  96.     {
  97.         m_Synchronizer.saveAllLevels(this);
  98.     }
  99.  
  100.     /**
  101.      * Invoked by the synchronizable object to perform save
  102.      */
  103.     public void save() throws RelationshipPendingException, ParentInvalidRecordException
  104.     {
  105.         m_Synchronizer.save(this);
  106.     }
  107.  
  108.     /**
  109.      * Invoked by the synchronizable object to perform next,previous,
  110.      * first,insert,goto,restart,startqbe
  111.      */
  112.     public void navigate(int type, Integer position)
  113.         throws ParentInvalidRecordException, RelationshipPendingException
  114.     {
  115.         m_Synchronizer.navigate(this, type, position);
  116.     }
  117.  
  118.     /**
  119.      * Foo: remove connection/ remove link from tree
  120.      */
  121.     public void close()
  122.     {
  123.         m_Synchronizer.removeLink(this);
  124.         m_Synchronizable.removePropertyChangeListener(this);
  125.         closes.firePropertyChange("close", new Boolean(false), new Boolean(true));
  126.         m_Synchronizable = null;
  127.     }
  128.  
  129.     /*
  130.      * Get link of parent node.
  131.      */
  132.     public synchronized SynchronizerLink getParentLink()
  133.     {
  134.         SynchronizerLink    parentLink;
  135.         SynchronizerNode    node = (SynchronizerNode)getNode();
  136.         SynchronizerNode    parentNode = (SynchronizerNode)node.getParent();
  137.  
  138.         if (parentNode != null) {
  139.             parentLink = (SynchronizerLink)parentNode.getUserObject();
  140.         }
  141.         else {
  142.             parentLink = null;
  143.         }
  144.         return parentLink;
  145.     }
  146.  
  147.     /**
  148.      * javadoc comments go here...
  149.      */
  150.     private PropertyChangeSupport closes = new PropertyChangeSupport(this);
  151.  
  152.     /**
  153.      * javadoc comments go here...
  154.      */
  155.     public void addPropertyChangeListener(PropertyChangeListener listener)
  156.     {
  157.         closes.addPropertyChangeListener(listener);
  158.     }
  159.  
  160.     /**
  161.      * javadoc comments go here...
  162.      */
  163.     public void removePropertyChangeListener(PropertyChangeListener listener)
  164.     {
  165.         closes.removePropertyChangeListener(listener);
  166.     }
  167.  
  168.     /**
  169.      * Handle the property changed event.
  170.      * We check for property name in case someday we add another property.
  171.      * We don't check for old and new values because regarding the close property
  172.      * it is only used when the sender is going from an open to closed transition.
  173.      */
  174.     public void propertyChange(PropertyChangeEvent event)
  175.     {
  176.         if (event.getPropertyName() == "close") {
  177.             close();
  178.         }
  179.     }
  180. }