You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by br...@apache.org on 2010/12/29 07:14:07 UTC

svn commit: r1053542 [6/7] - in /archiva/trunk/archiva-modules: archiva-base/archiva-consumers/archiva-core-consumers/ archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/ archiva-base/...

Modified: archiva/trunk/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java (original)
+++ archiva/trunk/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java Wed Dec 29 06:14:04 2010
@@ -40,18 +40,14 @@ import java.util.TimeZone;
 public class DefaultAuditManager
     implements AuditManager
 {
-    /**
-     * @plexus.requirement
-     */
-    private MetadataRepository metadataRepository;
-
-    private static final int NUM_RECENT_REVENTS = 10;
+    private static final int NUM_RECENT_EVENTS = 10;
 
     private static final Logger log = LoggerFactory.getLogger( DefaultAuditManager.class );
 
     private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
 
-    public List<AuditEvent> getMostRecentAuditEvents( List<String> repositoryIds )
+    public List<AuditEvent> getMostRecentAuditEvents( MetadataRepository metadataRepository,
+                                                      List<String> repositoryIds )
         throws MetadataRepositoryException
     {
         // TODO: consider a more efficient implementation that directly gets the last ten from the content repository
@@ -65,7 +61,7 @@ public class DefaultAuditManager
             }
         }
         Collections.sort( records );
-        records = records.subList( 0, records.size() < NUM_RECENT_REVENTS ? records.size() : NUM_RECENT_REVENTS );
+        records = records.subList( 0, records.size() < NUM_RECENT_EVENTS ? records.size() : NUM_RECENT_EVENTS );
 
         List<AuditEvent> events = new ArrayList<AuditEvent>( records.size() );
         for ( AuditRecord record : records )
@@ -78,29 +74,31 @@ public class DefaultAuditManager
         return events;
     }
 
-    public void addAuditEvent( AuditEvent event )
+    public void addAuditEvent( MetadataRepository repository, AuditEvent event )
         throws MetadataRepositoryException
     {
         // ignore those with no repository - they will still be logged to the textual audit log
         if ( event.getRepositoryId() != null )
         {
-            metadataRepository.addMetadataFacet( event.getRepositoryId(), event );
+            repository.addMetadataFacet( event.getRepositoryId(), event );
         }
     }
 
-    public void deleteAuditEvents( String repositoryId )
+    public void deleteAuditEvents( MetadataRepository metadataRepository, String repositoryId )
         throws MetadataRepositoryException
     {
         metadataRepository.removeMetadataFacets( repositoryId, AuditEvent.FACET_ID );
     }
 
-    public List<AuditEvent> getAuditEventsInRange( Collection<String> repositoryIds, Date startTime, Date endTime )
+    public List<AuditEvent> getAuditEventsInRange( MetadataRepository metadataRepository,
+                                                   Collection<String> repositoryIds, Date startTime, Date endTime )
         throws MetadataRepositoryException
     {
-        return getAuditEventsInRange( repositoryIds, null, startTime, endTime );
+        return getAuditEventsInRange( metadataRepository, repositoryIds, null, startTime, endTime );
     }
 
-    public List<AuditEvent> getAuditEventsInRange( Collection<String> repositoryIds, String resource, Date startTime,
+    public List<AuditEvent> getAuditEventsInRange( MetadataRepository metadataRepository,
+                                                   Collection<String> repositoryIds, String resource, Date startTime,
                                                    Date endTime )
         throws MetadataRepositoryException
     {
@@ -150,11 +148,6 @@ public class DefaultAuditManager
         return fmt;
     }
 
-    public void setMetadataRepository( MetadataRepository metadataRepository )
-    {
-        this.metadataRepository = metadataRepository;
-    }
-
     private static final class AuditRecord
         implements Comparable<AuditRecord>
     {

Modified: archiva/trunk/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java (original)
+++ archiva/trunk/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java Wed Dec 29 06:14:04 2010
@@ -20,6 +20,8 @@ package org.apache.archiva.audit;
  */
 
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
+import org.apache.archiva.metadata.repository.RepositorySession;
+import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -36,20 +38,34 @@ public class MetadataAuditListener
      */
     private AuditManager auditManager;
 
+    /**
+     * FIXME: this could be multiple implementations and needs to be configured. It also starts a separate session to
+     * the originator of the audit event that we may rather want to pass through.
+     *
+     * @plexus.requirement
+     */
+    private RepositorySessionFactory repositorySessionFactory;
+
     public void auditEvent( AuditEvent event )
     {
         // for now we only log upload events, some of the others are quite noisy
         if ( event.getAction().equals( AuditEvent.CREATE_FILE ) || event.getAction().equals( AuditEvent.UPLOAD_FILE ) ||
             event.getAction().equals( AuditEvent.MERGING_REPOSITORIES ) )
         {
+            RepositorySession repositorySession = repositorySessionFactory.createSession();
             try
             {
-                auditManager.addAuditEvent( event );
+                auditManager.addAuditEvent( repositorySession.getRepository(), event );
+                repositorySession.save();
             }
             catch ( MetadataRepositoryException e )
             {
                 log.warn( "Unable to write audit event to repository: " + e.getMessage(), e );
             }
+            finally
+            {
+                repositorySession.close();
+            }
         }
     }
 }

Modified: archiva/trunk/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java (original)
+++ archiva/trunk/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java Wed Dec 29 06:14:04 2010
@@ -78,7 +78,6 @@ public class AuditManagerTest
 
         metadataRepositoryControl = MockControl.createControl( MetadataRepository.class );
         metadataRepository = (MetadataRepository) metadataRepositoryControl.getMock();
-        auditManager.setMetadataRepository( metadataRepository );
 
         ManagedRepositoryConfiguration repository = new ManagedRepositoryConfiguration();
         repository.setId( TEST_REPO_ID );
@@ -108,7 +107,8 @@ public class AuditManagerTest
         }
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getMostRecentAuditEvents( Collections.singletonList( TEST_REPO_ID ) );
+        List<AuditEvent> events = auditManager.getMostRecentAuditEvents( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ) );
         assertNotNull( events );
         assertEquals( numEvents - 1, events.size() );
         int expectedTimestampCounter = numEvents - 1;
@@ -144,7 +144,8 @@ public class AuditManagerTest
         }
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getMostRecentAuditEvents( Collections.singletonList( TEST_REPO_ID ) );
+        List<AuditEvent> events = auditManager.getMostRecentAuditEvents( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ) );
         assertNotNull( events );
         assertEquals( numEvents, events.size() );
         int expectedTimestampCounter = numEvents - 1;
@@ -190,7 +191,8 @@ public class AuditManagerTest
         }
         metadataRepositoryControl.replay();
 
-        events = auditManager.getMostRecentAuditEvents( Arrays.asList( TEST_REPO_ID, TEST_REPO_ID_2 ) );
+        events = auditManager.getMostRecentAuditEvents( metadataRepository, Arrays.asList( TEST_REPO_ID,
+                                                                                           TEST_REPO_ID_2 ) );
         assertNotNull( events );
         assertEquals( numEvents - 1, events.size() );
         int expectedTimestampCounter = numEvents - 1;
@@ -214,7 +216,8 @@ public class AuditManagerTest
                                                    Collections.emptyList() );
         metadataRepositoryControl.replay();
 
-        assertTrue( auditManager.getMostRecentAuditEvents( Collections.singletonList( TEST_REPO_ID ) ).isEmpty() );
+        assertTrue( auditManager.getMostRecentAuditEvents( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ) ).isEmpty() );
 
         metadataRepositoryControl.verify();
     }
