You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/05/18 00:16:59 UTC

svn commit: r539145 [1/2] - in /maven/archiva/trunk: archiva-base/archiva-configuration/ archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ archiva-base/archiva-configuration/src/test/resources/ archiva-base/archiv...

Author: joakime
Date: Thu May 17 15:16:57 2007
New Revision: 539145

URL: http://svn.apache.org/viewvc?view=rev&rev=539145
Log:
[MRM-346]: Show Artifact results in error 500. 

Added:
    maven/archiva/trunk/archiva-base/archiva-configuration/src/test/resources/log4j.properties
    maven/archiva/trunk/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/functors/
    maven/archiva/trunk/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/functors/UnprocessedArtifactPredicate.java   (with props)
    maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/ProcessArchivaArtifactClosure.java   (with props)
    maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/
    maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.java   (with props)
    maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.java   (with props)
    maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseCleanupConsumer.java   (with props)
    maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseUnprocessedConsumer.java   (with props)
    maven/archiva/trunk/archiva-database/src/test/resources/archiva-test.xml   (with props)
    maven/archiva/trunk/archiva-database/src/test/resources/org/
    maven/archiva/trunk/archiva-database/src/test/resources/org/apache/
    maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/
    maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/
    maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/
    maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/
    maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.xml   (with props)
    maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.xml   (with props)
    maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseCleanupConsumer.java   (with props)
    maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseUnprocessedConsumer.java   (with props)
    maven/archiva/trunk/archiva-scheduled/src/test/resources/archiva-test.xml   (with props)
Removed:
    maven/archiva/trunk/archiva-scheduled/src/test/conf/repository-manager.xml
Modified:
    maven/archiva/trunk/archiva-base/archiva-configuration/pom.xml
    maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationUpgrade.java
    maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
    maven/archiva/trunk/archiva-base/archiva-model/pom.xml
    maven/archiva/trunk/archiva-database/pom.xml
    maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
    maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/JdoDatabaseUpdater.java
    maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java
    maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java
    maven/archiva/trunk/archiva-database/src/test/resources/META-INF/plexus/components.xml
    maven/archiva/trunk/archiva-scheduled/pom.xml
    maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java
    maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/ArchivaDatabaseUpdateTaskExecutorTest.java
    maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutorTest.java
    maven/archiva/trunk/archiva-scheduled/src/test/resources/org/apache/maven/archiva/scheduled/executors/ArchivaDatabaseUpdateTaskExecutorTest.xml
    maven/archiva/trunk/archiva-scheduled/src/test/resources/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutorTest.xml
    maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
    maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/META-INF/plexus/application.xml

Modified: maven/archiva/trunk/archiva-base/archiva-configuration/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/pom.xml?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/pom.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/pom.xml Thu May 17 15:16:57 2007
@@ -66,19 +66,18 @@
       <artifactId>plexus-registry-api</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-container-default</artifactId>
+    </dependency>
+    <!-- Test Deps -->
+    <dependency>
       <groupId>org.codehaus.plexus.registry</groupId>
       <artifactId>plexus-registry-commons</artifactId>
       <scope>test</scope>
     </dependency>
-    <!-- Test Deps -->
     <dependency>
       <groupId>easymock</groupId>
       <artifactId>easymock</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.codehaus.plexus</groupId>
-      <artifactId>plexus-container-default</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>

Modified: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationUpgrade.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationUpgrade.java?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationUpgrade.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/ConfigurationUpgrade.java Thu May 17 15:16:57 2007
@@ -25,9 +25,8 @@
 import org.apache.commons.lang.math.NumberUtils;
 import org.apache.maven.archiva.xml.XMLException;
 import org.apache.maven.archiva.xml.XMLReader;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.console.ConsoleLogger;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -42,27 +41,28 @@
  *
  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
  * @version $Id$
- * 
- * @plexus.component role="org.apache.maven.archiva.configuration.ConfigurationUpgrade"
- *                   role-hint="default"
  */
 public class ConfigurationUpgrade
-    extends AbstractLogEnabled
-    implements Initializable
 {
     public static final int CURRENT_CONFIG_VERSION = 1;
 
-    /* NOTE: This component should *NOT USE* the configuration api to do it's upgrade */
+    private Logger logger;
 
-    public void initialize()
-        throws InitializationException
+    /**
+     * Perform the upgrade (if needed).
+     * 
+     * NOTE: This component should *NOT USE* the configuration api to do it's upgrade
+     * 
+     * @return true if the upgrade modified the archiva.xml file. false otherwise.
+     */
+    public boolean perform()
     {
         File userConfigFile = new File( System.getProperty( "user.home" ), ".m2/archiva.xml" );
 
         if ( !userConfigFile.exists() )
         {
             writeDefaultConfigFile( userConfigFile );
-            return;
+            return true;
         }
 
         boolean configOk = false;
@@ -85,6 +85,7 @@
         catch ( XMLException e )
         {
             getLogger().warn( "Unable to read user configuration XML: " + e.getMessage(), e );
+            return false;
         }
 
         if ( !configOk )
@@ -93,14 +94,15 @@
             {
                 FileUtils.copyFile( userConfigFile, new File( userConfigFile.getAbsolutePath() + ".bak" ) );
                 writeDefaultConfigFile( userConfigFile );
+                return true;
             }
             catch ( IOException e )
             {
-                getLogger().warn( "Unable to create backup of your configuration file: "
-                    + e.getMessage(), e );
+                getLogger().warn( "Unable to create backup of your configuration file: " + e.getMessage(), e );
             }
         }
 
+        return false;
     }
 
     private void upgradeVersion( File userConfigFile, XMLReader xml )
@@ -126,8 +128,7 @@
             }
             catch ( IOException e )
             {
-                getLogger().warn( "Unable to write default (generic) configuration file: "
-                    + e.getMessage(), e );
+                getLogger().warn( "Unable to write default (generic) configuration file: " + e.getMessage(), e );
             }
         }
 
@@ -145,6 +146,20 @@
         {
             getLogger().warn( "Unable to write default configuration file: " + e.getMessage(), e );
         }
+    }
+
+    public Logger getLogger()
+    {
+        if ( logger == null )
+        {
+            logger = new ConsoleLogger( ConsoleLogger.LEVEL_INFO, this.getClass().getName() );
+        }
+        return logger;
+    }
+
+    public void setLogger( Logger logger )
+    {
+        this.logger = logger;
     }
 
 }

