avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From l...@apache.org
Subject cvs commit: jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client InstrumentableNodeData.java InstrumentManagerConnection.java InstrumentManagerTreeModel.java InstrumentNodeData.java InstrumentSampleNodeData.java NodeData.java
Date Sat, 26 Oct 2002 08:52:25 GMT
leif        2002/10/26 01:52:25

  Modified:    instrument-client/src/java/org/apache/excalibur/instrument/client
                        InstrumentableNodeData.java
                        InstrumentManagerConnection.java
                        InstrumentManagerTreeModel.java
                        InstrumentNodeData.java
                        InstrumentSampleNodeData.java NodeData.java
  Log:
  Make the client take advantage of state versions from the InstrumentManager.
  It makes the refresh action much more efficient and responsive.
  
  Revision  Changes    Path
  1.2       +18 -5     jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentableNodeData.java
  
  Index: InstrumentableNodeData.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentableNodeData.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- InstrumentableNodeData.java	22 Aug 2002 16:50:38 -0000	1.1
  +++ InstrumentableNodeData.java	26 Oct 2002 08:52:25 -0000	1.2
  @@ -140,16 +140,29 @@
           return m_registered;
       }
       
  +    /**
  +     * Collect latest property values from the server.  Each call is remote so this
  +     *  allows us to use cached values locally to speed things up.
  +     */
       boolean update()
       {
           boolean changed = false;
  -        changed |= update( m_descriptor.getName(), m_descriptor.getDescription() );
  +        changed |= update( m_descriptor.getName(), m_descriptor.getDescription(),
  +            m_descriptor.getStateVersion() );
           
  -        changed |= ( m_descriptor.isConfigured() == m_configured );
  -        m_configured = m_descriptor.isConfigured();
  +        boolean newConfigured = m_descriptor.isConfigured();
  +        if ( newConfigured != m_configured )
  +        {
  +            changed = true;
  +            m_configured = newConfigured;
  +        }
           
  -        changed |= ( m_descriptor.isRegistered() == m_registered );
  -        m_registered = m_descriptor.isRegistered();
  +        boolean newRegistered = m_descriptor.isRegistered();
  +        if ( newRegistered != m_registered )
  +        {
  +            changed = true;
  +            m_registered = newRegistered;
  +        }
           
           return changed;
       }
  
  
  
  1.8       +3 -2      jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentManagerConnection.java
  
  Index: InstrumentManagerConnection.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentManagerConnection.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- InstrumentManagerConnection.java	25 Oct 2002 15:42:26 -0000	1.7
  +++ InstrumentManagerConnection.java	26 Oct 2002 08:52:25 -0000	1.8
  @@ -304,7 +304,8 @@
                                   lease.getLeaseDuration(), lease.getType() );
                               
                               // Refresh the Tree Model
  -                            m_treeModel.updateInstrument( instrumentDescriptor, instrumentTreeNode
);
  +                            m_treeModel.updateInstrument( instrumentDescriptor, instrumentTreeNode,
  +                                -1 /* Force Update */ );
                           }
                           catch ( AltrmiInvocationException e )
                           {
  
  
  
  1.5       +89 -15    jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentManagerTreeModel.java
  
  Index: InstrumentManagerTreeModel.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentManagerTreeModel.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- InstrumentManagerTreeModel.java	25 Oct 2002 15:42:26 -0000	1.4
  +++ InstrumentManagerTreeModel.java	26 Oct 2002 08:52:25 -0000	1.5
  @@ -34,7 +34,12 @@
       implements InstrumentManagerConnectionListener, TreeModel
   {
       private final InstrumentManagerConnection m_connection;
  +    
  +    /** The last InstrumentManagerClient referenced.  Used to tell when it changes. */
       private InstrumentManagerClient m_lastClient;
  +    
  +    /** The state version of the last client. */
  +    private int m_lastClientStateVersion;
   
       private DefaultMutableTreeNode m_root;
       
  @@ -432,11 +437,16 @@
                       (DefaultMutableTreeNode)leasedSampleArray[i].getParent();
                   InstrumentDescriptor instrumentDescriptor =
                       ((InstrumentNodeData)instrumentTreeNode.getUserObject()).getDescriptor();
  -                updateInstrument( instrumentDescriptor, instrumentTreeNode );
  +                updateInstrument( instrumentDescriptor, instrumentTreeNode, -1 /*Force
update*/ );
               }
           }
       }
       
  +    /**
  +     * Refreshes the entire Tree Model with the latest information from the server.
  +     *  This should be called whenever a refresh is needed, or whenever the status
  +     *  of the connection to the server changes.
  +     */
       void refreshModel()
       {
           // Is the connection open or not?
  @@ -453,6 +463,7 @@
                   m_elementMap.clear();
                   m_leasedSampleMap.clear();
                   m_leasedSampleArray = null;
  +                m_lastClientStateVersion = -1;
                   fireTreeStructureChanged( new TreeModelEvent( this, m_root.getPath() )
);
               }
           }
  @@ -465,13 +476,14 @@
                   m_elementMap.clear();
                   m_leasedSampleMap.clear();
                   m_leasedSampleArray = null;
  +                m_lastClientStateVersion = -1;
                   fireTreeStructureChanged( new TreeModelEvent( this, new Object[] { m_root
} ) );
               }
               
               // Need to update the child nodes. (Root Instrumentables)
               try
               {
  -                updateInstrumentables( client, m_root );
  +                updateInstrumentModelClient( client, m_root, m_lastClientStateVersion );
               }
               catch ( AltrmiInvocationException e )
               {
  @@ -483,15 +495,37 @@
           m_lastClient = client;
       }
       
  -    private void updateInstrumentables( InstrumentManagerClient client,
  -                                                     DefaultMutableTreeNode rootTreeNode
)
  +    /**
  +     * Called to update the local view of the InstrumentManagerClient in the TreeeModel.
  +     *
  +     * @param client The InstrumentModelClient to use for the update.
  +     * @param roorTreeNode The TreeNode representing the client.
  +     * @param oldStateVersion The state version at the time of the last update.
  +     */
  +    private void updateInstrumentModelClient( InstrumentManagerClient client,
  +                                              DefaultMutableTreeNode rootTreeNode,
  +                                              int oldStateVersion )
       {
  +        int stateVersion = client.getStateVersion();
  +        if ( stateVersion == oldStateVersion )
  +        {
  +            // Already up to date.
  +            return;
  +        }
  +        
  +        if ( getLogger().isDebugEnabled() )
  +        {
  +            getLogger().debug( "update client(" + client.getName() + ") "
  +                + "state new=" + stateVersion + ", old=" + oldStateVersion );
  +        }
  +        
           // The latest Instrumentables will be in the correct order.
           InstrumentableDescriptor[] descriptors = client.getInstrumentableDescriptors();
           int i;
           for ( i = 0; i < descriptors.length; i++ )
           {
               InstrumentableDescriptor descriptor = descriptors[i];
  +            int oldInstrumentableStateVersion = -1;
               DefaultMutableTreeNode newChild = null;
               int childCount = rootTreeNode.getChildCount();
               if ( i < childCount )
  @@ -505,7 +539,10 @@
                       if ( cmp == 0 )
                       {
                           // This is the same object.
  -                        if ( ((InstrumentableNodeData)oldChild.getUserObject()).update()
)
  +                        InstrumentableNodeData nodeData =
  +                            (InstrumentableNodeData)oldChild.getUserObject();
  +                        oldInstrumentableStateVersion = nodeData.getStateVersion();
  +                        if ( nodeData.update() )
                           {
                               // The contents of the node changed.
                               fireTreeNodesChanged( new TreeModelEvent( this,
  @@ -555,7 +592,7 @@
                       getName(), newChild );
               }
               
  -            updateInstrumentable( descriptor, newChild );
  +            updateInstrumentable( descriptor, newChild, oldInstrumentableStateVersion );
           }
           // Remove any remaining old nodes
           while ( i < rootTreeNode.getChildCount() )
  @@ -570,6 +607,8 @@
               m_elementMap.remove( ((InstrumentableNodeData)oldChild.getUserObject()).
                   getName() );
           }
  +        
  +        m_lastClientStateVersion = stateVersion;
       }
   
       /**
  @@ -577,11 +616,25 @@
        *                                 update.
        * @param instrumentableTreeNode The tree node of the Instrumentable to
        *                               update.
  +     * @param oldStateVersion The state version at the time of the last update.
        */
  -    private void updateInstrumentable(
  -        InstrumentableDescriptor instrumentableDescriptor,
  -        DefaultMutableTreeNode instrumentableTreeNode )
  +    private void updateInstrumentable( InstrumentableDescriptor instrumentableDescriptor,
  +                                       DefaultMutableTreeNode instrumentableTreeNode,
  +                                       int oldStateVersion )
       {
  +        int stateVersion = instrumentableDescriptor.getStateVersion();
  +        if ( stateVersion == oldStateVersion )
  +        {
  +            // Already up to date.
  +            return;
  +        }
  +        
  +        if ( getLogger().isDebugEnabled() )
  +        {
  +            getLogger().debug( "update instrumentable(" + instrumentableDescriptor.getName()
+ ") "
  +                + "state new=" + stateVersion + ", old=" + oldStateVersion );
  +        }
  +        
           // The latest Instrumentables will be in the correct order.
           InstrumentableDescriptor[] descriptors =
               instrumentableDescriptor.getChildInstrumentableDescriptors();
  @@ -590,6 +643,7 @@
           for ( i = 0; i < descriptors.length; i++ )
           {
               InstrumentableDescriptor descriptor = descriptors[i];
  +            int oldInstrumentableStateVersion = -1;
               //System.out.println("  " + descriptor.getName() );
               DefaultMutableTreeNode newChild = null;
               int childCount = instrumentableTreeNode.getChildCount();
  @@ -613,7 +667,10 @@
                       if ( cmp == 0 )
                       {
                           // This is the same object.
  -                        if ( ((InstrumentableNodeData)oldChild.getUserObject()).update()
)
  +                        InstrumentableNodeData nodeData =
  +                            (InstrumentableNodeData)oldChild.getUserObject();
  +                        oldInstrumentableStateVersion = nodeData.getStateVersion();
  +                        if ( nodeData.update() )
                           {
                               // The contents of the node changed.
                               fireTreeNodesChanged( new TreeModelEvent( this,
  @@ -666,7 +723,7 @@
                       getName(), newChild );
               }
               
  -            updateInstrumentable( descriptor, newChild );
  +            updateInstrumentable( descriptor, newChild, oldInstrumentableStateVersion );
           }
           // Remove any remaining old Instrumentable nodes
           while ( i < instrumentableTreeNode.getChildCount() )
  @@ -696,6 +753,7 @@
           for ( i = descriptors.length; i < instrumentDescriptors.length + descriptors.length;
i++ )
           {
               InstrumentDescriptor descriptor = instrumentDescriptors[i - descriptors.length];
  +            int oldInstrumentStateVersion = -1;
               //System.out.println("  " + descriptor.getName() );
               DefaultMutableTreeNode newChild = null;
               int childCount = instrumentableTreeNode.getChildCount();
  @@ -719,7 +777,9 @@
                       if ( cmp == 0 )
                       {
                           // This is the same object.
  -                        if ( ((InstrumentNodeData)oldChild.getUserObject()).update() )
  +                        InstrumentNodeData nodeData = (InstrumentNodeData)oldChild.getUserObject();
  +                        oldInstrumentStateVersion = nodeData.getStateVersion();
  +                        if ( nodeData.update() )
                           {
                               // The contents of the node changed.
                               fireTreeNodesChanged( new TreeModelEvent( this,
  @@ -772,7 +832,7 @@
                       getName(), newChild );
               }
               
  -            updateInstrument( descriptor, newChild );
  +            updateInstrument( descriptor, newChild, oldInstrumentStateVersion );
           }
           // Remove any remaining old Instrument nodes
           while ( i < instrumentableTreeNode.getChildCount() )
  @@ -801,7 +861,7 @@
               getInstrumentTreeNode( instrumentDescriptor.getName() );
           if ( instrumentTreeNode != null )
           {
  -            updateInstrument( instrumentDescriptor, instrumentTreeNode );
  +            updateInstrument( instrumentDescriptor, instrumentTreeNode, -1 /* Force update
*/ );
           }
       }
       
  @@ -810,8 +870,22 @@
        * @param instrumentTreeNode The tree node of the Instrument to update.
        */
       void updateInstrument( InstrumentDescriptor instrumentDescriptor,
  -                           DefaultMutableTreeNode instrumentTreeNode )
  +                           DefaultMutableTreeNode instrumentTreeNode,
  +                           int oldStateVersion )
       {
  +        int stateVersion = instrumentDescriptor.getStateVersion();
  +        if ( stateVersion == oldStateVersion )
  +        {
  +            // Already up to date.
  +            return;
  +        }
  +        
  +        if ( getLogger().isDebugEnabled() )
  +        {
  +            getLogger().debug( "update instrument(" + instrumentDescriptor.getName() +
") "
  +                + "state new=" + stateVersion + ", old=" + oldStateVersion );
  +        }
  +        
           // The latest Instrument Samples will be in the correct order.
           InstrumentSampleDescriptor[] descriptors =
               instrumentDescriptor.getInstrumentSampleDescriptors();
  
  
  
  1.2       +20 -7     jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentNodeData.java
  
  Index: InstrumentNodeData.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentNodeData.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- InstrumentNodeData.java	22 Aug 2002 16:50:38 -0000	1.1
  +++ InstrumentNodeData.java	26 Oct 2002 08:52:25 -0000	1.2
  @@ -260,16 +260,29 @@
       boolean update()
       {
           boolean changed = false;
  -        changed |= update( m_descriptor.getName(), m_descriptor.getDescription() );
  +        changed |= update( m_descriptor.getName(), m_descriptor.getDescription(),
  +            m_descriptor.getStateVersion() );
           
  -        changed |= ( m_descriptor.isConfigured() == m_configured );
  -        m_configured = m_descriptor.isConfigured();
  +        boolean newConfigured = m_descriptor.isConfigured();
  +        if ( newConfigured != m_configured )
  +        {
  +            changed = true;
  +            m_configured = newConfigured;
  +        }
           
  -        changed |= ( m_descriptor.isRegistered() == m_registered );
  -        m_registered = m_descriptor.isRegistered();
  +        boolean newRegistered = m_descriptor.isRegistered();
  +        if ( newRegistered != m_registered )
  +        {
  +            changed = true;
  +            m_registered = newRegistered;
  +        }
           
  -        changed |= ( m_descriptor.getType() == m_type );
  -        m_type = m_descriptor.getType();
  +        int newType = m_descriptor.getType();
  +        if ( newType != m_type )
  +        {
  +            changed = true;
  +            m_type = newType;
  +        }
           
           return changed;
       }
  
  
  
  1.2       +32 -16    jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentSampleNodeData.java
  
  Index: InstrumentSampleNodeData.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/InstrumentSampleNodeData.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- InstrumentSampleNodeData.java	22 Aug 2002 16:50:38 -0000	1.1
  +++ InstrumentSampleNodeData.java	26 Oct 2002 08:52:25 -0000	1.2
  @@ -387,27 +387,43 @@
       boolean update()
       {
           boolean changed = false;
  -        changed |= update( m_descriptor.getName(), m_descriptor.getDescription() );
  +        changed |= update( m_descriptor.getName(), m_descriptor.getDescription(),
  +            m_descriptor.getStateVersion() );
           
  -        boolean configured = m_descriptor.isConfigured();
  -        changed |= ( configured == m_configured );
  -        m_configured = configured;
  +        boolean newConfigured = m_descriptor.isConfigured();
  +        if ( newConfigured != m_configured )
  +        {
  +            changed = true;
  +            m_configured = newConfigured;
  +        }
           
  -        long leaseExpireTime = m_descriptor.getLeaseExpirationTime();
  -        changed |= ( leaseExpireTime == m_leaseExpireTime );
  -        m_leaseExpireTime = leaseExpireTime;
  +        long newLeaseExpireTime = m_descriptor.getLeaseExpirationTime();
  +        if ( newLeaseExpireTime != m_leaseExpireTime )
  +        {
  +            changed = true;
  +            m_leaseExpireTime = newLeaseExpireTime;
  +        }
           
  -        int type = m_descriptor.getType();
  -        changed |= ( type == m_type );
  -        m_type = type;
  +        int newType = m_descriptor.getType();
  +        if ( newType != m_type )
  +        {
  +            changed = true;
  +            m_type = newType;
  +        }
           
  -        int size = m_descriptor.getSize();
  -        changed |= ( size == m_size );
  -        m_size = size;
  +        int newSize = m_descriptor.getSize();
  +        if ( newSize != m_size )
  +        {
  +            changed = true;
  +            m_size = newSize;
  +        }
           
  -        long interval = m_descriptor.getInterval();
  -        changed |= ( interval == m_interval );
  -        m_interval = interval;
  +        long newInterval = m_descriptor.getInterval();
  +        if ( newInterval != m_interval )
  +        {
  +            changed = true;
  +            m_interval = newInterval;
  +        }
           
           return changed;
       }
  
  
  
  1.2       +10 -1     jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/NodeData.java
  
  Index: NodeData.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/instrument-client/src/java/org/apache/excalibur/instrument/client/NodeData.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- NodeData.java	22 Aug 2002 16:50:38 -0000	1.1
  +++ NodeData.java	26 Oct 2002 08:52:25 -0000	1.2
  @@ -18,6 +18,7 @@
       
       private String m_name;
       private String m_description;
  +    private int m_stateVersion;
       
       /*---------------------------------------------------------------
        * Constructors
  @@ -44,6 +45,11 @@
           m_description = description;
       }
       
  +    int getStateVersion()
  +    {
  +        return m_stateVersion;
  +    }
  +    
       /**
        * Get the icon to display for the node.
        *
  @@ -102,7 +108,7 @@
       }
       
       
  -    boolean update( String name, String description )
  +    boolean update( String name, String description, int stateVersion )
       {
           boolean changed = false;
           
  @@ -111,6 +117,9 @@
           
           changed |= description.equals( m_description );
           m_description = description;
  +        
  +        changed |= stateVersion == m_stateVersion;
  +        m_stateVersion = stateVersion;
           
           return changed;
       }
  
  
  

--
To unsubscribe, e-mail:   <mailto:avalon-cvs-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@jakarta.apache.org>


Mime
View raw message