@@ -229,7 +232,7 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        auditManager.addAuditEvent( event );
+        auditManager.addAuditEvent( metadataRepository, event );
 
         metadataRepositoryControl.verify();
     }
@@ -244,7 +247,7 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        auditManager.addAuditEvent( event );
+        auditManager.addAuditEvent( metadataRepository, event );
 
         metadataRepositoryControl.verify();
     }
@@ -257,7 +260,7 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        auditManager.deleteAuditEvents( TEST_REPO_ID );
+        auditManager.deleteAuditEvents( metadataRepository, TEST_REPO_ID );
 
         metadataRepositoryControl.verify();
     }
@@ -286,9 +289,8 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getAuditEventsInRange( Collections.singletonList( TEST_REPO_ID ),
-                                                                      new Date( current.getTime() - 4000 ), new Date(
-                current.getTime() - 2000 ) );
+        List<AuditEvent> events = auditManager.getAuditEventsInRange( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ), new Date( current.getTime() - 4000 ), new Date( current.getTime() - 2000 ) );
 
         assertEquals( 1, events.size() );
         assertTestEvent( events.get( 0 ), TIMESTAMP_FORMAT.format( expectedTimestamp ), expectedEvent.getResource() );
@@ -323,8 +325,8 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getAuditEventsInRange( Collections.singletonList( TEST_REPO_ID ),
-                                                                      new Date( current.getTime() - 4000 ), current );
+        List<AuditEvent> events = auditManager.getAuditEventsInRange( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ), new Date( current.getTime() - 4000 ), current );
 
         assertEquals( 2, events.size() );
         assertTestEvent( events.get( 0 ), TIMESTAMP_FORMAT.format( ts3 ), expectedEvent3.getResource() );
@@ -360,9 +362,8 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getAuditEventsInRange( Collections.singletonList( TEST_REPO_ID ),
-                                                                      new Date( current.getTime() - 20000 ), new Date(
-                current.getTime() - 2000 ) );
+        List<AuditEvent> events = auditManager.getAuditEventsInRange( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ), new Date( current.getTime() - 20000 ), new Date( current.getTime() - 2000 ) );
 
         assertEquals( 2, events.size() );
         assertTestEvent( events.get( 0 ), TIMESTAMP_FORMAT.format( expectedTimestamp ), expectedEvent2.getResource() );
@@ -403,8 +404,8 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getAuditEventsInRange( Collections.singletonList( TEST_REPO_ID ),
-                                                                      new Date( current.getTime() - 20000 ), current );
+        List<AuditEvent> events = auditManager.getAuditEventsInRange( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ), new Date( current.getTime() - 20000 ), current );
 
         assertEquals( 3, events.size() );
         assertTestEvent( events.get( 0 ), TIMESTAMP_FORMAT.format( ts3 ), expectedEvent3.getResource() );
@@ -447,9 +448,8 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getAuditEventsInRange( Collections.singletonList( TEST_REPO_ID ),
-                                                                      TEST_RESOURCE_BASE, new Date(
-                current.getTime() - 20000 ), current );
+        List<AuditEvent> events = auditManager.getAuditEventsInRange( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ), TEST_RESOURCE_BASE, new Date( current.getTime() - 20000 ), current );
 
         assertEquals( 2, events.size() );
         assertTestEvent( events.get( 0 ), TIMESTAMP_FORMAT.format( ts3 ), expectedEvent3.getResource() );
@@ -489,8 +489,8 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getAuditEventsInRange( Collections.singletonList( TEST_REPO_ID ), "foo",
-                                                                      new Date( current.getTime() - 20000 ), current );
+        List<AuditEvent> events = auditManager.getAuditEventsInRange( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ), "foo", new Date( current.getTime() - 20000 ), current );
 
         assertEquals( 0, events.size() );
 