Modified: maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/main/java/org/apache/maven/archiva/configuration/DefaultArchivaConfiguration.java Thu May 17 15:16:57 2007
@@ -21,6 +21,7 @@
 
 import org.apache.maven.archiva.configuration.io.registry.ConfigurationRegistryReader;
 import org.apache.maven.archiva.configuration.io.registry.ConfigurationRegistryWriter;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
 import org.codehaus.plexus.registry.Registry;
@@ -36,6 +37,7 @@
  * @plexus.component role="org.apache.maven.archiva.configuration.ArchivaConfiguration"
  */
 public class DefaultArchivaConfiguration
+    extends AbstractLogEnabled
     implements ArchivaConfiguration, RegistryListener, Initializable
 {
     /**
@@ -56,19 +58,26 @@
     {
         if ( configuration == null )
         {
-            // TODO: should this be the same as section? make sure unnamed sections still work (eg, sys properties)
-            configuration = new ConfigurationRegistryReader().read( registry.getSubset( KEY ) );
-
-            // TODO: for commons-configuration 1.3 only
-            for ( Iterator i = configuration.getRepositories().iterator(); i.hasNext(); )
-            {
-                RepositoryConfiguration c = (RepositoryConfiguration) i.next();
-                c.setUrl( removeExpressions( c.getUrl() ) );
-            }
+            configuration = load();
         }
         return configuration;
     }
 
+    private Configuration load()
+    {
+        // TODO: should this be the same as section? make sure unnamed sections still work (eg, sys properties)
+        Configuration config = new ConfigurationRegistryReader().read( registry.getSubset( KEY ) );
+
+        // TODO: for commons-configuration 1.3 only
+        for ( Iterator i = config.getRepositories().iterator(); i.hasNext(); )
+        {
+            RepositoryConfiguration c = (RepositoryConfiguration) i.next();
+            c.setUrl( removeExpressions( c.getUrl() ) );
+        }
+
+        return config;
+    }
+
     public void save( Configuration configuration )
         throws RegistryException
     {
@@ -101,6 +110,13 @@
         throws InitializationException
     {
         registry.addChangeListener( this );
+
+        ConfigurationUpgrade upgrade = new ConfigurationUpgrade();
+        upgrade.setLogger( getLogger() );
+        if ( upgrade.perform() )
+        {
+            this.configuration = load();
+        }
     }
 
     public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
@@ -115,10 +131,10 @@
 
     private String removeExpressions( String directory )
     {
-        String value = StringUtils.replace( directory, "${appserver.base}",
-                                            registry.getString( "appserver.base", "${appserver.base}" ) );
-        value = StringUtils.replace( value, "${appserver.home}",
-                                     registry.getString( "appserver.home", "${appserver.home}" ) );
+        String value = StringUtils.replace( directory, "${appserver.base}", registry.getString( "appserver.base",
+                                                                                                "${appserver.base}" ) );
+        value = StringUtils.replace( value, "${appserver.home}", registry.getString( "appserver.home",
+                                                                                     "${appserver.home}" ) );
         return value;
     }
 

Added: maven/archiva/trunk/archiva-base/archiva-configuration/src/test/resources/log4j.properties
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-configuration/src/test/resources/log4j.properties?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-configuration/src/test/resources/log4j.properties (added)
+++ maven/archiva/trunk/archiva-base/archiva-configuration/src/test/resources/log4j.properties Thu May 17 15:16:57 2007
@@ -0,0 +1,10 @@
+# Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=INFO, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
+

Modified: maven/archiva/trunk/archiva-base/archiva-model/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-model/pom.xml?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-model/pom.xml (original)
+++ maven/archiva/trunk/archiva-base/archiva-model/pom.xml Thu May 17 15:16:57 2007
@@ -50,6 +50,10 @@
       <artifactId>commons-lang</artifactId>
     </dependency>
     <dependency>
+      <groupId>commons-collections</groupId>
+      <artifactId>commons-collections</artifactId>
+    </dependency>
+    <dependency>
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
     </dependency>

Added: maven/archiva/trunk/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/functors/UnprocessedArtifactPredicate.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/functors/UnprocessedArtifactPredicate.java?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/functors/UnprocessedArtifactPredicate.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/functors/UnprocessedArtifactPredicate.java Thu May 17 15:16:57 2007
@@ -0,0 +1,59 @@
+package org.apache.maven.archiva.model.functors;
+
+/*
+ * 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.commons.collections.Predicate;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifactModel;
+
+/**
+ * Allows for selection of unprocessed artifacts.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class UnprocessedArtifactPredicate
+    implements Predicate
+{
+    private static UnprocessedArtifactPredicate INSTANCE = new UnprocessedArtifactPredicate();
+
+    public static UnprocessedArtifactPredicate getInstance()
+    {
+        return INSTANCE;
+    }
+
+    public boolean evaluate( Object object )
+    {
+        boolean satisfies = false;
+
+        if ( object instanceof ArchivaArtifact )
+        {
+            ArchivaArtifact artifact = (ArchivaArtifact) object;
+            satisfies = !artifact.getModel().isProcessed();
+        }
+        else if ( object instanceof ArchivaArtifactModel )
+        {
+            ArchivaArtifactModel model = (ArchivaArtifactModel) object;
+            satisfies = !model.isProcessed();
+        }
+
+        return satisfies;
+    }
+}

Propchange: maven/archiva/trunk/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/functors/UnprocessedArtifactPredicate.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/functors/UnprocessedArtifactPredicate.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/functors/UnprocessedArtifactPredicate.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/archiva/trunk/archiva-database/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/pom.xml?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/pom.xml (original)
+++ maven/archiva/trunk/archiva-database/pom.xml Thu May 17 15:16:57 2007
@@ -99,6 +99,11 @@
     </dependency>
     <!--  TEST DEPS  -->
     <dependency>
+      <groupId>org.codehaus.plexus.registry</groupId>
+      <artifactId>plexus-registry-commons</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>hsqldb</groupId>
       <artifactId>hsqldb</artifactId>
       <scope>test</scope>

Modified: maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java (original)
+++ maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java Thu May 17 15:16:57 2007
@@ -25,6 +25,8 @@
 import org.apache.maven.archiva.database.constraints.UniqueArtifactIdConstraint;
 import org.apache.maven.archiva.database.constraints.UniqueGroupIdConstraint;
 import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint;
+import org.apache.maven.archiva.database.updater.DatabaseUpdater;
+import org.apache.maven.archiva.model.ArchivaArtifact;
 import org.apache.maven.archiva.model.ArchivaProjectModel;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
 
@@ -37,7 +39,6 @@
  * @version $Id$
  * 
  * @plexus.component role="org.apache.maven.archiva.database.browsing.RepositoryBrowsing"
- *                   role-hint="default"
  */
 public class DefaultRepositoryBrowsing
     extends AbstractLogEnabled
@@ -48,6 +49,11 @@
      */
     private ArchivaDAO dao;
 
+    /**
+     * @plexus.requirement role-hint="jdo"
+     */
+    private DatabaseUpdater dbUpdater;
+
     public BrowsingResults getRoot()
     {
         List groups = dao.query( new UniqueGroupIdConstraint() );
@@ -89,10 +95,51 @@
     public ArchivaProjectModel selectVersion( String groupId, String artifactId, String version )
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        ArchivaProjectModel model = dao.getProjectModelDAO().getProjectModel( groupId, artifactId, version );
-
-        // TODO: if the model isn't found. load it from disk, insert into DB, and then return it.
+        ArchivaArtifact pomArtifact = null;
 
-        return model;
+        try
+        {
+            pomArtifact = dao.getArtifactDAO().getArtifact( groupId, artifactId, version, null, "pom" );
+
+            if ( pomArtifact == null )
+            {
+                throw new ObjectNotFoundException( "Unable to find artifact [" + groupId + ":" + artifactId + ":"
+                    + version + "]" );
+            }
+        }
+        catch ( ObjectNotFoundException e )
+        {
+            throw e;
+        }
+        
+        ArchivaProjectModel model;
+
+        if ( pomArtifact.getModel().isProcessed() )
+        {
+            // It's been processed. return it.
+            model = dao.getProjectModelDAO().getProjectModel( groupId, artifactId, version );
+            return model;
+        }
+
+        // Process it.
+        dbUpdater.updateUnprocessed( pomArtifact );
+
+        // Find it.
+        try
+        {
+            model = dao.getProjectModelDAO().getProjectModel( groupId, artifactId, version );
+    
+            if ( model == null )
+            {
+                throw new ObjectNotFoundException( "Unable to find project model for [" + groupId + ":" + artifactId + ":"
+                    + version + "]" );
+            }
+
+            return model;
+        }
+        catch ( ObjectNotFoundException e )
+        {
+            throw e;
+        }
     }
 }

