You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/11/21 08:04:56 UTC

svn commit: r719517 - in /maven/mercury/trunk: mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/ mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/ mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercu...

Author: ogusakov
Date: Thu Nov 20 23:04:56 2008
New Revision: 719517

URL: http://svn.apache.org/viewvc?rev=719517&view=rev
Log:
added events to the cache layer

Modified:
    maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
    maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java
    maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java
    maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java
    maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
    maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/AbstractMercuryEvent.java
    maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/DumbListener.java
    maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/EventManager.java
    maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/GenericEvent.java
    maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEvent.java
    maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEventListener.java

Modified: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java (original)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/dependency/tests/DependencyTreeBuilderTest.java Thu Nov 20 23:04:56 2008
@@ -211,6 +211,7 @@
     reps.add( remoteRepo );
     
     depBuilder = DependencyBuilderFactory.create( DependencyBuilderFactory.JAVA_DEPENDENCY_MODEL, reps, null, null, null );
+//    depBuilder.register( new DumbListener() );
     
     ArtifactMetadata md = new ArtifactMetadata( artifactId );
 
@@ -225,7 +226,7 @@
     assertNotNull( res );
     
     assertTrue( res.size() > 1 );
-    
+
     showClasspath( res );
 
     artifactId = "org.apache.maven.plugins:maven-compiler-plugin:2.0.2";

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/DependencyTreeBuilder.java Thu Nov 20 23:04:56 2008
@@ -23,8 +23,10 @@
 import org.apache.maven.mercury.repository.api.RepositoryException;
 import org.apache.maven.mercury.repository.virtual.VirtualRepositoryReader;
 import org.apache.maven.mercury.util.Util;
+import org.apache.maven.mercury.util.event.EventGenerator;
 import org.apache.maven.mercury.util.event.EventManager;
 import org.apache.maven.mercury.util.event.GenericEvent;
+import org.apache.maven.mercury.util.event.MercuryEvent;
 import org.apache.maven.mercury.util.event.MercuryEventListener;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
@@ -36,7 +38,7 @@
  * @version $Id: MetadataTree.java 681180 2008-07-30 19:34:16Z ogusakov $
  */
 class DependencyTreeBuilder
