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 );
}