Modified: maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/JdoDatabaseUpdater.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/JdoDatabaseUpdater.java?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/JdoDatabaseUpdater.java (original)
+++ maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/JdoDatabaseUpdater.java Thu May 17 15:16:57 2007
@@ -19,26 +19,21 @@
  * under the License.
  */
 
-import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.configuration.DatabaseScanningConfiguration;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.IteratorUtils;
+import org.apache.commons.collections.Predicate;
+import org.apache.commons.collections.functors.NotPredicate;
 import org.apache.maven.archiva.consumers.ArchivaArtifactConsumer;
-import org.apache.maven.archiva.consumers.ConsumerException;
 import org.apache.maven.archiva.database.ArchivaDAO;
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.database.constraints.ArtifactsProcessedConstraint;
 import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.functors.UnprocessedArtifactPredicate;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
-import org.codehaus.plexus.registry.Registry;
-import org.codehaus.plexus.registry.RegistryListener;
 
-import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 /**
  * JdoDatabaseUpdater
@@ -51,7 +46,7 @@
  */
 public class JdoDatabaseUpdater
     extends AbstractLogEnabled
-    implements DatabaseUpdater, RegistryListener, Initializable
+    implements DatabaseUpdater
 {
     /**
      * @plexus.requirement role-hint="jdo"
@@ -61,28 +56,9 @@
     /**
      * @plexus.requirement
      */
-    private ArchivaConfiguration configuration;
+    private DatabaseConsumers dbConsumers;
 
-    /**
-     * The collection of available consumers.
-     * @plexus.requirement role="org.apache.maven.archiva.consumers.ArchivaArtifactConsumer"
-     */
-    private Map availableConsumers;
-
-    /**
-     * The list of active consumers for unprocessed content.
-     */
-    private List activeUnprocessedConsumers = new ArrayList();
-
-    /**
-     * The list of active consumers for processed content.
-     */
-    private List activeProcessedConsumers = new ArrayList();
-
-    /**
-     * The list of registry (configuration) property names that will trigger a refresh of the activeConsumers list.
-     */
-    private List propertyNameTriggers = new ArrayList();
+    private ProcessArchivaArtifactClosure processArtifactClosure = new ProcessArchivaArtifactClosure();
 
     public void update()
         throws ArchivaDatabaseException
@@ -96,56 +72,52 @@
     {
         List unprocessedArtifacts = dao.getArtifactDAO().queryArtifacts( new ArtifactsProcessedConstraint( false ) );
 
-        beginConsumerLifecycle( this.activeUnprocessedConsumers );
+        beginConsumerLifecycle( dbConsumers.getSelectedUnprocessedConsumers() );
 
         try
         {
             // Process each consumer.
-            Iterator it = unprocessedArtifacts.iterator();
+            Predicate predicate = UnprocessedArtifactPredicate.getInstance();
+
+            Iterator it = IteratorUtils.filteredIterator( unprocessedArtifacts.iterator(), predicate );
             while ( it.hasNext() )
             {
                 ArchivaArtifact artifact = (ArchivaArtifact) it.next();
-
-                if ( !artifact.getModel().isProcessed() )
-                {
-                    updateUnprocessed( artifact );
-                }
+                updateUnprocessed( artifact );
             }
         }
         finally
         {
-            consumerConsumerLifecycle( this.activeUnprocessedConsumers );
+            endConsumerLifecycle( dbConsumers.getSelectedUnprocessedConsumers() );
         }
-    } 
+    }
 
     public void updateAllProcessed()
         throws ArchivaDatabaseException
     {
         List processedArtifacts = dao.getArtifactDAO().queryArtifacts( new ArtifactsProcessedConstraint( true ) );
 
-        beginConsumerLifecycle( this.activeProcessedConsumers );
+        beginConsumerLifecycle( dbConsumers.getSelectedCleanupConsumers() );
 
         try
         {
             // Process each consumer.
-            Iterator it = processedArtifacts.iterator();
+            Predicate predicate = NotPredicate.getInstance( UnprocessedArtifactPredicate.getInstance() );
+
+            Iterator it = IteratorUtils.filteredIterator( processedArtifacts.iterator(), predicate );
             while ( it.hasNext() )
             {
                 ArchivaArtifact artifact = (ArchivaArtifact) it.next();
-
-                if ( !artifact.getModel().isProcessed() )
-                {
-                    updateProcessed( artifact );
-                }
+                updateProcessed( artifact );
             }
         }
         finally
         {
-            consumerConsumerLifecycle( this.activeProcessedConsumers );
+            endConsumerLifecycle( dbConsumers.getSelectedCleanupConsumers() );
         }
     }
 