@@ -533,7 +533,8 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getAuditEventsInRange( Arrays.asList( TEST_REPO_ID, TEST_REPO_ID_2 ),
+        List<AuditEvent> events = auditManager.getAuditEventsInRange( metadataRepository, Arrays.asList( TEST_REPO_ID,
+                                                                                                         TEST_REPO_ID_2 ),
                                                                       new Date( current.getTime() - 20000 ), current );
 
         assertEquals( 3, events.size() );
@@ -561,9 +562,8 @@ public class AuditManagerTest
 
         metadataRepositoryControl.replay();
 
-        List<AuditEvent> events = auditManager.getAuditEventsInRange( Collections.singletonList( TEST_REPO_ID ),
-                                                                      new Date( current.getTime() - 20000 ), new Date(
-                current.getTime() - 16000 ) );
+        List<AuditEvent> events = auditManager.getAuditEventsInRange( metadataRepository, Collections.singletonList(
+            TEST_REPO_ID ), new Date( current.getTime() - 20000 ), new Date( current.getTime() - 16000 ) );
 
         assertEquals( 0, events.size() );
 

Modified: archiva/trunk/archiva-modules/plugins/maven2-repository/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/pom.xml?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/pom.xml (original)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/pom.xml Wed Dec 29 06:14:04 2010
@@ -31,10 +31,6 @@
   <dependencies>
     <dependency>
       <groupId>org.apache.archiva</groupId>
-      <artifactId>problem-reports</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.archiva</groupId>
       <artifactId>metadata-model</artifactId>
     </dependency>
     <dependency>

Modified: archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DefaultDependencyTreeBuilder.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DefaultDependencyTreeBuilder.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DefaultDependencyTreeBuilder.java (original)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/dependency/tree/maven2/DefaultDependencyTreeBuilder.java Wed Dec 29 06:14:04 2010
@@ -21,6 +21,8 @@ package org.apache.archiva.dependency.tr
 
 import org.apache.archiva.metadata.repository.MetadataResolutionException;
 import org.apache.archiva.metadata.repository.MetadataResolver;
+import org.apache.archiva.metadata.repository.RepositorySession;
+import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
 import org.apache.archiva.metadata.repository.storage.maven2.RepositoryModelResolver;
 import org.apache.commons.lang.StringUtils;
@@ -100,9 +102,11 @@ public class DefaultDependencyTreeBuilde
     private ModelBuilder builder;
 
     /**
+     * TODO: can have other types, and this might eventually come through from the main request
+     *
      * @plexus.requirement
      */
-    private MetadataResolver metadataResolver;
+    private RepositorySessionFactory repositorySessionFactory;
 
     /**
      * @plexus.requirement role-hint="maven2"
@@ -138,12 +142,21 @@ public class DefaultDependencyTreeBuilde
 
             Set<Artifact> dependencyArtifacts = createArtifacts( model, null );
 
-            ArtifactMetadataSource metadataSource = new MetadataArtifactMetadataSource( repositoryIds );
+            RepositorySession repositorySession = repositorySessionFactory.createSession();
+            try
+            {
+                ArtifactMetadataSource metadataSource = new MetadataArtifactMetadataSource( repositoryIds,
+                                                                                            repositorySession );
 
-            // Note that we don't permit going to external repositories. We don't need to pass in a local and remote
-            // since our metadata source has control over them
-            collector.collect( dependencyArtifacts, projectArtifact, managedVersions, null, null, metadataSource, null,
-                               Collections.singletonList( listener ) );
+                // Note that we don't permit going to external repositories. We don't need to pass in a local and remote
+                // since our metadata source has control over them
+                collector.collect( dependencyArtifacts, projectArtifact, managedVersions, null, null, metadataSource,
+                                   null, Collections.singletonList( listener ) );
+            }
+            finally
+            {
+                repositorySession.close();
+            }
 
             DependencyNode rootNode = listener.getRootNode();
 
@@ -347,9 +360,15 @@ public class DefaultDependencyTreeBuilde
     {
         private final List<String> repositoryIds;
 
-        public MetadataArtifactMetadataSource( List<String> repositoryIds )
+        private final RepositorySession session;
+
+        private final MetadataResolver resolver;
+
+        public MetadataArtifactMetadataSource( List<String> repositoryIds, RepositorySession session )
         {
             this.repositoryIds = repositoryIds;
+            this.session = session;
+            resolver = this.session.getResolver();
         }
 
         // modified version from MavenMetadataSource to work with the simpler environment
@@ -425,8 +444,8 @@ public class DefaultDependencyTreeBuilde
                 Collection<String> projectVersions;
                 try
                 {
-                    projectVersions = metadataResolver.resolveProjectVersions( repoId, artifact.getGroupId(),
-                                                                               artifact.getArtifactId() );
+                    projectVersions = resolver.resolveProjectVersions( session, repoId, artifact.getGroupId(),
+                                                                       artifact.getArtifactId() );
                 }
                 catch ( MetadataResolutionException e )
                 {

Modified: archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java (original)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java Wed Dec 29 06:14:04 2010
@@ -24,13 +24,11 @@ import org.apache.archiva.checksum.Check
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.ProjectMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.MetadataRepositoryException;
-import org.apache.archiva.metadata.repository.MetadataResolutionException;
 import org.apache.archiva.metadata.repository.filter.Filter;
 import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator;
 import org.apache.archiva.metadata.repository.storage.RepositoryStorage;
-import org.apache.archiva.reports.RepositoryProblemFacet;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataInvalidException;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataNotFoundException;
 import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
@@ -61,6 +59,14 @@ import java.util.Date;
 import java.util.List;
 
 /**
+ * Maven 2 repository format storage implementation. This class currently takes parameters to indicate the repository to
+ * deal with rather than being instantiated per-repository.
+ * FIXME: instantiate one per repository and allocate permanently from a factory (which can be obtained within the session).
+ * TODO: finish Maven 1 implementation to prove this API
+ *
+ * The session is passed in as an argument to obtain any necessary resources, rather than the class being instantiated
+ * within the session in the context of a single managed repository's resolution needs.
+ *
  * @plexus.component role="org.apache.archiva.metadata.repository.storage.RepositoryStorage" role-hint="maven2"
  */
 public class Maven2RepositoryStorage
@@ -81,24 +87,10 @@ public class Maven2RepositoryStorage
      */
     private RepositoryPathTranslator pathTranslator;
 
-    /**
-     * @plexus.requirement
-     */
-    private MetadataRepository metadataRepository;
-
     private final static Logger log = LoggerFactory.getLogger( Maven2RepositoryStorage.class );
 
     private static final String METADATA_FILENAME = "maven-metadata.xml";
 
-    private static final String PROBLEM_MISSING_POM = "missing-pom";
-
-    private static final String PROBLEM_INVALID_POM = "invalid-pom";
-
-    private static final String PROBLEM_MISLOCATED_POM = "mislocated-pom";
-
-    private static final List<String> POTENTIAL_PROBLEMS = Arrays.asList( PROBLEM_INVALID_POM, PROBLEM_MISSING_POM,
-                                                                          PROBLEM_MISLOCATED_POM );
-
     public ProjectMetadata readProjectMetadata( String repoId, String namespace, String projectId )
     {
         // TODO: could natively implement the "shared model" concept from the browse action to avoid needing it there?
@@ -107,22 +99,8 @@ public class Maven2RepositoryStorage
 
     public ProjectVersionMetadata readProjectVersionMetadata( String repoId, String namespace, String projectId,
                                                               String projectVersion )
-        throws MetadataResolutionException
+        throws RepositoryStorageMetadataNotFoundException, RepositoryStorageMetadataInvalidException
     {
-        // Remove problems associated with this version, since we'll be re-adding any that still exist
-        // TODO: an event mechanism would remove coupling to the problem reporting plugin
-        // TODO: this removes all problems - do we need something that just removes the problems created by this resolver?
-        String name = RepositoryProblemFacet.createName( namespace, projectId, projectVersion, null );
-        try
-        {
-            metadataRepository.removeMetadataFacet( repoId, RepositoryProblemFacet.FACET_ID, name );
-        }
-        catch ( MetadataRepositoryException e )
-        {
-            log.warn( "Unable to remove repository problem facets for the version being removed: " + e.getMessage(),
-                      e );
-        }
-
         ManagedRepositoryConfiguration repositoryConfiguration =
             archivaConfiguration.getConfiguration().findManagedRepositoryById( repoId );
 
@@ -160,12 +138,9 @@ public class Maven2RepositoryStorage
 
         if ( !file.exists() )
         {
-            // TODO: an event mechanism would remove coupling to the problem reporting plugin
-            addProblemReport( repoId, namespace, projectId, projectVersion, PROBLEM_MISSING_POM,
-                              "The artifact's POM file '" + file + "' was missing" );
-
             // metadata could not be resolved
-            return null;
+            throw new RepositoryStorageMetadataNotFoundException(
+                "The artifact's POM file '" + file.getAbsolutePath() + "' was missing" );
         }
 
         ModelBuildingRequest req = new DefaultModelBuildingRequest();
@@ -181,10 +156,9 @@ public class Maven2RepositoryStorage
         }
         catch ( ModelBuildingException e )
         {
-            addProblemReport( repoId, namespace, projectId, projectVersion, PROBLEM_INVALID_POM,
-                              "The artifact's POM file '" + file + "' was invalid: " + e.getMessage() );
+            String msg = "The artifact's POM file '" + file + "' was invalid: " + e.getMessage();
 
-            throw new MetadataResolutionException( e.getMessage() );
+            throw new RepositoryStorageMetadataInvalidException( "invalid-pom", msg, e );
         }
 
         // Check if the POM is in the correct location
@@ -207,10 +181,7 @@ public class Maven2RepositoryStorage
                 message.append( "\nIncorrect version: " ).append( model.getVersion() );
             }
 
-            String msg = message.toString();
-            addProblemReport( repoId, namespace, projectId, projectVersion, PROBLEM_MISLOCATED_POM, msg );
-
-            throw new MetadataResolutionException( msg );
+            throw new RepositoryStorageMetadataInvalidException( "mislocated-pom", message.toString() );
         }
 
         ProjectVersionMetadata metadata = new ProjectVersionMetadata();
@@ -243,29 +214,6 @@ public class Maven2RepositoryStorage
         return metadata;
     }
 