-implements DependencyBuilder
+implements DependencyBuilder, EventGenerator
 {
   private static final Language _lang = new DefaultLanguage(DependencyTreeBuilder.class);
   private static final IMercuryLogger _log = MercuryLoggerManager.getLogger( DependencyTreeBuilder.class ); 
@@ -49,7 +51,7 @@
   
   private Map< String, MetadataTreeNode > _existingNodes;
   
-  private EventManager _eventManager; // = new EventManager();
+  private EventManager _eventManager;
   
   /**
    * creates an instance of MetadataTree. Use this instance to 
@@ -110,7 +112,7 @@
     
     _existingNodes = new HashMap<String, MetadataTreeNode>(256);
     
-    GenericEvent treeBuildEvent = new GenericEvent( TREE_BUILD_EVENT, startMD.getGAV() );
+    GenericEvent treeBuildEvent = new GenericEvent( MercuryEvent.EventTypeEnum.dependencyBuilder, TREE_BUILD_EVENT, startMD.getGAV() );
     
     MetadataTreeNode root = createNode( startMD, null, startMD, treeScope );
     
@@ -163,7 +165,7 @@
     GenericEvent nodeBuildEvent = null;
     
     if( _eventManager != null )
-      nodeBuildEvent = new GenericEvent( TREE_NODE_BUILD_EVENT, nodeMD.getGAV() );
+      nodeBuildEvent = new GenericEvent( MercuryEvent.EventTypeEnum.dependencyBuilder, TREE_NODE_BUILD_EVENT, nodeMD.getGAV() );
     
     try
     {
@@ -263,21 +265,21 @@
     catch (RepositoryException e)
     {
       if( _eventManager != null )
-        nodeBuildEvent.setError( e.getMessage() );
+        nodeBuildEvent.setResult( e.getMessage() );
 
       throw new MetadataTreeException( e );
     }
     catch( VersionException e )
     {
       if( _eventManager != null )
-        nodeBuildEvent.setError( e.getMessage() );
+        nodeBuildEvent.setResult( e.getMessage() );
 
       throw new MetadataTreeException( e );
     }
     catch( MetadataTreeException e )
     {
       if( _eventManager != null )
-        nodeBuildEvent.setError( e.getMessage() );
+        nodeBuildEvent.setResult( e.getMessage() );
       throw e;
     }
     finally
@@ -470,4 +472,13 @@
     if( _eventManager != null )
       _eventManager.unRegister( listener );
   }
+  
+  public void setEventManager( EventManager eventManager )
+  {
+    if( _eventManager == null )
+      _eventManager = eventManager;
+    else
+      _eventManager.getListeners().addAll( eventManager.getListeners() );
+      
+  }
 }

Modified: maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java (original)
+++ maven/mercury/trunk/mercury-md/mercury-md-sat/src/main/java/org/apache/maven/mercury/metadata/sat/DefaultSatSolver.java Thu Nov 20 23:04:56 2008
@@ -18,6 +18,7 @@
 import org.apache.maven.mercury.metadata.MetadataTreeNodeGAVComparator;
 import org.apache.maven.mercury.util.event.EventManager;
 import org.apache.maven.mercury.util.event.GenericEvent;
+import org.apache.maven.mercury.util.event.MercuryEvent;
 import org.apache.maven.mercury.util.event.MercuryEventListener;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
@@ -76,7 +77,7 @@
     try
     {
       if( _eventManager != null )
-        event = new GenericEvent( EVENT_CREATE_SOLVER, tree.toString() );
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.satSolver, EVENT_CREATE_SOLVER, tree.toString() );
         
       if( tree.getId() == 0 )
         MetadataTreeNode.reNumber( tree, 1 );
@@ -537,7 +538,7 @@
     try
     {
       if( _eventManager != null )
-        event = new GenericEvent( EVENT_SOLVE, _root.toString() );
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.satSolver, EVENT_SOLVE, _root.toString() );
       
       if( _solver.isSatisfiable() )
       {

Modified: maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/RepositoryMetadataCache.java Thu Nov 20 23:04:56 2008
@@ -2,6 +2,7 @@
 
 import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactCoordinates;
+import org.apache.maven.mercury.util.event.EventGenerator;
 
 /**
  * this object abstracts the existence of multiple repositories and repository
@@ -14,6 +15,7 @@
  *
  */
 public interface RepositoryMetadataCache
+extends EventGenerator
 {
   /**
    * check if GA level metadata exists in this cache for the given repo. Read from repo, if does not exists

Modified: maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-cache-fs/src/main/java/org/apache/maven/mercury/repository/cache/fs/MetadataCacheFs.java Thu Nov 20 23:04:56 2008
@@ -19,6 +19,10 @@
 import org.apache.maven.mercury.repository.api.RepositoryUpdatePolicy;
 import org.apache.maven.mercury.util.FileLockBundle;
 import org.apache.maven.mercury.util.FileUtil;
+import org.apache.maven.mercury.util.event.EventManager;
+import org.apache.maven.mercury.util.event.GenericEvent;
+import org.apache.maven.mercury.util.event.MercuryEvent;
+import org.apache.maven.mercury.util.event.MercuryEventListener;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
 
@@ -32,6 +36,14 @@
 public class MetadataCacheFs
 implements RepositoryMetadataCache
 {
+  public static final String EVENT_FIND_GA = "find.ga";
+  public static final String EVENT_FIND_GAV = "find.gav";
+  public static final String EVENT_FIND_RAW = "find.raw";
+
+  public static final String EVENT_UPDATE_GA = "update.ga";
+  public static final String EVENT_UPDATE_GAV = "update.gav";
+  public static final String EVENT_SAVE_RAW = "save.raw";
+
   private static final Language _lang = new DefaultLanguage( RepositoryGAVMetadata.class );
   
   static volatile Map<String, MetadataCacheFs> fsCaches = Collections.synchronizedMap( new HashMap<String, MetadataCacheFs>(2) ); 
@@ -41,13 +53,15 @@
         = (Map<String, RepositoryGAMetadata>)Collections.synchronizedMap( new HashMap<String, RepositoryGAMetadata>(512) );
   
   private volatile Map<String, RepositoryGAVMetadata> gavCache
-  = (Map<String, RepositoryGAVMetadata>)Collections.synchronizedMap( new HashMap<String, RepositoryGAVMetadata>(1024) );
+        = (Map<String, RepositoryGAVMetadata>)Collections.synchronizedMap( new HashMap<String, RepositoryGAVMetadata>(1024) );
   
   private volatile Map<String, byte []> rawCache
-  = (Map<String, byte []>)Collections.synchronizedMap( new HashMap<String, byte []>(1024) );
+        = (Map<String, byte []>)Collections.synchronizedMap( new HashMap<String, byte []>(1024) );
   
   private File root;
   
+  private EventManager _eventManager;
+  
   /**
    * access to all known FS caches
    * 
@@ -87,10 +101,15 @@
   public RepositoryGAMetadata findGA( String repoGuid, RepositoryUpdatePolicy up, ArtifactCoordinates coord )
   throws MetadataCorruptionException
   {
+    GenericEvent event = null;
+    
     try
     {
       String gaKey = getGAKey(coord);
       
+      if( _eventManager != null )
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.fsCache, EVENT_FIND_GA, gaKey );
+      
       RepositoryGAMetadata inMem = gaCache.get( gaKey );
       
       if( inMem != null )
@@ -103,6 +122,9 @@
           gaCache.put( gaKey, inMem );
         }
         
+        if( _eventManager != null )
+          event.setResult( "found in memory, expired is "+inMem.isExpired() );
+        
         return inMem;
       }
       
@@ -119,11 +141,17 @@
           long lastCheckMillis = md.getLastCheckMillis();
           
           if( up != null && up.timestampExpired( lastCheckMillis ) )
-          {
             md.setExpired( true );
-          }
 
           gaCache.put( gaKey, md );
+          
+          if( _eventManager != null )
+            event.setResult( "found on disk, expired is "+md.isExpired() );
+      }
+      else
+      {
+        if( _eventManager != null )
+          event.setResult( "not found" );
       }
       
       return md;
@@ -132,16 +160,29 @@
     {
       throw new MetadataCorruptionException( e.getMessage() );
     }
+    finally
+    {
+      if( _eventManager != null )
+      {
+        event.stop();
+        _eventManager.fireEvent( event );
+      }
+    }
   }
 
   public RepositoryGAVMetadata findGAV( String repoGuid, RepositoryUpdatePolicy up, ArtifactCoordinates coord )
   throws MetadataCorruptionException
   {
     FileLockBundle lock = null;
+    GenericEvent event = null;
+    
     try
     {
       String gavKey = getGAVKey(coord);
       
+      if( _eventManager != null )
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.fsCache, EVENT_FIND_GAV, gavKey );
+      
       RepositoryGAVMetadata inMem = gavCache.get( gavKey );
       
       if( inMem != null )
@@ -154,6 +195,9 @@
           gavCache.put( gavKey, inMem );
         }
         
+        if( _eventManager != null )
+          event.setResult( "found in memory, expired is "+inMem.isExpired() );
+        
         return inMem;
       }
       
@@ -171,9 +215,15 @@
           
           if( up != null && up.timestampExpired( md.getLastCheck() ) )
             md.setExpired( true );
+
+          if( _eventManager != null )
+            event.setResult( "found on disk, expired is "+inMem.isExpired() );
           
           gavCache.put(  gavKey, md );
       }
+      else
+        if( _eventManager != null )
+          event.setResult( "not found" );
       
       return md;
     }
@@ -183,7 +233,14 @@
     }
     finally
     {
-      if( lock != null ) lock.release();
+      if( lock != null )
+        lock.release();
+
+      if( _eventManager != null )
+      {
+        event.stop();
+        _eventManager.fireEvent( event );
+      }
     }
   }
   
@@ -191,10 +248,16 @@
   throws MetadataCacheException
   {
     FileLockBundle lock = null;
+
+    GenericEvent event = null;
+    
     try
     {
       String gaKey = getGAKey( gam.getGA() );
       
+      if( _eventManager != null )
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.fsCache, EVENT_UPDATE_GA, gaKey );
+      
       File gaDir = getGADir( gam.getGA() );
       
       lock = FileUtil.lockDir( gaDir.getCanonicalPath(), 500L, 5L );
@@ -214,21 +277,34 @@
     finally
     {
       if( lock != null ) lock.release();
+
+      if( _eventManager != null )
+      {
+        event.stop();
+        _eventManager.fireEvent( event );
+      }
     }
   }
 
-  /* (non-Javadoc)
-   * @see org.apache.maven.mercury.repository.api.RepositoryMetadataCache#updateGAV(java.lang.String, org.apache.maven.mercury.repository.api.RepositoryGAVMetadata)
-   */
   public void updateGAV( String repoGuid, RepositoryGAVMetadata gavm )
   throws MetadataCacheException
   {
+    FileLockBundle lock = null;
+
+    GenericEvent event = null;
+    
     try
     {
       String gavKey = getGAKey( gavm.getGAV() );
+
+      if( _eventManager != null )
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.fsCache, EVENT_UPDATE_GA, gavKey );
+      
       
       File gavDir = getGAVDir( gavm.getGAV() );
       
+      lock = FileUtil.lockDir( gavDir.getCanonicalPath(), 500L, 5L );
+
       File gavmF = getGAVFile( gavDir, repoGuid );
       
       CachedGAVMetadata md = new CachedGAVMetadata( gavm );
@@ -241,19 +317,39 @@
     {
       throw new MetadataCacheException( e.getMessage() );
     }
+    finally
+    {
+      if( lock != null ) lock.release();
+
+      if( _eventManager != null )
+      {
+        event.stop();
+        _eventManager.fireEvent( event );
+      }
+    }
   }
 
   public byte[] findRaw( ArtifactBasicMetadata bmd )
   throws MetadataCacheException
   {
+    GenericEvent event = null;
+    
     try
     {
       String rawKey = bmd.getGAV();
       
+      if( _eventManager != null )
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.fsCache, EVENT_FIND_RAW, rawKey );
+      
       byte [] res = rawCache.get( rawKey );
       
       if( res != null )
+      {
+        if( _eventManager != null )
+          event.setResult( "found in memory" );
+        
         return res;
+      }
       
       // locking is provided by underlying OS, don't waste the effort
       File f = new File( getGAVDir( bmd.getEffectiveCoordinates() )
@@ -267,22 +363,38 @@
       
       rawCache.put( rawKey, res );
       
+      if( _eventManager != null )
+        event.setResult( "found on disk" );
+      
       return res; 
     }
     catch( IOException e )
     {
       throw new MetadataCacheException( e.getMessage() );
     }
+    finally
+    {
+      if( _eventManager != null )
+      {
+        event.stop();
+        _eventManager.fireEvent( event );
+      }
+    }
   }
 
   public void saveRaw( ArtifactBasicMetadata bmd, byte[] rawBytes )
   throws MetadataCacheException
   {
+    GenericEvent event = null;
+    
     // locking is provided by underlying OS, don't waste the effort
     try
     {
       String rawKey = bmd.getGAV();
       
+      if( _eventManager != null )
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.fsCache, EVENT_SAVE_RAW, rawKey );
+
       rawCache.put( rawKey, rawBytes );
       
       File f = new File( getGAVDir( bmd.getEffectiveCoordinates() )
@@ -295,6 +407,14 @@
     {
       throw new MetadataCacheException( e.getMessage() );
     }
+    finally
+    {
+      if( _eventManager != null )
+      {
+        event.stop();
+        _eventManager.fireEvent( event );
+      }
+    }
   }
   //---------------------------------------------------------------------------------------
   private String getGAKey( ArtifactCoordinates coord )
@@ -347,4 +467,27 @@
     return new File( gavDir, "meta-gav-"+repoGuid+".xml" );
   }
 
+
+  public void register( MercuryEventListener listener )
+  {
+    if( _eventManager == null )
+      _eventManager = new EventManager();
+      
+    _eventManager.register( listener );
+  }
+
+  public void unRegister( MercuryEventListener listener )
+  {
+    if( _eventManager != null )
+      _eventManager.unRegister( listener );
+  }
+  
+  public void setEventManager( EventManager eventManager )
+  {
+    if( _eventManager == null )
+      _eventManager = eventManager;
+    else
+      _eventManager.getListeners().addAll( eventManager.getListeners() );
+      
+  }
 }

Modified: maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java (original)
+++ maven/mercury/trunk/mercury-repo/mercury-repo-virtual/src/main/java/org/apache/maven/mercury/repository/virtual/VirtualRepositoryReader.java Thu Nov 20 23:04:56 2008
@@ -34,6 +34,7 @@
 import org.apache.maven.mercury.util.event.EventGenerator;
 import org.apache.maven.mercury.util.event.EventManager;
 import org.apache.maven.mercury.util.event.GenericEvent;
+import org.apache.maven.mercury.util.event.MercuryEvent;
 import org.apache.maven.mercury.util.event.MercuryEventListener;
 import org.codehaus.plexus.lang.DefaultLanguage;
 import org.codehaus.plexus.lang.Language;
@@ -49,19 +50,19 @@
 public class VirtualRepositoryReader
 implements MetadataReader, EventGenerator
 {
-  public static final String EVENT_READ_ARTIFACTS = "vr.read.artifacts";
-  public static final String EVENT_READ_ARTIFACTS_FROM_REPO = "vr.read.artifacts.from.repo";
-  public static final String EVENT_READ_ARTIFACTS_FROM_REPO_QUALIFIED = "vr.read.artifacts.from.repo.qualified";
-  public static final String EVENT_READ_ARTIFACTS_FROM_REPO_UNQUALIFIED = "vr.read.artifacts.from.repo.unqualified";
+  public static final String EVENT_READ_ARTIFACTS = "read.artifacts";
+  public static final String EVENT_READ_ARTIFACTS_FROM_REPO = "read.artifacts.from.repo";
+  public static final String EVENT_READ_ARTIFACTS_FROM_REPO_QUALIFIED = "read.artifacts.from.repo.qualified";
+  public static final String EVENT_READ_ARTIFACTS_FROM_REPO_UNQUALIFIED = "read.artifacts.from.repo.unqualified";
   
-  public static final String EVENT_READ_VERSIONS = "vr.read.versions";
-  public static final String EVENT_READ_VERSIONS_FROM_REPO = "vr.read.versions.from.repo";
+  public static final String EVENT_READ_VERSIONS = "read.versions";
+  public static final String EVENT_READ_VERSIONS_FROM_REPO = "read.versions.from.repo";
   
-  public static final String EVENT_READ_DEPENDENCIES = "vr.read.dependencies";
-  public static final String EVENT_READ_DEPENDENCIES_FROM_REPO = "vr.read.dependencies.from.repo";
+  public static final String EVENT_READ_DEPENDENCIES = "read.dependencies";
+  public static final String EVENT_READ_DEPENDENCIES_FROM_REPO = "read.dependencies.from.repo";
   
   public static final String EVENT_READ_RAW = "vr.read.raw";
-  public static final String EVENT_READ_RAW_FROM_REPO = "vr.read.raw.from.repo";
+  public static final String EVENT_READ_RAW_FROM_REPO = "read.raw.from.repo";
   
   /** file system cache subfolder */
   public static final String METADATA_CACHE_DIR = ".cache";
@@ -181,6 +182,9 @@
           try
           {
             _mdCache = getCache( _localRepository.getDirectory() );
+            
+            if( _eventManager != null )
+              _mdCache.setEventManager( _eventManager );
           }
           catch( IOException e )
           {
@@ -222,7 +226,7 @@
     {
       
       if( _eventManager != null )
-        event = new GenericEvent( EVENT_READ_VERSIONS );
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.virtualRepositoryReader, EVENT_READ_VERSIONS );
       
       ArtifactBasicResults res = null;
       ArtifactListProcessor tp = _processors == null ? null : _processors.get( ArtifactListProcessor.FUNCTION_TP );
@@ -233,7 +237,7 @@
       try 
       {
         if( _eventManager!= null )
-          eventRead = new GenericEvent( EVENT_READ_VERSIONS_FROM_REPO, rr.getRepository().getId() );
+          eventRead = new GenericEvent( MercuryEvent.EventTypeEnum.virtualRepositoryReader, EVENT_READ_VERSIONS_FROM_REPO, rr.getRepository().getId() );
           
         ArtifactBasicResults repoRes = rr.readVersions( query );
         
@@ -257,7 +261,7 @@
             
             if( Util.isEmpty( rorRes ) )
             {
-              eventRead.setError( "none found" );
+              eventRead.setResult( "none found" );
               continue;
             }
             
@@ -306,7 +310,7 @@
     {
       
       if( _eventManager != null )
-        event = new GenericEvent(EVENT_READ_DEPENDENCIES, bmd.toString() );
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.virtualRepositoryReader, EVENT_READ_DEPENDENCIES, bmd.toString() );
       
       init();
       
@@ -332,7 +336,7 @@
       {
         
         if( _eventManager != null )
-          eventRead = new GenericEvent( EVENT_READ_DEPENDENCIES_FROM_REPO, rr.getRepository().getId() );
+          eventRead = new GenericEvent( MercuryEvent.EventTypeEnum.virtualRepositoryReader, EVENT_READ_DEPENDENCIES_FROM_REPO, rr.getRepository().getId() );
         
         ArtifactBasicResults res = rr.readDependencies( query );
         
@@ -357,7 +361,7 @@
       }
       
       if( _eventManager != null )
-        event.setError( "not found" );
+        event.setResult( "not found" );
       
       return md;
     }
@@ -435,7 +439,7 @@
       ArtifactResults res = null;
 
       if( _eventManager != null )
-        event = new GenericEvent( EVENT_READ_ARTIFACTS, "" );
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.virtualRepositoryReader, EVENT_READ_ARTIFACTS, "" );
       
       if( Util.isEmpty( query ) )
         return res;
@@ -462,7 +466,7 @@
         try
         {
           if( _eventManager != null )
-            eventRead = new GenericEvent( EVENT_READ_ARTIFACTS_FROM_REPO_QUALIFIED, repoId );
+            eventRead = new GenericEvent( MercuryEvent.EventTypeEnum.virtualRepositoryReader, EVENT_READ_ARTIFACTS_FROM_REPO_QUALIFIED, repoId );
           
           List<ArtifactBasicMetadata> rrQuery = buckets.get( rr );
           
@@ -514,7 +518,7 @@
           try
           {
             if( _eventManager != null )
-              eventRead = new GenericEvent( EVENT_READ_ARTIFACTS_FROM_REPO_UNQUALIFIED, repoId );
+              eventRead = new GenericEvent( MercuryEvent.EventTypeEnum.virtualRepositoryReader, EVENT_READ_ARTIFACTS_FROM_REPO_UNQUALIFIED, repoId );
             
             ArtifactResults rrRes = rr.readArtifacts( rejects );
             
@@ -596,7 +600,7 @@
                   + (Util.isEmpty( classifier )?"":", classifier="+classifier)
                   + (Util.isEmpty( type )?"":", type="+type)
                     ;
-        event = new GenericEvent( EVENT_READ_RAW, eventTag );
+        event = new GenericEvent( MercuryEvent.EventTypeEnum.virtualRepositoryReader, EVENT_READ_RAW, eventTag );
       }
       
       ArtifactBasicMetadata bmdQuery = bmd;
@@ -663,7 +667,7 @@
         try
         {
           if( _eventManager != null )
-            eventRead = new GenericEvent( EVENT_READ_RAW_FROM_REPO, rr.getRepository().getId()+": "+eventTag );
+            eventRead = new GenericEvent( MercuryEvent.EventTypeEnum.virtualRepositoryReader, EVENT_READ_RAW_FROM_REPO, rr.getRepository().getId()+": "+eventTag );
           
           res = rr.readRawData( bmdQuery, classifier, type );
           if( res != null )
@@ -678,7 +682,7 @@
           }
           
           if( _eventManager != null )
-            eventRead.setError( "not found" );
+            eventRead.setResult( "not found" );
         }
         finally
         {

Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/AbstractMercuryEvent.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/AbstractMercuryEvent.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/AbstractMercuryEvent.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/AbstractMercuryEvent.java Thu Nov 20 23:04:56 2008
@@ -13,11 +13,13 @@
 public abstract class AbstractMercuryEvent
 implements MercuryEvent
 {
-  String type;
+  MercuryEvent.EventTypeEnum type;
+  
+  String name;
   
   String tag;
   
-  String error;
+  String result;
   
   long start;
   
@@ -30,15 +32,16 @@
     start();
   }
   
-  public AbstractMercuryEvent( String type )
+  public AbstractMercuryEvent( MercuryEvent.EventTypeEnum type, String name )
   {
     this();
     this.type = type;
+    this.name = name;
   }
   
-  public AbstractMercuryEvent( String type, String tag )
+  public AbstractMercuryEvent( MercuryEvent.EventTypeEnum type, String name, String tag )
   {
-    this( type );
+    this( type, name );
     this.tag = tag;
   }
 
@@ -57,29 +60,34 @@
     return start;
   }
 
-  public String getType()
+  public MercuryEvent.EventTypeEnum getType()
   {
     return type;
   }
 
+  public String getName()
+  {
+    return name;
+  }
+
   public String getTag()
   {
     return tag;
   }
 
-  public String getError()
+  public String getResult()
   {
-    return error;
+    return result;
   }
 
-  public void setError( String error )
+  public void setResult( String result )
   {
-    this.error = error;
+    this.result = result;
   }
 
-  public boolean hasError()
+  public boolean hasResult()
   {
-    return error != null;
+    return result != null;
   }
 
   public Object getPayload( String name )

Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/DumbListener.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/DumbListener.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/DumbListener.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/DumbListener.java Thu Nov 20 23:04:56 2008
@@ -5,6 +5,8 @@
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 
+import org.apache.maven.mercury.util.event.MercuryEvent.EventMask;
+
 /**
  *
  *
@@ -41,4 +43,9 @@
     }
   }
 
+  public EventMask getMask()
+  {
+    return null;
+  }
+
 }

Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/EventManager.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/EventManager.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/EventManager.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/EventManager.java Thu Nov 20 23:04:56 2008
@@ -27,9 +27,9 @@
   
   public static final int THREAD_COUNT = 4;
   
-  List<MercuryEventListener> listeners = new ArrayList<MercuryEventListener>(8);
+  final List<MercuryEventListener> _listeners = new ArrayList<MercuryEventListener>(8);
   
-  final LinkedBlockingQueue<UnitOfWork> queue = new LinkedBlockingQueue<UnitOfWork>( 512 );
+  final LinkedBlockingQueue<UnitOfWork> _queue = new LinkedBlockingQueue<UnitOfWork>( 512 );
   
   ExecutorService execService;
   
@@ -37,31 +37,36 @@
   {
     execService = Executors.newFixedThreadPool( THREAD_COUNT );
     for( int i = 0; i < THREAD_COUNT; i++ )
-      execService.execute( new Runner( queue ) );
+      execService.execute( new Runner( _queue ) );
   }
   
   public void register( MercuryEventListener listener )
   {
-    listeners.add( listener );
+    _listeners.add( listener );
   }
   
   public void unRegister( MercuryEventListener listener )
   {
-    listeners.remove( listener );
+    _listeners.remove( listener );
+  }
+  
+  public List<MercuryEventListener> getListeners()
+  {
+    return _listeners;
   }
   
   public void fireEvent( MercuryEvent event )
   {
-    for( MercuryEventListener listener : listeners )
-      queue.add( new UnitOfWork( listener, event ) );
+    for( MercuryEventListener listener : _listeners )
+      _queue.add( new UnitOfWork( listener, event ) );
   }
 
   public static final String toString( MercuryEvent event )
   {
     return new Date( event.getStart() )+", dur: "+ event.getDuration()+" millis :"
-    		   + " ["+ event.getType()+"] "
+    		   + " ["+ event.getType()+":"+event.getName()+"] "
     		   + ( Util.isEmpty( event.getTag() ) ? "" : ", tag: "+event.getTag() )
-           + ( Util.isEmpty( event.getError() ) ? "" : ", error: "+event.getError() )
+           + ( Util.isEmpty( event.getResult() ) ? "" : ", result: "+event.getResult() )
     ;
   }
 

Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/GenericEvent.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/GenericEvent.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/GenericEvent.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/GenericEvent.java Thu Nov 20 23:04:56 2008
@@ -11,14 +11,14 @@
 extends AbstractMercuryEvent
 {
 
-  public GenericEvent( String type )
+  public GenericEvent( MercuryEvent.EventTypeEnum type, String name )
   {
-    super(type);
+    super(type, name);
   }
 
-  public GenericEvent( String type, String tag )
+  public GenericEvent( MercuryEvent.EventTypeEnum type, String name, String tag )
   {
-    super( type, tag );
+    super( type, name, tag );
   }
 
   public void setTag( String tag )

Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEvent.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEvent.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEvent.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEvent.java Thu Nov 20 23:04:56 2008
@@ -1,9 +1,10 @@
 package org.apache.maven.mercury.util.event;
 
+import java.util.BitSet;
 import java.util.Map;
 
 /**
- *
+ * 
  *
  * @author Oleg Gusakov
  * @version $Id$
@@ -11,14 +12,61 @@
  */
 public interface MercuryEvent
 {
+  enum EventTypeEnum
+  {
+      dependencyBuilder(0)
+    , satSolver(1)
+    
+    , virtualRepositoryReader(2)
+    
+    , localRepository(3)
+    , localRepositoryReader(4)
+    , localRepositoryWriter(5)
+    
+    , remoteRepository(6)
+    , remoteRepositoryReader(7)
+    , remoteRepositoryWriter(8)
+    
+    , cache(9)
+    , fsCache(10)
+    ;
+    
+    int bitNo;
+    
+    EventTypeEnum( int bitNo )
+    {
+      this.bitNo = bitNo;
+    }
+  }
+
+  @SuppressWarnings("serial")
+  class EventMask
+  extends BitSet
+  {
+    public EventMask( EventTypeEnum... bits )
+    {
+      super();
+      
+      for( EventTypeEnum bit : bits )
+        set( bit.bitNo );
+    }
+  }
+
   /**
    * event type 
    * 
-   * @return
+   * @return 
    */
-  String getType();
+  EventTypeEnum getType();
 
   /**
+   * event name inside type 
+   * 
+   * @return
+   */
+  String getName();
+  
+  /**
    * aggregation tag of this event. Used to trace event propagation in the system 
    * 
    * @return
@@ -45,15 +93,15 @@
   
 
   /**
-   * error field
+   * result field
    * 
    * @return
    */
-  public String getError();
+  public String getResult();
 
-  public void setError( String error );
+  public void setResult( String result );
 
-  public boolean hasError();
+  public boolean hasResult();
   
   /**
    * duration of this event in millis

Modified: maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEventListener.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEventListener.java?rev=719517&r1=719516&r2=719517&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEventListener.java (original)
+++ maven/mercury/trunk/mercury-util/src/main/java/org/apache/maven/mercury/util/event/MercuryEventListener.java Thu Nov 20 23:04:56 2008
@@ -9,5 +9,17 @@
  */
 public interface MercuryEventListener
 {
+  /**
+   * identifies what events this listrener is interested in. 
+   * 
+   * @return the mask - BitSet of event type bits, or null, if this listener wants to be notified of all events 
+   */
+  MercuryEvent.EventMask getMask();
+  
+  /**
+   * this is called when an event matching the listener mask is generated
+   * 
+   * @param event
+   */
   void fire( MercuryEvent event );
 }