-    private void consumerConsumerLifecycle( List consumers )
+    private void endConsumerLifecycle( List consumers )
     {
         Iterator it = consumers.iterator();
         while ( it.hasNext() )
@@ -168,19 +140,16 @@
     public void updateUnprocessed( ArchivaArtifact artifact )
         throws ArchivaDatabaseException
     {
-        Iterator it = this.activeUnprocessedConsumers.iterator();
-        while ( it.hasNext() )
+        List consumers = dbConsumers.getSelectedUnprocessedConsumers();
+
+        if ( CollectionUtils.isEmpty( consumers ) )
         {
-            ArchivaArtifactConsumer consumer = (ArchivaArtifactConsumer) it.next();
-            try
-            {
-                consumer.processArchivaArtifact( artifact );
-            }
-            catch ( ConsumerException e )
-            {
-                getLogger().warn( "Unable to consume (unprocessed) artifact: " + artifact );
-            }
+            getLogger().warn( "There are no selected consumers for unprocessed artifacts." );
+            return;
         }
+        
+        this.processArtifactClosure.setArtifact( artifact );
+        CollectionUtils.forAllDo( consumers, this.processArtifactClosure );
 
         artifact.getModel().setWhenProcessed( new Date() );
         dao.getArtifactDAO().saveArtifact( artifact );
@@ -189,86 +158,15 @@
     public void updateProcessed( ArchivaArtifact artifact )
         throws ArchivaDatabaseException
     {
-        Iterator it = this.activeProcessedConsumers.iterator();
-        while ( it.hasNext() )
-        {
-            ArchivaArtifactConsumer consumer = (ArchivaArtifactConsumer) it.next();
-            try
-            {
-                consumer.processArchivaArtifact( artifact );
-            }
-            catch ( ConsumerException e )
-            {
-                getLogger().warn( "Unable to consume (processed)  artifact: " + artifact );
-            }
-        }
-    }
-
-    private void updateActiveConsumers()
-    {
-        this.activeUnprocessedConsumers.clear();
-        this.activeProcessedConsumers.clear();
+        List consumers = dbConsumers.getSelectedCleanupConsumers();
 
-        DatabaseScanningConfiguration dbScanning = configuration.getConfiguration().getDatabaseScanning();
-        if ( dbScanning == null )
+        if ( CollectionUtils.isEmpty( consumers ) )
         {
-            getLogger().error( "No Database Consumers found!" );
+            getLogger().warn( "There are no selected consumers for artifact cleanup." );
             return;
         }
-
-        this.activeUnprocessedConsumers.addAll( getActiveConsumerList( dbScanning.getUnprocessedConsumers() ) );
-        this.activeProcessedConsumers.addAll( getActiveConsumerList( dbScanning.getCleanupConsumers() ) );
-    }
-
-    private List getActiveConsumerList( List potentialConsumerList )
-    {
-        if ( ( potentialConsumerList == null ) || ( potentialConsumerList.isEmpty() ) )
-        {
-            return Collections.EMPTY_LIST;
-        }
-
-        List ret = new ArrayList();
-
-        Iterator it = potentialConsumerList.iterator();
-        while ( it.hasNext() )
-        {
-            String consumerName = (String) it.next();
-            if ( !availableConsumers.containsKey( consumerName ) )
-            {
-                getLogger().warn( "Requested Consumer [" + consumerName + "] does not exist.  Disabling." );
-                continue;
-            }
-
-            ret.add( consumerName );
-        }
-
-        return ret;
-    }
-
-    public void initialize()
-        throws InitializationException
-    {
-        propertyNameTriggers = new ArrayList();
-        propertyNameTriggers.add( "databaseScanning" );
-        propertyNameTriggers.add( "unprocessedConsumers" );
-        propertyNameTriggers.add( "unprocessedConsumer" );
-        propertyNameTriggers.add( "processedConsumers" );
-        propertyNameTriggers.add( "processedConsumer" );
-
-        configuration.addChangeListener( this );
-        updateActiveConsumers();
-    }
-
-    public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
-    {
-        if ( propertyNameTriggers.contains( propertyName ) )
-        {
-            updateActiveConsumers();
-        }
-    }
-
-    public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
-    {
-        /* nothing to do here */
+        
+        this.processArtifactClosure.setArtifact( artifact );
+        CollectionUtils.forAllDo( consumers, this.processArtifactClosure );
     }
 }

Added: maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/ProcessArchivaArtifactClosure.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/ProcessArchivaArtifactClosure.java?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/ProcessArchivaArtifactClosure.java (added)
+++ maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/ProcessArchivaArtifactClosure.java Thu May 17 15:16:57 2007
@@ -0,0 +1,73 @@
+package org.apache.maven.archiva.database.updater;
+
+/*
+ * 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.commons.collections.Closure;
+import org.apache.maven.archiva.consumers.ArchivaArtifactConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+
+/**
+ * ProcessArchivaArtifactClosure 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * 
+ * @plexus.component role="org.apache.commons.collections.Closure" 
+ *                   role-hint="process-artifact"
+ *                   instantiation-strategy="per-lookup"
+ */
+class ProcessArchivaArtifactClosure
+    extends AbstractLogEnabled
+    implements Closure
+{
+    private ArchivaArtifact artifact;
+
+    public void execute( Object input )
+    {
+        if ( input instanceof ArchivaArtifactConsumer )
+        {
+            ArchivaArtifactConsumer consumer = (ArchivaArtifactConsumer) input;
+
+            try
+            {
+                consumer.processArchivaArtifact( artifact );
+            }
+            catch ( ConsumerException e )
+            {
+                getLogger().warn(
+                                  "Unable to process artifact [" + artifact + "] with consumer [" + consumer.getId()
+                                      + "]" );
+            }
+        }
+
+    }
+
+    public ArchivaArtifact getArtifact()
+    {
+        return artifact;
+    }
+
+    public void setArtifact( ArchivaArtifact artifact )
+    {
+        this.artifact = artifact;
+    }
+}
\ No newline at end of file

Propchange: maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/ProcessArchivaArtifactClosure.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/ProcessArchivaArtifactClosure.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-database/src/main/java/org/apache/maven/archiva/database/updater/ProcessArchivaArtifactClosure.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java (original)
+++ maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/AbstractArchivaDatabaseTestCase.java Thu May 17 15:16:57 2007
@@ -19,6 +19,10 @@
  * under the License.
  */
 
+import org.apache.maven.archiva.consumers.DatabaseCleanupConsumer;
+import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
+import org.apache.maven.archiva.database.updater.TestDatabaseCleanupConsumer;
+import org.apache.maven.archiva.database.updater.TestDatabaseUnprocessedConsumer;
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.jdo.DefaultConfigurableJdoFactory;
 import org.codehaus.plexus.jdo.JdoFactory;
@@ -125,6 +129,25 @@
         pm.close();
 
         this.dao = (ArchivaDAO) lookup( ArchivaDAO.class.getName(), "jdo" );
+    }
+
+    protected TestDatabaseCleanupConsumer lookupTestCleanupConsumer()
+        throws Exception
+    {
+        TestDatabaseCleanupConsumer consumer = (TestDatabaseCleanupConsumer) lookup( DatabaseCleanupConsumer.class,
+                                                                                     "test-db-cleanup" );
+        assertNotNull( "Test Database Cleanup Consumer should not be null.", consumer );
+        return consumer;
+    }
+
+    protected TestDatabaseUnprocessedConsumer lookupTestUnprocessedConsumer()
+        throws Exception
+    {
+        TestDatabaseUnprocessedConsumer consumer = (TestDatabaseUnprocessedConsumer) lookup(
+                                                                                             DatabaseUnprocessedArtifactConsumer.class,
+                                                                                             "test-db-unprocessed" );
+        assertNotNull( "Test Database Unprocessed Consumer should not be null.", consumer );
+        return consumer;
     }
 
     protected Date toDate( String txt )