-    private void addProblemReport( String repoId, String namespace, String projectId, String projectVersion,
-                                   String problemId, String message )
-    {
-        // TODO: an event mechanism would remove coupling to the problem reporting plugin and allow other plugins to
-        //       generate metadata on the fly if appropriately checked for missing facets in the resolver
-        RepositoryProblemFacet problem = new RepositoryProblemFacet();
-        problem.setProblem( problemId );
-        problem.setMessage( message );
-        problem.setProject( projectId );
-        problem.setNamespace( namespace );
-        problem.setRepositoryId( repoId );
-        problem.setVersion( projectVersion );
-
-        try
-        {
-            metadataRepository.addMetadataFacet( repoId, problem );
-        }
-        catch ( MetadataRepositoryException e )
-        {
-            log.warn( "Unable to add repository problem facets for the version being removed: " + e.getMessage(), e );
-        }
-    }
-
     private List<org.apache.archiva.metadata.model.Dependency> convertDependencies( List<Dependency> dependencies )
     {
         List<org.apache.archiva.metadata.model.Dependency> l =

Modified: archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataResolver.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataResolver.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataResolver.java (original)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestMetadataResolver.java Wed Dec 29 06:14:04 2010
@@ -25,43 +25,53 @@ import org.apache.archiva.metadata.model
 
 import java.util.Collection;
 
+// FIXME: remove - this is useless, better to mock it or avoid needing it
 public class TestMetadataResolver
     implements MetadataResolver
 {
-    public ProjectVersionMetadata resolveProjectVersion( String repoId, String namespace, String projectId,
-                                                         String projectVersion )
+    public ProjectVersionMetadata resolveProjectVersion( RepositorySession session, String repoId, String namespace,
+                                                         String projectId, String projectVersion )
+        throws MetadataResolutionException
     {
         return null;  //To change body of implemented methods use File | Settings | File Templates.
     }
 
-    public Collection<ProjectVersionReference> resolveProjectReferences( String repoId, String namespace,
-                                                                         String projectId, String projectVersion )
+    public Collection<ProjectVersionReference> resolveProjectReferences( RepositorySession session, String repoId,
+                                                                         String namespace, String projectId,
+                                                                         String projectVersion )
+        throws MetadataResolutionException
     {
         return null;  //To change body of implemented methods use File | Settings | File Templates.
     }
 
-    public Collection<String> resolveRootNamespaces( String repoId )
+    public Collection<String> resolveRootNamespaces( RepositorySession session, String repoId )
+        throws MetadataResolutionException
     {
         return null;  //To change body of implemented methods use File | Settings | File Templates.
     }
 
-    public Collection<String> resolveNamespaces( String repoId, String namespace )
+    public Collection<String> resolveNamespaces( RepositorySession session, String repoId, String namespace )
+        throws MetadataResolutionException
     {
         return null;  //To change body of implemented methods use File | Settings | File Templates.
     }
 
-    public Collection<String> resolveProjects( String repoId, String namespace )
+    public Collection<String> resolveProjects( RepositorySession session, String repoId, String namespace )
+        throws MetadataResolutionException
     {
         return null;  //To change body of implemented methods use File | Settings | File Templates.
     }
 
-    public Collection<String> resolveProjectVersions( String repoId, String namespace, String projectId )
+    public Collection<String> resolveProjectVersions( RepositorySession session, String repoId, String namespace,
+                                                      String projectId )
+        throws MetadataResolutionException
     {
         return null;  //To change body of implemented methods use File | Settings | File Templates.
     }
 
-    public Collection<ArtifactMetadata> resolveArtifacts( String repoId, String namespace, String projectId,
-                                                          String projectVersion )
+    public Collection<ArtifactMetadata> resolveArtifacts( RepositorySession session, String repoId, String namespace,
+                                                          String projectId, String projectVersion )
+        throws MetadataResolutionException
     {
         return null;  //To change body of implemented methods use File | Settings | File Templates.
     }

Added: archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java?rev=1053542&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java (added)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java Wed Dec 29 06:14:04 2010
@@ -0,0 +1,38 @@
+package org.apache.archiva.metadata.repository;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class TestRepositorySessionFactory
+    implements RepositorySessionFactory
+{
+    private MetadataRepository metadataRepository = new TestMetadataRepository();
+
+    private MetadataResolver resolver = new TestMetadataResolver();
+
+    public RepositorySession createSession()
+    {
+        return new RepositorySession( metadataRepository, resolver );
+    }
+
+    public void setMetadataRepository( MetadataRepository metadataRepository )
+    {
+        this.metadataRepository = metadataRepository;
+    }
+}

Modified: archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java (original)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.java Wed Dec 29 06:14:04 2010
@@ -21,17 +21,15 @@ package org.apache.archiva.metadata.repo
 
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.Dependency;
-import org.apache.archiva.metadata.model.FacetedMetadata;
 import org.apache.archiva.metadata.model.License;
 import org.apache.archiva.metadata.model.MailingList;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
-import org.apache.archiva.metadata.repository.MetadataRepository;
-import org.apache.archiva.metadata.repository.MetadataResolutionException;
 import org.apache.archiva.metadata.repository.filter.AllFilter;
 import org.apache.archiva.metadata.repository.filter.ExcludesFilter;
 import org.apache.archiva.metadata.repository.filter.Filter;
 import org.apache.archiva.metadata.repository.storage.RepositoryStorage;
-import org.apache.archiva.reports.RepositoryProblemFacet;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataInvalidException;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataNotFoundException;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
@@ -49,7 +47,7 @@ public class Maven2RepositoryMetadataRes
 {
     private static final Filter<String> ALL = new AllFilter<String>();
 
-    private Maven2RepositoryStorage resolver;
+    private Maven2RepositoryStorage storage;
 
     private static final String TEST_REPO_ID = "test";
 
@@ -63,8 +61,6 @@ public class Maven2RepositoryMetadataRes
 
     private static final String EMPTY_SHA1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
 
-    private MetadataRepository metadataRepository;
-
     public void setUp()
         throws Exception
     {
@@ -78,16 +74,14 @@ public class Maven2RepositoryMetadataRes
         c.addManagedRepository( testRepo );
         configuration.save( c );
 
-        resolver = (Maven2RepositoryStorage) lookup( RepositoryStorage.class, "maven2" );
-        metadataRepository = (MetadataRepository) lookup( MetadataRepository.class );
-        metadataRepository.removeMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID );
+        storage = (Maven2RepositoryStorage) lookup( RepositoryStorage.class, "maven2" );
     }
 
     public void testGetProjectVersionMetadata()
         throws Exception
     {
-        ProjectVersionMetadata metadata = resolver.readProjectVersionMetadata( TEST_REPO_ID, "org.apache.archiva",
-                                                                               "archiva-common", "1.2.1" );
+        ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( TEST_REPO_ID, "org.apache.archiva",
+                                                                              "archiva-common", "1.2.1" );
         MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
         assertEquals( "jar", facet.getPackaging() );
         assertEquals( "http://archiva.apache.org/ref/1.2.1/archiva-base/archiva-common", metadata.getUrl() );
@@ -140,9 +134,9 @@ public class Maven2RepositoryMetadataRes
     public void testGetArtifactMetadata()
         throws Exception
     {
-        Collection<ArtifactMetadata> springArtifacts = resolver.readArtifactsMetadata( TEST_REPO_ID,
-                                                                                       "org.codehaus.plexus",
-                                                                                       "plexus-spring", "1.2", ALL );
+        Collection<ArtifactMetadata> springArtifacts = storage.readArtifactsMetadata( TEST_REPO_ID,
+                                                                                      "org.codehaus.plexus",
+                                                                                      "plexus-spring", "1.2", ALL );
         List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( springArtifacts );
         Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
         {
@@ -182,9 +176,9 @@ public class Maven2RepositoryMetadataRes
     public void testGetArtifactMetadataSnapshots()
         throws Exception
     {
-        Collection<ArtifactMetadata> testArtifacts = resolver.readArtifactsMetadata( TEST_REPO_ID, "com.example.test",
-                                                                                     "test-artifact", "1.0-SNAPSHOT",
-                                                                                     ALL );
+        Collection<ArtifactMetadata> testArtifacts = storage.readArtifactsMetadata( TEST_REPO_ID, "com.example.test",
+                                                                                    "test-artifact", "1.0-SNAPSHOT",
+                                                                                    ALL );
         List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( testArtifacts );
         Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
         {
@@ -265,8 +259,8 @@ public class Maven2RepositoryMetadataRes
     public void testGetProjectVersionMetadataForTimestampedSnapshot()
         throws Exception
     {
-        ProjectVersionMetadata metadata = resolver.readProjectVersionMetadata( TEST_REPO_ID, "org.apache", "apache",
-                                                                               "5-SNAPSHOT" );
+        ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( TEST_REPO_ID, "org.apache", "apache",
+                                                                              "5-SNAPSHOT" );
         MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
         assertEquals( "pom", facet.getPackaging() );
         assertEquals( "http://www.apache.org/", metadata.getUrl() );
@@ -302,169 +296,175 @@ public class Maven2RepositoryMetadataRes
     public void testGetProjectVersionMetadataForTimestampedSnapshotMissingMetadata()
         throws Exception
     {
-        FacetedMetadata metadata = resolver.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test",
-                                                                        "missing-metadata", "1.0-SNAPSHOT" );
-        assertNull( metadata );
+        try
+        {
+            storage.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test", "missing-metadata", "1.0-SNAPSHOT" );
+            fail( "Should not be found" );
+        }
+        catch ( RepositoryStorageMetadataNotFoundException e )
+        {
+            assertEquals( "missing-pom", e.getId() );
+        }
     }
 
     public void testGetProjectVersionMetadataForTimestampedSnapshotMalformedMetadata()
         throws Exception
     {
-        FacetedMetadata metadata = resolver.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test",
-                                                                        "malformed-metadata", "1.0-SNAPSHOT" );
-        assertNull( metadata );
+        try
+        {
+            storage.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test", "malformed-metadata",
+                                                "1.0-SNAPSHOT" );
+            fail( "Should not be found" );
+        }
+        catch ( RepositoryStorageMetadataNotFoundException e )
+        {
+            assertEquals( "missing-pom", e.getId() );
+        }
     }
 
     public void testGetProjectVersionMetadataForTimestampedSnapshotIncompleteMetadata()
         throws Exception
     {
-        FacetedMetadata metadata = resolver.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test",
-                                                                        "incomplete-metadata", "1.0-SNAPSHOT" );
-        assertNull( metadata );
+        try
+        {
+            storage.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test", "incomplete-metadata",
+                                                "1.0-SNAPSHOT" );
+            fail( "Should not be found" );
+        }
+        catch ( RepositoryStorageMetadataNotFoundException e )
+        {
+            assertEquals( "missing-pom", e.getId() );
+        }
     }
 
     public void testGetProjectVersionMetadataForInvalidPom()
         throws Exception
     {
-        assertTrue( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );
-
         try
         {
-            resolver.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test", "invalid-pom", "1.0" );
+            storage.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test", "invalid-pom", "1.0" );
             fail( "Should have received an exception due to invalid POM" );
         }
-        catch ( MetadataResolutionException e )
+        catch ( RepositoryStorageMetadataInvalidException e )
         {
-            assertFalse( metadataRepository.getMetadataFacets( TEST_REPO_ID,
-                                                               RepositoryProblemFacet.FACET_ID ).isEmpty() );
-            RepositoryProblemFacet facet = (RepositoryProblemFacet) metadataRepository.getMetadataFacet( TEST_REPO_ID,
-                                                                                                         RepositoryProblemFacet.FACET_ID,
-                                                                                                         "com.example.test/invalid-pom/1.0" );
-            assertEquals( "invalid-pom", facet.getProblem() );
+            assertEquals( "invalid-pom", e.getId() );
         }
     }
 
     public void testGetProjectVersionMetadataForMislocatedPom()
         throws Exception
     {
-        assertTrue( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );
-
         try
         {
-            resolver.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test", "mislocated-pom", "1.0" );
+            storage.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test", "mislocated-pom", "1.0" );
             fail( "Should have received an exception due to mislocated POM" );
         }
-        catch ( MetadataResolutionException e )
+        catch ( RepositoryStorageMetadataInvalidException e )
         {
-            assertFalse( metadataRepository.getMetadataFacets( TEST_REPO_ID,
-                                                               RepositoryProblemFacet.FACET_ID ).isEmpty() );
-            RepositoryProblemFacet facet = (RepositoryProblemFacet) metadataRepository.getMetadataFacet( TEST_REPO_ID,
-                                                                                                         RepositoryProblemFacet.FACET_ID,
-                                                                                                         "com.example.test/mislocated-pom/1.0" );
-            assertEquals( "mislocated-pom", facet.getProblem() );
+            assertEquals( "mislocated-pom", e.getId() );
         }
     }
 
     public void testGetProjectVersionMetadataForMissingPom()
         throws Exception
     {
-        assertTrue( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );
-
-        FacetedMetadata metadata = resolver.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test", "missing-pom",
-                                                                        "1.0" );
-        assertNull( metadata );
-
-        assertFalse( metadataRepository.getMetadataFacets( TEST_REPO_ID, RepositoryProblemFacet.FACET_ID ).isEmpty() );
-        RepositoryProblemFacet facet = (RepositoryProblemFacet) metadataRepository.getMetadataFacet( TEST_REPO_ID,
-                                                                                                     RepositoryProblemFacet.FACET_ID,
-                                                                                                     "com.example.test/missing-pom/1.0" );
-        assertEquals( "missing-pom", facet.getProblem() );
-
+        try
+        {
+            storage.readProjectVersionMetadata( TEST_REPO_ID, "com.example.test", "missing-pom", "1.0" );
+            fail( "Should not be found" );
+        }
+        catch ( RepositoryStorageMetadataNotFoundException e )
+        {
+            assertEquals( "missing-pom", e.getId() );
+        }
     }
 
     public void testGetRootNamespaces()
     {
-        assertEquals( Arrays.asList( "com", "org" ), resolver.listRootNamespaces( TEST_REPO_ID, ALL ) );
+        assertEquals( Arrays.asList( "com", "org" ), storage.listRootNamespaces( TEST_REPO_ID, ALL ) );
     }
 
     public void testGetNamespaces()
     {
-        assertEquals( Arrays.asList( "example" ), resolver.listNamespaces( TEST_REPO_ID, "com", ALL ) );
-        assertEquals( Arrays.asList( "test" ), resolver.listNamespaces( TEST_REPO_ID, "com.example", ALL ) );
-        assertEquals( Collections.<String>emptyList(), resolver.listNamespaces( TEST_REPO_ID, "com.example.test",
-                                                                                ALL ) );
-
-        assertEquals( Arrays.asList( "apache", "codehaus" ), resolver.listNamespaces( TEST_REPO_ID, "org", ALL ) );
-        assertEquals( Arrays.asList( "archiva", "maven" ), resolver.listNamespaces( TEST_REPO_ID, "org.apache", ALL ) );
-        assertEquals( Collections.<String>emptyList(), resolver.listNamespaces( TEST_REPO_ID, "org.apache.archiva",
-                                                                                ALL ) );
-        assertEquals( Arrays.asList( "plugins", "shared" ), resolver.listNamespaces( TEST_REPO_ID, "org.apache.maven",
-                                                                                     ALL ) );
-        assertEquals( Collections.<String>emptyList(), resolver.listNamespaces( TEST_REPO_ID,
-                                                                                "org.apache.maven.plugins", ALL ) );
-        assertEquals( Collections.<String>emptyList(), resolver.listNamespaces( TEST_REPO_ID, "org.apache.maven.shared",
-                                                                                ALL ) );
-
-        assertEquals( Arrays.asList( "plexus" ), resolver.listNamespaces( TEST_REPO_ID, "org.codehaus", ALL ) );
-        assertEquals( Collections.<String>emptyList(), resolver.listNamespaces( TEST_REPO_ID, "org.codehaus.plexus",
-                                                                                ALL ) );
+        assertEquals( Arrays.asList( "example" ), storage.listNamespaces( TEST_REPO_ID, "com", ALL ) );
+        assertEquals( Arrays.asList( "test" ), storage.listNamespaces( TEST_REPO_ID, "com.example", ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listNamespaces( TEST_REPO_ID, "com.example.test",
+                                                                               ALL ) );
+
+        assertEquals( Arrays.asList( "apache", "codehaus" ), storage.listNamespaces( TEST_REPO_ID, "org", ALL ) );
+        assertEquals( Arrays.asList( "archiva", "maven" ), storage.listNamespaces( TEST_REPO_ID, "org.apache", ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listNamespaces( TEST_REPO_ID, "org.apache.archiva",
+                                                                               ALL ) );
+        assertEquals( Arrays.asList( "plugins", "shared" ), storage.listNamespaces( TEST_REPO_ID, "org.apache.maven",
+                                                                                    ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listNamespaces( TEST_REPO_ID, "org.apache.maven.plugins",
+                                                                               ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listNamespaces( TEST_REPO_ID, "org.apache.maven.shared",
+                                                                               ALL ) );
+
+        assertEquals( Arrays.asList( "plexus" ), storage.listNamespaces( TEST_REPO_ID, "org.codehaus", ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listNamespaces( TEST_REPO_ID, "org.codehaus.plexus",
+                                                                               ALL ) );
     }
 
     public void testGetProjects()
     {
-        assertEquals( Collections.<String>emptyList(), resolver.listProjects( TEST_REPO_ID, "com", ALL ) );
-        assertEquals( Collections.<String>emptyList(), resolver.listProjects( TEST_REPO_ID, "com.example", ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "com", ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "com.example", ALL ) );
         assertEquals( Arrays.asList( "incomplete-metadata", "invalid-pom", "malformed-metadata", "mislocated-pom",
-                                     "missing-metadata", "test-artifact" ), resolver.listProjects( TEST_REPO_ID,
-                                                                                                   "com.example.test",
-                                                                                                   ALL ) );
+                                     "missing-metadata", "test-artifact" ), storage.listProjects( TEST_REPO_ID,
+                                                                                                  "com.example.test",
+                                                                                                  ALL ) );
 
-        assertEquals( Collections.<String>emptyList(), resolver.listProjects( TEST_REPO_ID, "org", ALL ) );
-        assertEquals( Arrays.asList( "apache" ), resolver.listProjects( TEST_REPO_ID, "org.apache", ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "org", ALL ) );
+        assertEquals( Arrays.asList( "apache" ), storage.listProjects( TEST_REPO_ID, "org.apache", ALL ) );
         assertEquals( Arrays.asList( "archiva", "archiva-base", "archiva-common", "archiva-modules", "archiva-parent" ),
-                      resolver.listProjects( TEST_REPO_ID, "org.apache.archiva", ALL ) );
-        assertEquals( Collections.<String>emptyList(), resolver.listProjects( TEST_REPO_ID, "org.apache.maven", ALL ) );
-        assertEquals( Collections.<String>emptyList(), resolver.listProjects( TEST_REPO_ID, "org.apache.maven.plugins",
-                                                                              ALL ) );
-        assertEquals( Arrays.asList( "maven-downloader" ), resolver.listProjects( TEST_REPO_ID,
-                                                                                  "org.apache.maven.shared", ALL ) );
+                      storage.listProjects( TEST_REPO_ID, "org.apache.archiva", ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "org.apache.maven", ALL ) );
+        assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "org.apache.maven.plugins",
+                                                                             ALL ) );
+        assertEquals( Arrays.asList( "maven-downloader" ), storage.listProjects( TEST_REPO_ID,
+                                                                                 "org.apache.maven.shared", ALL ) );
     }
 
     public void testGetProjectVersions()
     {
-        assertEquals( Arrays.asList( "1.0-SNAPSHOT" ), resolver.listProjectVersions( TEST_REPO_ID, "com.example.test",
-                                                                                     "incomplete-metadata", ALL ) );
-        assertEquals( Arrays.asList( "1.0-SNAPSHOT" ), resolver.listProjectVersions( TEST_REPO_ID, "com.example.test",
-                                                                                     "malformed-metadata", ALL ) );
-        assertEquals( Arrays.asList( "1.0-SNAPSHOT" ), resolver.listProjectVersions( TEST_REPO_ID, "com.example.test",
-                                                                                     "missing-metadata", ALL ) );
-        assertEquals( Arrays.asList( "1.0" ), resolver.listProjectVersions( TEST_REPO_ID, "com.example.test",
-                                                                            "invalid-pom", ALL ) );
-
-        assertEquals( Arrays.asList( "4", "5-SNAPSHOT" ), resolver.listProjectVersions( TEST_REPO_ID, "org.apache",
-                                                                                        "apache", ALL ) );
-
-        assertEquals( Arrays.asList( "1.2.1", "1.2.2" ), resolver.listProjectVersions( TEST_REPO_ID,
-                                                                                       "org.apache.archiva", "archiva",
-                                                                                       ALL ) );
-        assertEquals( Arrays.asList( "1.2.1" ), resolver.listProjectVersions( TEST_REPO_ID, "org.apache.archiva",
-                                                                              "archiva-base", ALL ) );
-        assertEquals( Arrays.asList( "1.2.1" ), resolver.listProjectVersions( TEST_REPO_ID, "org.apache.archiva",
-                                                                              "archiva-common", ALL ) );
-        assertEquals( Arrays.asList( "1.2.1" ), resolver.listProjectVersions( TEST_REPO_ID, "org.apache.archiva",
-                                                                              "archiva-modules", ALL ) );
-        assertEquals( Arrays.asList( "3" ), resolver.listProjectVersions( TEST_REPO_ID, "org.apache.archiva",
-                                                                          "archiva-parent", ALL ) );
-
-        assertEquals( Collections.<String>emptyList(), resolver.listProjectVersions( TEST_REPO_ID,
-                                                                                     "org.apache.maven.shared",
-                                                                                     "maven-downloader", ALL ) );
+        assertEquals( Arrays.asList( "1.0-SNAPSHOT" ), storage.listProjectVersions( TEST_REPO_ID, "com.example.test",
+                                                                                    "incomplete-metadata", ALL ) );
+        assertEquals( Arrays.asList( "1.0-SNAPSHOT" ), storage.listProjectVersions( TEST_REPO_ID, "com.example.test",
+                                                                                    "malformed-metadata", ALL ) );
+        assertEquals( Arrays.asList( "1.0-SNAPSHOT" ), storage.listProjectVersions( TEST_REPO_ID, "com.example.test",
+                                                                                    "missing-metadata", ALL ) );
+        assertEquals( Arrays.asList( "1.0" ), storage.listProjectVersions( TEST_REPO_ID, "com.example.test",
+                                                                           "invalid-pom", ALL ) );
+
+        assertEquals( Arrays.asList( "4", "5-SNAPSHOT" ), storage.listProjectVersions( TEST_REPO_ID, "org.apache",
+                                                                                       "apache", ALL ) );
+
+        assertEquals( Arrays.asList( "1.2.1", "1.2.2" ), storage.listProjectVersions( TEST_REPO_ID,
+                                                                                      "org.apache.archiva", "archiva",
+                                                                                      ALL ) );
+        assertEquals( Arrays.asList( "1.2.1" ), storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva",
+                                                                             "archiva-base", ALL ) );
+        assertEquals( Arrays.asList( "1.2.1" ), storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva",
+                                                                             "archiva-common", ALL ) );
+        assertEquals( Arrays.asList( "1.2.1" ), storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva",
+                                                                             "archiva-modules", ALL ) );
+        assertEquals( Arrays.asList( "3" ), storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva",
+                                                                         "archiva-parent", ALL ) );
+
+        assertEquals( Collections.<String>emptyList(), storage.listProjectVersions( TEST_REPO_ID,
+                                                                                    "org.apache.maven.shared",
+                                                                                    "maven-downloader", ALL ) );
     }
 
     public void testGetArtifacts()
     {
-        List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( resolver.readArtifactsMetadata(
-            TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2", ALL ) );
+        List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( storage.readArtifactsMetadata( TEST_REPO_ID,
+                                                                                                           "org.codehaus.plexus",
+                                                                                                           "plexus-spring",
+                                                                                                           "1.2",
+                                                                                                           ALL ) );
         assertEquals( 3, artifacts.size() );
         Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
         {
@@ -484,8 +484,11 @@ public class Maven2RepositoryMetadataRes
     {
         ExcludesFilter<String> filter = new ExcludesFilter<String>( Collections.singletonList(
             "plexus-spring-1.2.pom" ) );
-        List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( resolver.readArtifactsMetadata(
-            TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2", filter ) );
+        List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( storage.readArtifactsMetadata( TEST_REPO_ID,
+                                                                                                           "org.codehaus.plexus",
+                                                                                                           "plexus-spring",
+                                                                                                           "1.2",
+                                                                                                           filter ) );
         assertEquals( 2, artifacts.size() );
         Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
         {
@@ -501,8 +504,11 @@ public class Maven2RepositoryMetadataRes
 
     public void testGetArtifactsTimestampedSnapshots()
     {
-        List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( resolver.readArtifactsMetadata(
-            TEST_REPO_ID, "com.example.test", "missing-metadata", "1.0-SNAPSHOT", ALL ) );
+        List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( storage.readArtifactsMetadata( TEST_REPO_ID,
+                                                                                                           "com.example.test",
+                                                                                                           "missing-metadata",
+                                                                                                           "1.0-SNAPSHOT",
+                                                                                                           ALL ) );
         assertEquals( 1, artifacts.size() );
 
         ArtifactMetadata artifact = artifacts.get( 0 );

Modified: archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/resources/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderTest.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/resources/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderTest.xml?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/resources/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderTest.xml (original)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/resources/org/apache/archiva/dependency/tree/maven2/DependencyTreeBuilderTest.xml Wed Dec 29 06:14:04 2010
@@ -29,5 +29,9 @@
       <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
       <implementation>org.apache.archiva.configuration.TestConfiguration</implementation>
     </component>
+    <component>
+      <role>org.apache.archiva.metadata.repository.RepositorySessionFactory</role>
+      <implementation>org.apache.archiva.metadata.repository.TestRepositorySessionFactory</implementation>
+    </component>
   </components>
 </component-set>
\ No newline at end of file

Modified: archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/resources/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/resources/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.xml?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/resources/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.xml (original)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/src/test/resources/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryMetadataResolverTest.xml Wed Dec 29 06:14:04 2010
@@ -27,5 +27,9 @@
       <role>org.apache.archiva.metadata.repository.MetadataRepository</role>
       <implementation>org.apache.archiva.metadata.repository.TestMetadataRepository</implementation>
     </component>
+    <component>
+      <role>org.apache.archiva.metadata.repository.RepositorySessionFactory</role>
+      <implementation>org.apache.archiva.metadata.repository.TestRepositorySessionFactory</implementation>
+    </component>
   </components>
 </component-set>
\ No newline at end of file

Modified: archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java (original)
+++ archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java Wed Dec 29 06:14:04 2010
@@ -59,21 +59,12 @@ import java.util.Properties;
 import java.util.Set;
 import java.util.StringTokenizer;
 
-/**
- * @plexus.component role="org.apache.archiva.metadata.repository.MetadataRepository"
- */
 public class FileMetadataRepository
     implements MetadataRepository
 {
-    /**
-     * @plexus.requirement role="org.apache.archiva.metadata.model.MetadataFacetFactory"
-     */
-    private Map<String, MetadataFacetFactory> metadataFacetFactories;
-
-    /**
-     * @plexus.requirement
-     */
-    private ArchivaConfiguration configuration;
+    private final Map<String, MetadataFacetFactory> metadataFacetFactories;
+
+    private final ArchivaConfiguration configuration;
 
     private static final Logger log = LoggerFactory.getLogger( FileMetadataRepository.class );
 
@@ -85,6 +76,13 @@ public class FileMetadataRepository
 
     private static final String METADATA_KEY = "metadata";
 
+    public FileMetadataRepository( Map<String, MetadataFacetFactory> metadataFacetFactories,
+                                   ArchivaConfiguration configuration )
+    {
+        this.metadataFacetFactories = metadataFacetFactories;
+        this.configuration = configuration;
+    }
+
     private File getBaseDirectory( String repoId )
     {
         // TODO: should be configurable, like the index
@@ -1066,16 +1064,6 @@ public class FileMetadataRepository
         }
     }
 
-    public void setMetadataFacetFactories( Map<String, MetadataFacetFactory> metadataFacetFactories )
-    {
-        this.metadataFacetFactories = metadataFacetFactories;
-    }
-
-    public void setConfiguration( ArchivaConfiguration configuration )
-    {
-        this.configuration = configuration;
-    }
-
     private static class ArtifactComparator
         implements Comparator<ArtifactMetadata>
     {

Added: archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileRepositorySessionFactory.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileRepositorySessionFactory.java?rev=1053542&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileRepositorySessionFactory.java (added)
+++ archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileRepositorySessionFactory.java Wed Dec 29 06:14:04 2010
@@ -0,0 +1,58 @@
+package org.apache.archiva.metadata.repository.file;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.archiva.metadata.model.MetadataFacetFactory;
+import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.MetadataResolver;
+import org.apache.archiva.metadata.repository.RepositorySession;
+import org.apache.archiva.metadata.repository.RepositorySessionFactory;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+
+import java.util.Map;
+
+/**
+ * @plexus.component role="org.apache.archiva.metadata.repository.RepositorySessionFactory" role-hint="file"
+ */
+public class FileRepositorySessionFactory
+    implements RepositorySessionFactory
+{
+    /**
+     * @plexus.requirement role="org.apache.archiva.metadata.model.MetadataFacetFactory"
+     */
+    private Map<String, MetadataFacetFactory> metadataFacetFactories;
+
+    /**
+     * @plexus.requirement
+     */
+    private ArchivaConfiguration configuration;
+
+    /**
+     * @plexus.requirement
+     */
+    private MetadataResolver metadataResolver;
+
+    public RepositorySession createSession()
+    {
+        MetadataRepository metadataRepository = new FileMetadataRepository( metadataFacetFactories, configuration );
+
+        return new RepositorySession( metadataRepository, metadataResolver );
+    }
+}

Modified: archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java (original)
+++ archiva/trunk/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java Wed Dec 29 06:14:04 2010
@@ -47,10 +47,7 @@ public class FileMetadataRepositoryTest
         ArchivaConfiguration config = createTestConfiguration( directory );
         Map<String, MetadataFacetFactory> factories = createTestMetadataFacetFactories();
 
-        FileMetadataRepository repository = new FileMetadataRepository();
-        repository.setConfiguration( config );
-        repository.setMetadataFacetFactories( factories );
-        this.repository = repository;
+        this.repository = new FileMetadataRepository( factories, config );
     }
 
     protected static ArchivaConfiguration createTestConfiguration( File directory )

Modified: archiva/trunk/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java (original)
+++ archiva/trunk/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java Wed Dec 29 06:14:04 2010
@@ -19,8 +19,11 @@ package org.apache.archiva.reports;
  * under the License.
  */
 
+import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
+import org.apache.archiva.metadata.repository.RepositorySession;
+import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataException;
 import org.apache.archiva.repository.events.RepositoryListener;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,12 +38,9 @@ public class RepositoryProblemEventListe
 {
     private Logger log = LoggerFactory.getLogger( RepositoryProblemEventListener.class );
 
-    /**
-     * @plexus.requirement
-     */
-    private MetadataRepository metadataRepository;
-
-    public void deleteArtifact( String repositoryId, String namespace, String project, String version, String id )
+    // FIXME: move to session
+    public void deleteArtifact( MetadataRepository metadataRepository, String repositoryId, String namespace,
+                                String project, String version, String id )
     {
         String name = RepositoryProblemFacet.createName( namespace, project, version, id );
 
@@ -53,4 +53,46 @@ public class RepositoryProblemEventListe
             log.warn( "Unable to remove metadata facet as part of delete event: " + e.getMessage(), e );
         }
     }
+
+    public void addArtifact( RepositorySession session, String repoId, String namespace, String projectId,
+                             ProjectVersionMetadata metadata )
+    {
+        // Remove problems associated with this version on successful addition
+        // TODO: this removes all problems - do we need something that just remove the problems we know are corrected?
+        String name = RepositoryProblemFacet.createName( namespace, projectId, metadata.getId(), null );
+        try
+        {
+            MetadataRepository metadataRepository = session.getRepository();
+            metadataRepository.removeMetadataFacet( repoId, RepositoryProblemFacet.FACET_ID, name );
+            session.markDirty();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            log.warn( "Unable to remove repository problem facets for the version being corrected in the repository: " +
+                          e.getMessage(), e );
+        }
+    }
+
+    public void addArtifactProblem( RepositorySession session, String repoId, String namespace, String projectId,
+                                    String projectVersion, RepositoryStorageMetadataException exception )
+    {
+        RepositoryProblemFacet problem = new RepositoryProblemFacet();
+        problem.setMessage( exception.getMessage() );
+        problem.setProject( projectId );
+        problem.setNamespace( namespace );
+        problem.setRepositoryId( repoId );
+        problem.setVersion( projectVersion );
+        problem.setProblem( exception.getId() );
+
+        try
+        {
+            session.getRepository().addMetadataFacet( repoId, problem );
+            session.markDirty();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            log.warn( "Unable to add repository problem facets for the version being removed: " + e.getMessage(), e );
+        }
+    }
+
 }
\ No newline at end of file

Modified: archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java (original)
+++ archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java Wed Dec 29 06:14:04 2010
@@ -44,14 +44,9 @@ public class DefaultRepositoryStatistics
 {
     private static final Logger log = LoggerFactory.getLogger( DefaultRepositoryStatisticsManager.class );
 
-    /**
-     * @plexus.requirement
-     */
-    private MetadataRepository metadataRepository;
-
     private static final TimeZone UTC_TIME_ZONE = TimeZone.getTimeZone( "UTC" );
 
-    public RepositoryStatistics getLastStatistics( String repositoryId )
+    public RepositoryStatistics getLastStatistics( MetadataRepository metadataRepository, String repositoryId )
         throws MetadataRepositoryException
     {
         // TODO: consider a more efficient implementation that directly gets the last one from the content repository
@@ -69,12 +64,13 @@ public class DefaultRepositoryStatistics
         }
     }
 
-    private void walkRepository( RepositoryStatistics stats, String repositoryId, String ns )
+    private void walkRepository( MetadataRepository metadataRepository, RepositoryStatistics stats, String repositoryId,
+                                 String ns )
         throws MetadataResolutionException
     {
         for ( String namespace : metadataRepository.getNamespaces( repositoryId, ns ) )
         {
-            walkRepository( stats, repositoryId, ns + "." + namespace );
+            walkRepository( metadataRepository, stats, repositoryId, ns + "." + namespace );
         }
 
         Collection<String> projects = metadataRepository.getProjects( repositoryId, ns );
@@ -106,9 +102,8 @@ public class DefaultRepositoryStatistics
         }
     }
 
-
-    public void addStatisticsAfterScan( String repositoryId, Date startTime, Date endTime, long totalFiles,
-                                        long newFiles )
+    public void addStatisticsAfterScan( MetadataRepository metadataRepository, String repositoryId, Date startTime,
+                                        Date endTime, long totalFiles, long newFiles )
         throws MetadataRepositoryException
     {
         RepositoryStatistics repositoryStatistics = new RepositoryStatistics();
@@ -131,7 +126,7 @@ public class DefaultRepositoryStatistics
         {
             for ( String ns : metadataRepository.getRootNamespaces( repositoryId ) )
             {
-                walkRepository( repositoryStatistics, repositoryId, ns );
+                walkRepository( metadataRepository, repositoryStatistics, repositoryId, ns );
             }
         }
         catch ( MetadataResolutionException e )
@@ -143,13 +138,14 @@ public class DefaultRepositoryStatistics
         metadataRepository.addMetadataFacet( repositoryId, repositoryStatistics );
     }
 
-    public void deleteStatistics( String repositoryId )
+    public void deleteStatistics( MetadataRepository metadataRepository, String repositoryId )
         throws MetadataRepositoryException
     {
         metadataRepository.removeMetadataFacets( repositoryId, RepositoryStatistics.FACET_ID );
     }
 
-    public List<RepositoryStatistics> getStatisticsInRange( String repositoryId, Date startTime, Date endTime )
+    public List<RepositoryStatistics> getStatisticsInRange( MetadataRepository metadataRepository, String repositoryId,
+                                                            Date startTime, Date endTime )
         throws MetadataRepositoryException
     {
         List<RepositoryStatistics> results = new ArrayList<RepositoryStatistics>();
@@ -183,9 +179,4 @@ public class DefaultRepositoryStatistics
         fmt.setTimeZone( UTC_TIME_ZONE );
         return fmt;
     }
-
-    public void setMetadataRepository( MetadataRepository metadataRepository )
-    {
-        this.metadataRepository = metadataRepository;
-    }
 }

Modified: archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java (original)
+++ archiva/trunk/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManager.java Wed Dec 29 06:14:04 2010
@@ -19,6 +19,7 @@ package org.apache.archiva.metadata.repo
  * under the License.
  */
 
+import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 
 import java.util.Date;
@@ -26,15 +27,17 @@ import java.util.List;
 
 public interface RepositoryStatisticsManager
 {
-    RepositoryStatistics getLastStatistics( String repositoryId )
+    RepositoryStatistics getLastStatistics( MetadataRepository metadataRepository, String repositoryId )
         throws MetadataRepositoryException;
 
-    void addStatisticsAfterScan( String repositoryId, Date startTime, Date endTime, long totalFiles, long newFiles )
+    void addStatisticsAfterScan( MetadataRepository metadataRepository, String repositoryId, Date startTime,
+                                 Date endTime, long totalFiles, long newFiles )
         throws MetadataRepositoryException;
 
-    void deleteStatistics( String repositoryId )
+    void deleteStatistics( MetadataRepository metadataRepository, String repositoryId )
         throws MetadataRepositoryException;
 
-    List<RepositoryStatistics> getStatisticsInRange( String repositoryId, Date startTime, Date endTime )
+    List<RepositoryStatistics> getStatisticsInRange( MetadataRepository metadataRepository, String repositoryId,
+                                                     Date startTime, Date endTime )
         throws MetadataRepositoryException;
 }