Modified: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java (original)
+++ maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java Thu May 17 15:16:57 2007
@@ -94,7 +94,7 @@
     public RepositoryBrowsing lookupBrowser()
         throws Exception
     {
-        RepositoryBrowsing browser = (RepositoryBrowsing) lookup( RepositoryBrowsing.class.getName(), "default" );
+        RepositoryBrowsing browser = (RepositoryBrowsing) lookup( RepositoryBrowsing.class.getName() );
         assertNotNull( "RepositoryBrowsing should not be null.", browser );
         return browser;
     }

Added: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.java?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.java (added)
+++ maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.java Thu May 17 15:16:57 2007
@@ -0,0 +1,84 @@
+package org.apache.maven.archiva.database.updater;
+
+/*
+ * 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.commons.collections.CollectionUtils;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.util.List;
+
+/**
+ * DatabaseConsumersTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DatabaseConsumersTest
+    extends PlexusTestCase
+{
+    private DatabaseConsumers lookupDbConsumers()
+        throws Exception
+    {
+        DatabaseConsumers dbconsumers = (DatabaseConsumers) lookup( DatabaseConsumers.class );
+        assertNotNull( "DatabaseConsumers should not be null.", dbconsumers );
+        return dbconsumers;
+    }
+
+    public void testGetAvailableCleanupConsumers()
+        throws Exception
+    {
+        DatabaseConsumers dbconsumers = lookupDbConsumers();
+        List available = dbconsumers.getAvailableCleanupConsumers();
+        assertNotNull( "Available Cleanup Consumers should never be null.", available );
+
+        assertTrue( "Available Cleanup Consumers should have entries.", CollectionUtils.isNotEmpty( available ) );
+    }
+
+    public void testGetAvailableUnprocessedConsumers()
+        throws Exception
+    {
+        DatabaseConsumers dbconsumers = lookupDbConsumers();
+        List available = dbconsumers.getAvailableUnprocessedConsumers();
+        assertNotNull( "Available Unprocessed Consumers should never be null.", available );
+
+        assertTrue( "Available Unprocessed Consumers should have entries.", CollectionUtils.isNotEmpty( available ) );
+    }
+
+    public void testGetSelectedCleanupConsumers()
+        throws Exception
+    {
+        DatabaseConsumers dbconsumers = lookupDbConsumers();
+        List available = dbconsumers.getSelectedCleanupConsumers();
+        assertNotNull( "Selected Cleanup Consumers should never be null.", available );
+
+        assertTrue( "Selected Cleanup Consumers should have entries.", CollectionUtils.isNotEmpty( available ) );
+    }
+
+    public void testGetSelectedUnprocessedConsumers()
+        throws Exception
+    {
+        DatabaseConsumers dbconsumers = lookupDbConsumers();
+        List available = dbconsumers.getSelectedUnprocessedConsumers();
+        assertNotNull( "Selected Unprocessed Consumers should never be null.", available );
+
+        assertTrue( "Selected Unprocessed Consumers should have entries.", CollectionUtils.isNotEmpty( available ) );
+    }
+
+}

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.java?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.java (added)
+++ maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.java Thu May 17 15:16:57 2007
@@ -0,0 +1,103 @@
+package org.apache.maven.archiva.database.updater;
+
+/*
+ * 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.maven.archiva.database.AbstractArchivaDatabaseTestCase;
+import org.apache.maven.archiva.database.ArtifactDAO;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.Date;
+
+/**
+ * DatabaseUpdaterTest 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DatabaseUpdaterTest
+    extends AbstractArchivaDatabaseTestCase
+{
+    private DatabaseUpdater dbupdater;
+
+    public ArchivaArtifact createArtifact( String groupId, String artifactId, String version, String whenProcessed )
+        throws Exception
+    {
+        ArchivaArtifact artifact = dao.getArtifactDAO().createArtifact( groupId, artifactId, version, "", "jar" );
+        assertNotNull( "Artifact should not be null.", artifact );
+        Date dateWhenProcessed = null;
+
+        if ( whenProcessed != null )
+        {
+            dateWhenProcessed = toDate( whenProcessed );
+        }
+
+        artifact.getModel().setWhenProcessed( dateWhenProcessed );
+
+        // Satisfy table / column requirements.
+        artifact.getModel().setLastModified( new Date() );
+
+        return artifact;
+    }
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        ArtifactDAO adao = dao.getArtifactDAO();
+        assertNotNull( "Artifact DAO should not be null.", adao );
+
+        adao.saveArtifact( createArtifact( "org.apache.maven.archiva", "archiva-common", "1.0-SNAPSHOT", null ) );
+        adao.saveArtifact( createArtifact( "org.apache.maven.archiva", "archiva-utils", "1.0-SNAPSHOT", null ) );
+        adao.saveArtifact( createArtifact( "org.apache.maven.archiva", "archiva-old", "0.1", "2004/02/15 9:01:00" ) );
+        adao.saveArtifact( createArtifact( "org.apache.maven.archiva", "archiva-database", "1.0-SNAPSHOT", null ) );
+
+        dbupdater = (DatabaseUpdater) lookup( DatabaseUpdater.class, "jdo" );
+        assertNotNull( "DatabaseUpdater should not be null.", dbupdater );
+    }
+
+    public void testUpdateUnprocessed()
+        throws Exception
+    {
+        String groupId = "org.apache.maven.archiva";
+        String artifactId = "archiva-utils";
+        String version = "1.0-SNAPSHOT";
+        String classifier = "";
+        String type = "jar";
+        
+        TestDatabaseUnprocessedConsumer consumer = lookupTestUnprocessedConsumer();
+        consumer.resetCount();
+
+        // Check the state of the artifact in the DB.
+        ArchivaArtifact savedArtifact = dao.getArtifactDAO().getArtifact( groupId, artifactId, version, classifier,
+                                                                          type );
+        assertFalse( "Artifact should not be considered processed (yet).", savedArtifact.getModel().isProcessed() );
+
+        // Update the artifact
+        dbupdater.updateUnprocessed( savedArtifact );
+
+        // Check the update.
+        ArchivaArtifact processed = dao.getArtifactDAO().getArtifact( groupId, artifactId, version, classifier, type );
+        assertTrue( "Artifact should be flagged as processed.", processed.getModel().isProcessed() );
+
+        // Did the unprocessed consumer do it's thing?
+        assertEquals( "Processed Count.", 1, consumer.getCountProcessed() );
+    }
+}

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseCleanupConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseCleanupConsumer.java?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseCleanupConsumer.java (added)
+++ maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseCleanupConsumer.java Thu May 17 15:16:57 2007
@@ -0,0 +1,100 @@
+package org.apache.maven.archiva.database.updater;
+
+/*
+ * 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.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.DatabaseCleanupConsumer;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.List;
+
+/**
+ * TestDatabaseCleanupConsumer 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class TestDatabaseCleanupConsumer
+    extends AbstractMonitoredConsumer
+    implements DatabaseCleanupConsumer
+{
+    private int countBegin = 0;
+    private int countComplete = 0;
+    private int countProcessed = 0;
+
+    public void resetCount()
+    {
+        countBegin = 0;
+        countProcessed = 0;
+        countComplete = 0;
+    }
+
+    public void beginScan()
+    {
+        countBegin++;
+    }
+
+    public void completeScan()
+    {
+        countComplete++;
+    }
+
+    public List getIncludedTypes()
+    {
+        return null;
+    }
+
+    public void processArchivaArtifact( ArchivaArtifact artifact )
+        throws ConsumerException
+    {
+        countProcessed++;
+    }
+
+    public String getDescription()
+    {
+        return "Test Consumer for Database Unprocessed";
+    }
+
+    public String getId()
+    {
+        return "test-db-unprocessed";
+    }
+
+    public boolean isPermanent()
+    {
+        return false;
+    }
+
+    public int getCountBegin()
+    {
+        return countBegin;
+    }
+
+    public int getCountComplete()
+    {
+        return countComplete;
+    }
+
+    public int getCountProcessed()
+    {
+        return countProcessed;
+    }
+}

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseCleanupConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseCleanupConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseCleanupConsumer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseUnprocessedConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseUnprocessedConsumer.java?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseUnprocessedConsumer.java (added)
+++ maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseUnprocessedConsumer.java Thu May 17 15:16:57 2007
@@ -0,0 +1,107 @@
+package org.apache.maven.archiva.database.updater;
+
+/*
+ * 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.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * TestDatabaseUnprocessedConsumer 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class TestDatabaseUnprocessedConsumer
+    extends AbstractMonitoredConsumer
+    implements DatabaseUnprocessedArtifactConsumer
+{
+    private int countBegin = 0;
+
+    private int countComplete = 0;
+
+    private int countProcessed = 0;
+
+    public void resetCount()
+    {
+        countBegin = 0;
+        countProcessed = 0;
+        countComplete = 0;
+    }
+
+    public void beginScan()
+    {
+        countBegin++;
+    }
+
+    public void completeScan()
+    {
+        countComplete++;
+    }
+
+    public List getIncludedTypes()
+    {
+        List types = new ArrayList();
+        types.add( "pom" );
+        types.add( "jar" );
+        return types;
+    }
+
+    public void processArchivaArtifact( ArchivaArtifact artifact )
+        throws ConsumerException
+    {
+        getLogger().info( "Processing Artifact: " + artifact );
+        countProcessed++;
+    }
+
+    public String getDescription()
+    {
+        return "Test Consumer for Database Unprocessed";
+    }
+
+    public String getId()
+    {
+        return "test-db-unprocessed";
+    }
+
+    public boolean isPermanent()
+    {
+        return false;
+    }
+
+    public int getCountBegin()
+    {
+        return countBegin;
+    }
+
+    public int getCountComplete()
+    {
+        return countComplete;
+    }
+
+    public int getCountProcessed()
+    {
+        return countProcessed;
+    }
+}

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseUnprocessedConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseUnprocessedConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/updater/TestDatabaseUnprocessedConsumer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: maven/archiva/trunk/archiva-database/src/test/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/resources/META-INF/plexus/components.xml?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/resources/META-INF/plexus/components.xml (original)
+++ maven/archiva/trunk/archiva-database/src/test/resources/META-INF/plexus/components.xml Thu May 17 15:16:57 2007
@@ -14,6 +14,18 @@
         </otherProperties>
       </configuration>
     </component>
+    
+    <component>
+      <role>org.apache.maven.archiva.consumers.DatabaseCleanupConsumer</role>
+      <role-hint>test-db-cleanup</role-hint>
+      <implementation>org.apache.maven.archiva.database.updater.TestDatabaseCleanupConsumer</implementation>
+    </component>
+    
+    <component>
+      <role>org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer</role>
+      <role-hint>test-db-unprocessed</role-hint>
+      <implementation>org.apache.maven.archiva.database.updater.TestDatabaseUnprocessedConsumer</implementation>
+    </component>
 
     <component>
       <role>org.codehaus.plexus.logging.LoggerManager</role>

Added: maven/archiva/trunk/archiva-database/src/test/resources/archiva-test.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/resources/archiva-test.xml?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/resources/archiva-test.xml (added)
+++ maven/archiva/trunk/archiva-database/src/test/resources/archiva-test.xml Thu May 17 15:16:57 2007
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  ~ 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.
+  -->
+
+<configuration>
+  <repositories>
+    <repository>
+      <id>internal</id>
+      <name>Archiva Managed Internal Repository</name>
+      <url>file://${appserver.home}/repositories/internal</url>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>false</snapshots>
+      <indexed>true</indexed>
+      <refreshCronExpression>0 0 * * ?</refreshCronExpression>
+    </repository>
+    <repository>
+      <id>snapshots</id>
+      <name>Archiva Managed Snapshot Repository</name>
+      <url>file://${appserver.home}/repositories/internal</url>
+      <layout>default</layout>
+      <releases>false</releases>
+      <snapshots>true</snapshots>
+      <indexed>true</indexed>
+      <refreshCronExpression>0 0,30 * * ?</refreshCronExpression>
+    </repository>
+    <repository>
+      <id>central</id>
+      <name>Central Repository</name>
+      <url>http://repo1.maven.org/maven2</url>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>false</snapshots>
+      <indexed>false</indexed>
+    </repository>
+    <repository>
+      <id>maven2-repository.dev.java.net</id>
+      <name>Java.net Repository for Maven 2</name>
+      <url>https://maven2-repository.dev.java.net/nonav/repository</url>
+      <layout>default</layout>
+      <releases>true</releases>
+      <snapshots>false</snapshots>
+      <indexed>false</indexed>
+    </repository>
+  </repositories>
+
+  <proxyConnectors />
+
+  <networkProxies />
+
+  <repositoryScanning>
+    <fileTypes>
+      <fileType>
+        <id>artifacts</id>
+        <patterns>
+          <pattern>**/*.pom</pattern>
+          <pattern>**/*.jar</pattern>
+          <pattern>**/*.ear</pattern>
+          <pattern>**/*.war</pattern>
+          <pattern>**/*.car</pattern>
+          <pattern>**/*.sar</pattern>
+          <pattern>**/*.mar</pattern>
+          <pattern>**/*.rar</pattern>
+          <pattern>**/*.dtd</pattern>
+          <pattern>**/*.tld</pattern>
+          <pattern>**/*.tar.gz</pattern>
+          <pattern>**/*.tar.bz2</pattern>
+          <pattern>**/*.zip</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>indexable-content</id>
+        <patterns>
+          <pattern>**/*.txt</pattern>
+          <pattern>**/*.TXT</pattern>
+          <pattern>**/*.block</pattern>
+          <pattern>**/*.config</pattern>
+          <pattern>**/*.pom</pattern>
+          <pattern>**/*.xml</pattern>
+          <pattern>**/*.xsd</pattern>
+          <pattern>**/*.dtd</pattern>
+          <pattern>**/*.tld</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>auto-remove</id>
+        <patterns>
+          <pattern>**/*.bak</pattern>
+          <pattern>**/*~</pattern>
+          <pattern>**/*-</pattern>
+        </patterns>
+      </fileType>
+      <fileType>
+        <id>ignored</id>
+        <patterns>
+          <pattern>**/.htaccess</pattern>
+          <pattern>**/KEYS</pattern>
+          <pattern>**/*.rb</pattern>
+          <pattern>**/*.sh</pattern>
+          <pattern>**/.svn/**</pattern>
+          <pattern>**/.DAV/**</pattern>
+        </patterns>
+      </fileType>
+    </fileTypes>
+    <knownContentConsumers>
+      <knownContentConsumer>update-db-artifact</knownContentConsumer>
+      <knownContentConsumer>create-missing-checksums</knownContentConsumer>
+      <knownContentConsumer>update-db-repository-metadata</knownContentConsumer>
+      <knownContentConsumer>validate-checksum</knownContentConsumer>
+      <knownContentConsumer>validate-signature</knownContentConsumer>
+      <knownContentConsumer>index-content</knownContentConsumer>
+      <knownContentConsumer>auto-remove</knownContentConsumer>
+      <knownContentConsumer>auto-rename</knownContentConsumer>
+    </knownContentConsumers>
+    <invalidContentConsumers>
+      <invalidContentConsumer>update-db-bad-content</invalidContentConsumer>
+    </invalidContentConsumers>
+  </repositoryScanning>
+
+  <databaseScanning>
+    <cronExpression>0 0 * * ?</cronExpression>
+    <unprocessedConsumers>
+      <unprocessedConsumer>test-db-unprocessed</unprocessedConsumer>
+      <unprocessedConsumer>index-artifact</unprocessedConsumer>
+      <unprocessedConsumer>update-db-project</unprocessedConsumer>
+      <unprocessedConsumer>validate-repository-metadata</unprocessedConsumer>
+      <unprocessedConsumer>index-archive-toc</unprocessedConsumer>
+      <unprocessedConsumer>update-db-bytecode-stats</unprocessedConsumer>
+      <unprocessedConsumer>index-public-methods</unprocessedConsumer>
+    </unprocessedConsumers>
+    <cleanupConsumers>
+      <cleanupConsumer>test-db-cleanup</cleanupConsumer>
+      <cleanupConsumer>not-present-remove-db-artifact</cleanupConsumer>
+      <cleanupConsumer>not-present-remove-db-project</cleanupConsumer>
+      <cleanupConsumer>not-present-remove-indexed</cleanupConsumer>
+    </cleanupConsumers>
+  </databaseScanning>
+
+</configuration>

Propchange: maven/archiva/trunk/archiva-database/src/test/resources/archiva-test.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-database/src/test/resources/archiva-test.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-database/src/test/resources/archiva-test.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.xml?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.xml (added)
+++ maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.xml Thu May 17 15:16:57 2007
@@ -0,0 +1,29 @@
+<?xml version="1.0" ?>
+
+<component-set>
+  <components>
+    <component>
+      <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+      <implementation>org.apache.maven.archiva.configuration.DefaultArchivaConfiguration</implementation>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.registry.Registry</role>
+          <role-hint>configured</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+    <component>
+      <role>org.codehaus.plexus.registry.Registry</role>
+      <role-hint>configured</role-hint>
+      <implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
+      <configuration>
+        <properties>
+          <system/>
+          <xml fileName="${basedir}/src/test/resources/archiva-test.xml"
+               config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+        </properties>
+      </configuration>
+    </component>
+  </components>
+</component-set>
+

Propchange: maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseConsumersTest.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.xml?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.xml (added)
+++ maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.xml Thu May 17 15:16:57 2007
@@ -0,0 +1,29 @@
+<?xml version="1.0" ?>
+
+<component-set>
+  <components>
+    <component>
+      <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+      <implementation>org.apache.maven.archiva.configuration.DefaultArchivaConfiguration</implementation>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.registry.Registry</role>
+          <role-hint>configured</role-hint>
+        </requirement>
+      </requirements>
+    </component>
+    <component>
+      <role>org.codehaus.plexus.registry.Registry</role>
+      <role-hint>configured</role-hint>
+      <implementation>org.codehaus.plexus.registry.commons.CommonsConfigurationRegistry</implementation>
+      <configuration>
+        <properties>
+          <system/>
+          <xml fileName="${basedir}/src/test/resources/archiva-test.xml"
+               config-name="org.apache.maven.archiva" config-at="org.apache.maven.archiva"/>
+        </properties>
+      </configuration>
+    </component>
+  </components>
+</component-set>
+

Propchange: maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-database/src/test/resources/org/apache/maven/archiva/database/updater/DatabaseUpdaterTest.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: maven/archiva/trunk/archiva-scheduled/pom.xml
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-scheduled/pom.xml?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-scheduled/pom.xml (original)
+++ maven/archiva/trunk/archiva-scheduled/pom.xml Thu May 17 15:16:57 2007
@@ -67,18 +67,13 @@
     </dependency>
     <!-- Test Dependencies -->
     <dependency>
-      <groupId>hsqldb</groupId>
-      <artifactId>hsqldb</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
       <groupId>org.apache.maven.archiva</groupId>
-      <artifactId>archiva-core-consumers</artifactId>
+      <artifactId>archiva-database-consumers</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.maven.archiva</groupId>
-      <artifactId>archiva-database-consumers</artifactId>
+      <groupId>hsqldb</groupId>
+      <artifactId>hsqldb</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>

Modified: maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java?view=diff&rev=539145&r1=539144&r2=539145
==============================================================================
--- maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java (original)
+++ maven/archiva/trunk/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/ArchivaRepositoryScanningTaskExecutor.java Thu May 17 15:16:57 2007
@@ -104,9 +104,9 @@
 
             RepositoryContentStatistics stats = repoScanner.scan( arepo, sinceWhen );
 
-            stats = (RepositoryContentStatistics) dao.save( stats );
-
             getLogger().info( "Finished repository task: " + stats.toDump( arepo ) );
+            
+            stats = (RepositoryContentStatistics) dao.save( stats );
         }
         catch ( ArchivaDatabaseException e )
         {

Added: maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseCleanupConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseCleanupConsumer.java?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseCleanupConsumer.java (added)
+++ maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseCleanupConsumer.java Thu May 17 15:16:57 2007
@@ -0,0 +1,100 @@
+package org.apache.maven.archiva.scheduled;
+
+/*
+ * 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.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.DatabaseCleanupConsumer;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.List;
+
+/**
+ * TestDatabaseCleanupConsumer 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class TestDatabaseCleanupConsumer
+    extends AbstractMonitoredConsumer
+    implements DatabaseCleanupConsumer
+{
+    private int countBegin = 0;
+    private int countComplete = 0;
+    private int countProcessed = 0;
+
+    public void resetCount()
+    {
+        countBegin = 0;
+        countProcessed = 0;
+        countComplete = 0;
+    }
+
+    public void beginScan()
+    {
+        countBegin++;
+    }
+
+    public void completeScan()
+    {
+        countComplete++;
+    }
+
+    public List getIncludedTypes()
+    {
+        return null;
+    }
+
+    public void processArchivaArtifact( ArchivaArtifact artifact )
+        throws ConsumerException
+    {
+        countProcessed++;
+    }
+
+    public String getDescription()
+    {
+        return "Test Consumer for Database Unprocessed";
+    }
+
+    public String getId()
+    {
+        return "test-db-unprocessed";
+    }
+
+    public boolean isPermanent()
+    {
+        return false;
+    }
+
+    public int getCountBegin()
+    {
+        return countBegin;
+    }
+
+    public int getCountComplete()
+    {
+        return countComplete;
+    }
+
+    public int getCountProcessed()
+    {
+        return countProcessed;
+    }
+}

Propchange: maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseCleanupConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseCleanupConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseCleanupConsumer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseUnprocessedConsumer.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseUnprocessedConsumer.java?view=auto&rev=539145
==============================================================================
--- maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseUnprocessedConsumer.java (added)
+++ maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseUnprocessedConsumer.java Thu May 17 15:16:57 2007
@@ -0,0 +1,107 @@
+package org.apache.maven.archiva.scheduled;
+
+/*
+ * 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.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * TestDatabaseUnprocessedConsumer 
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class TestDatabaseUnprocessedConsumer
+    extends AbstractMonitoredConsumer
+    implements DatabaseUnprocessedArtifactConsumer
+{
+    private int countBegin = 0;
+
+    private int countComplete = 0;
+
+    private int countProcessed = 0;
+
+    public void resetCount()
+    {
+        countBegin = 0;
+        countProcessed = 0;
+        countComplete = 0;
+    }
+
+    public void beginScan()
+    {
+        countBegin++;
+    }
+
+    public void completeScan()
+    {
+        countComplete++;
+    }
+
+    public List getIncludedTypes()
+    {
+        List types = new ArrayList();
+        types.add( "pom" );
+        types.add( "jar" );
+        return types;
+    }
+
+    public void processArchivaArtifact( ArchivaArtifact artifact )
+        throws ConsumerException
+    {
+        getLogger().info( "Processing Artifact: " + artifact );
+        countProcessed++;
+    }
+
+    public String getDescription()
+    {
+        return "Test Consumer for Database Unprocessed";
+    }
+
+    public String getId()
+    {
+        return "test-db-unprocessed";
+    }
+
+    public boolean isPermanent()
+    {
+        return false;
+    }
+
+    public int getCountBegin()
+    {
+        return countBegin;
+    }
+
+    public int getCountComplete()
+    {
+        return countComplete;
+    }
+
+    public int getCountProcessed()
+    {
+        return countProcessed;
+    }
+}

Propchange: maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseUnprocessedConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseUnprocessedConsumer.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: maven/archiva/trunk/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/TestDatabaseUnprocessedConsumer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain