Modified: 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java?rev=891064&r1=891063&r2=891064&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
 Tue Dec 15 23:07:36 2009
@@ -53,7 +53,7 @@
 
     private static final String TEST_FACET_ID = "test-facet-id";
 
-    private static final String TEST_NAME = "test-name";
+    private static final String TEST_NAME = "test/name";
 
     private static final String TEST_VALUE = "test-value";
 
@@ -125,7 +125,7 @@
 
     public void testGetMetadataFacet()
     {
-        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, 
new TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, new 
TestMetadataFacet( TEST_VALUE ) );
 
         assertEquals( new TestMetadataFacet( TEST_VALUE ),
                       repository.getMetadataFacet( TEST_REPO_ID, 
TEST_FACET_ID, TEST_NAME ) );
@@ -138,14 +138,14 @@
 
     public void testGetMetadataFacetWhenUnknownName()
     {
-        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, 
new TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, new 
TestMetadataFacet( TEST_VALUE ) );
 
         assertNull( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, 
UNKNOWN ) );
     }
 
     public void testGetMetadataFacetWhenDefaultValue()
     {
-        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, 
new TestMetadataFacet( null ) );
+        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, new 
TestMetadataFacet( null ) );
 
         assertEquals( new TestMetadataFacet( "test-metadata" ),
                       repository.getMetadataFacet( TEST_REPO_ID, 
TEST_FACET_ID, TEST_NAME ) );
@@ -153,14 +153,14 @@
 
     public void testGetMetadataFacetWhenUnknownFacetId()
     {
-        repository.addMetadataFacet( TEST_REPO_ID, UNKNOWN, TEST_NAME, new 
TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( TEST_REPO_ID, UNKNOWN, new 
TestMetadataFacet( TEST_VALUE ) );
 
         assertNull( repository.getMetadataFacet( TEST_REPO_ID, UNKNOWN, 
TEST_NAME ) );
     }
 
     public void testGetMetadataFacets()
     {
-        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, 
new TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, new 
TestMetadataFacet( TEST_VALUE ) );
 
         assertEquals( Collections.singletonList( TEST_NAME ),
                       repository.getMetadataFacets( TEST_REPO_ID, 
TEST_FACET_ID ) );
@@ -174,8 +174,10 @@
 
     public void testRemoveFacets()
     {
+        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, new 
TestMetadataFacet( TEST_VALUE ) );
+
         List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, 
TEST_FACET_ID );
-        assertTrue( facets.isEmpty() );
+        assertFalse( facets.isEmpty() );
 
         repository.removeMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
 
@@ -185,10 +187,8 @@
 
     public void testRemoveFacetsWhenEmpty()
     {
-        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, 
new TestMetadataFacet( TEST_VALUE ) );
-
         List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, 
TEST_FACET_ID );
-        assertFalse( facets.isEmpty() );
+        assertTrue( facets.isEmpty() );
 
         repository.removeMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
 
@@ -201,6 +201,40 @@
         repository.removeMetadataFacets( TEST_REPO_ID, UNKNOWN );
     }
 
+    public void testRemoveFacet()
+    {
+        TestMetadataFacet metadataFacet = new TestMetadataFacet( TEST_VALUE );
+        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, 
metadataFacet );
+
+        assertEquals( metadataFacet, repository.getMetadataFacet( 
TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
+        List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, 
TEST_FACET_ID );
+        assertFalse( facets.isEmpty() );
+
+        repository.removeMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME 
);
+
+        assertNull( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, 
TEST_NAME ) );
+        facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        assertTrue( facets.isEmpty() );
+    }
+
+    public void testRemoveFacetWhenEmpty()
+    {
+        List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, 
TEST_FACET_ID );
+        assertTrue( facets.isEmpty() );
+        assertNull( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, 
TEST_NAME ) );
+
+        repository.removeMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME 
);
+
+        facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        assertTrue( facets.isEmpty() );
+        assertNull( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, 
TEST_NAME ) );
+    }
+
+    public void testRemoveFacetWhenUnknown()
+    {
+        repository.removeMetadataFacet( TEST_REPO_ID, UNKNOWN, TEST_NAME );
+    }
+
     public void testGetArtifacts()
     {
         ArtifactMetadata artifact1 = createArtifact();
@@ -246,8 +280,8 @@
 
     public void testRepositories()
     {
-        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME, 
new TestMetadataFacet( TEST_VALUE ) );
-        repository.addMetadataFacet( OTHER_REPO, TEST_FACET_ID, TEST_NAME, new 
TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, new 
TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( OTHER_REPO, TEST_FACET_ID, new 
TestMetadataFacet( TEST_VALUE ) );
 
         assertEquals( Arrays.asList( OTHER_REPO, TEST_REPO_ID ), 
repository.getRepositories() );
     }
@@ -452,6 +486,11 @@
             return TEST_FACET_ID;
         }
 
+        public String getName()
+        {
+            return TEST_NAME;
+        }
+
         public Map<String, String> toProperties()
         {
             if ( value != null )

Modified: archiva/branches/MRM-1025/archiva-modules/plugins/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/pom.xml?rev=891064&r1=891063&r2=891064&view=diff
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/plugins/pom.xml (original)
+++ archiva/branches/MRM-1025/archiva-modules/plugins/pom.xml Tue Dec 15 
23:07:36 2009
@@ -30,5 +30,6 @@
     <module>metadata-repository-file</module>
     <module>maven2-repository</module>
     <module>repository-statistics</module>
+    <module>problem-reports</module>
   </modules>
 </project>
\ No newline at end of file

Propchange: archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Tue Dec 15 23:07:36 2009
@@ -0,0 +1,2 @@
+target
+*.iml

Added: archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/pom.xml?rev=891064&view=auto
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/pom.xml 
(added)
+++ archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/pom.xml 
Tue Dec 15 23:07:36 2009
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+-->
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd"; 
xmlns="http://maven.apache.org/POM/4.0.0";
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>plugins</artifactId>
+    <groupId>org.apache.archiva</groupId>
+    <version>1.3-SNAPSHOT</version>
+  </parent>
+  <artifactId>problem-reports</artifactId>
+  <name>Archiva Problem Reporting Plugin</name>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>metadata-repository-api</artifactId>
+    </dependency>
+    <!-- TODO: we want to move the event handling, or perhaps centralise under 
deleteArtifact() in the metadata repository itself -->
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-repository-layer</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
+      <artifactId>archiva-checksum</artifactId>
+    </dependency>
+  </dependencies>
+</project>

Copied: 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java
 (from r889234, 
archiva/branches/MRM-1025/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/RepositoryDatabaseEventListener.java)
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java?p2=archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java&p1=archiva/branches/MRM-1025/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/RepositoryDatabaseEventListener.java&r1=889234&r2=891064&rev=891064&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/RepositoryDatabaseEventListener.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java
 Tue Dec 15 23:07:36 2009
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.database;
+package org.apache.archiva.reports;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -9,7 +9,7 @@
  * "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
+ *   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
@@ -19,64 +19,30 @@
  * under the License.
  */
 
-import java.util.List;
-
-import 
org.apache.maven.archiva.database.constraints.RepositoryProblemByArtifactConstraint;
+import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.maven.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.model.RepositoryProblem;
 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
 import org.apache.maven.archiva.repository.events.RepositoryListener;
 
 /**
  * Process repository management events and respond appropriately.
  *
- * @plexus.component 
role="org.apache.maven.archiva.repository.events.RepositoryListener" 
role-hint="database"
+ * @plexus.component 
role="org.apache.maven.archiva.repository.events.RepositoryListener" 
role-hint="problem-reports"
  */
-public class RepositoryDatabaseEventListener
+public class RepositoryProblemEventListener
     implements RepositoryListener
 {
     /**
-     * @plexus.requirement role-hint="jdo"
+     * @plexus.requirement
      */
-    private ArtifactDAO artifactDAO;
-
-    /**
-     * @plexus.requirement role-hint="jdo"
-     */
-    private RepositoryProblemDAO repositoryProblemDAO;
+    private MetadataRepository metadataRepository;
 
     public void deleteArtifact( ManagedRepositoryContent repository, 
ArchivaArtifact artifact )
     {
-        try
-        {
-            ArchivaArtifact queriedArtifact =
-                artifactDAO.getArtifact( artifact.getGroupId(), 
artifact.getArtifactId(), artifact.getVersion(),
-                                         artifact.getClassifier(), 
artifact.getType(), repository.getId() );
-            artifactDAO.deleteArtifact( queriedArtifact );
-        }
-        catch ( ArchivaDatabaseException e )
-        {
-            // ignored
-        }
-
-        try
-        {
-            // Remove all repository problems related to this artifact
-            Constraint artifactConstraint = new 
RepositoryProblemByArtifactConstraint( artifact );
-            List<RepositoryProblem> repositoryProblems =
-                repositoryProblemDAO.queryRepositoryProblems( 
artifactConstraint );
+        String name =
+            RepositoryProblemFacet.createName( artifact.getGroupId(), 
artifact.getArtifactId(), artifact.getVersion(),
+                                               repository.toFile( artifact 
).getName() );
 
-            if ( repositoryProblems != null )
-            {
-                for ( RepositoryProblem repositoryProblem : repositoryProblems 
)
-                {
-                    repositoryProblemDAO.deleteRepositoryProblem( 
repositoryProblem );
-                }
-            }
-        }
-        catch ( ArchivaDatabaseException e )
-        {
-            // ignored
-        }
+        metadataRepository.removeMetadataFacet( repository.getId(), 
RepositoryProblemFacet.FACET_ID, name );
     }
-}
+}
\ No newline at end of file

Added: 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemFacet.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemFacet.java?rev=891064&view=auto
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemFacet.java
 (added)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemFacet.java
 Tue Dec 15 23:07:36 2009
@@ -0,0 +1,154 @@
+package org.apache.archiva.reports;
+
+/*
+ * 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 java.util.HashMap;
+import java.util.Map;
+
+import org.apache.archiva.metadata.model.MetadataFacet;
+
+public class RepositoryProblemFacet
+    implements MetadataFacet
+{
+    public static final String FACET_ID = "org.apache.archiva.reports";
+
+    private String repositoryId;
+
+    private String namespace;
+
+    private String project;
+
+    private String version;
+
+    private String id;
+
+    private String message;
+
+    private String problem;
+
+    public String getFacetId()
+    {
+        return FACET_ID;
+    }
+
+    public String getName()
+    {
+        return createName( namespace, project, version, id );
+    }
+
+    public Map<String, String> toProperties()
+    {
+        Map<String, String> map = new HashMap<String, String>();
+        map.put( "repositoryId", repositoryId );
+        map.put( "namespace", namespace );
+        map.put( "project", project );
+        map.put( "version", version );
+        map.put( "id", id );
+        map.put( "message", message );
+        map.put( "problem", problem );
+        return map;
+    }
+
+    public void fromProperties( Map<String, String> properties )
+    {
+        repositoryId = properties.get( "repositoryId" );
+        namespace = properties.get( "namespace" );
+        project = properties.get( "project" );
+        version = properties.get( "version" );
+        id = properties.get( "id" );
+        message = properties.get( "message" );
+        problem = properties.get( "problem" );
+    }
+
+    public void setRepositoryId( String repositoryId )
+    {
+        this.repositoryId = repositoryId;
+    }
+
+    public void setNamespace( String namespace )
+    {
+        this.namespace = namespace;
+    }
+
+    public String getRepositoryId()
+    {
+        return repositoryId;
+    }
+
+    public String getNamespace()
+    {
+        return namespace;
+    }
+
+    public void setProject( String project )
+    {
+        this.project = project;
+    }
+
+    public String getProject()
+    {
+        return project;
+    }
+
+    public void setVersion( String version )
+    {
+        this.version = version;
+    }
+
+    public String getVersion()
+    {
+        return version;
+    }
+
+    public void setId( String id )
+    {
+        this.id = id;
+    }
+
+    public String getId()
+    {
+        return id;
+    }
+
+    public void setMessage( String message )
+    {
+        this.message = message;
+    }
+
+    public String getMessage()
+    {
+        return message;
+    }
+
+    public void setProblem( String problem )
+    {
+        this.problem = problem;
+    }
+
+    public String getProblem()
+    {
+        return problem;
+    }
+
+    static String createName( String namespace, String project, String 
projectVersion, String id )
+    {
+        return namespace + "/" + project + "/" + projectVersion + "/" + id;
+    }
+}

Added: 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemFacetFactory.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemFacetFactory.java?rev=891064&view=auto
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemFacetFactory.java
 (added)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemFacetFactory.java
 Tue Dec 15 23:07:36 2009
@@ -0,0 +1,35 @@
+package org.apache.archiva.reports;
+
+/*
+ * 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.MetadataFacet;
+import org.apache.archiva.metadata.model.MetadataFacetFactory;
+
+/**
+ * @plexus.component 
role="org.apache.archiva.metadata.model.MetadataFacetFactory" 
role-hint="org.apache.archiva.reports"
+ */
+public class RepositoryProblemFacetFactory
+    implements MetadataFacetFactory
+{
+    public MetadataFacet createMetadataFacet()
+    {
+        return new RepositoryProblemFacet();
+    }
+}

Copied: 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
 (from r889234, 
archiva/branches/MRM-1025/archiva-modules/archiva-reporting/archiva-artifact-reports/src/main/java/org/apache/maven/archiva/reporting/artifact/DuplicateArtifactsConsumer.java)
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java?p2=archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java&p1=archiva/branches/MRM-1025/archiva-modules/archiva-reporting/archiva-artifact-reports/src/main/java/org/apache/maven/archiva/reporting/artifact/DuplicateArtifactsConsumer.java&r1=889234&r2=891064&rev=891064&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-reporting/archiva-artifact-reports/src/main/java/org/apache/maven/archiva/reporting/artifact/DuplicateArtifactsConsumer.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
 Tue Dec 15 23:07:36 2009
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.reporting.artifact;
+package org.apache.archiva.reports.consumers;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -20,11 +20,17 @@
  */
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
+import org.apache.archiva.checksum.ChecksumAlgorithm;
+import org.apache.archiva.checksum.ChecksummedFile;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.reports.RepositoryProblemFacet;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.ConfigurationNames;
@@ -33,18 +39,11 @@
 import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.maven.archiva.consumers.ConsumerException;
 import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
-import org.apache.maven.archiva.database.ArchivaDAO;
-import org.apache.maven.archiva.database.ArchivaDatabaseException;
-import org.apache.maven.archiva.database.ObjectNotFoundException;
-import 
org.apache.maven.archiva.database.constraints.ArtifactsByChecksumConstraint;
-import org.apache.maven.archiva.model.ArchivaArtifact;
-import org.apache.maven.archiva.model.RepositoryProblem;
+import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
 import org.apache.maven.archiva.repository.RepositoryContentFactory;
 import org.apache.maven.archiva.repository.RepositoryException;
 import org.apache.maven.archiva.repository.layout.LayoutException;
-import org.codehaus.plexus.digest.Digester;
-import org.codehaus.plexus.digest.DigesterException;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 import 
org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
 import org.codehaus.plexus.registry.Registry;
@@ -89,11 +88,6 @@
     private FileTypes filetypes;
 
     /**
-     * @plexus.requirement role-hint="jdo"
-     */
-    private ArchivaDAO dao;
-
-    /**
      * @plexus.requirement
      */
     private RepositoryContentFactory repositoryFactory;
@@ -102,15 +96,15 @@
 
     private File repositoryDir;
 
-    /**
-     * @plexus.requirement role-hint="sha1"
-     */
-    private Digester digestSha1;
-
     private String repoId;
 
     private ManagedRepositoryContent repository;
 
+    /**
+     * @plexus.requirement
+     */
+    private MetadataRepository metadataRepository;
+
     public String getId()
     {
         return id;
@@ -159,31 +153,17 @@
         // TODO: would be quicker to somehow make sure it ran after the update 
database consumer, or as a part of that
         //  perhaps could use an artifact context that is retained for all 
consumers? First in can set the SHA-1
         String checksumSha1;
+        ChecksummedFile checksummedFile = new ChecksummedFile( artifactFile );
         try
         {
-            checksumSha1 = digestSha1.calc( artifactFile );
+            checksumSha1 = checksummedFile.calculateChecksum( 
ChecksumAlgorithm.SHA1 );
         }
-        catch ( DigesterException e )
+        catch ( IOException e )
         {
             throw new ConsumerException( e.getMessage(), e );
         }
 
-        List<ArchivaArtifact> results;
-        try
-        {
-            results = dao.getArtifactDAO().queryArtifacts(
-                new ArtifactsByChecksumConstraint( checksumSha1, 
ArtifactsByChecksumConstraint.SHA1 ) );
-        }
-        catch ( ObjectNotFoundException e )
-        {
-            log.debug( "No duplicates for artifact: " + path + " (repository " 
+ repoId + ")" );
-            return;
-        }
-        catch ( ArchivaDatabaseException e )
-        {
-            log.warn( "Unable to query DB for potential duplicates with: " + 
path + " (repository " + repoId + "): " + e.getMessage(), e );
-            return;
-        }
+        List<ArtifactMetadata> results = 
metadataRepository.getArtifactsByChecksum( repoId, checksumSha1 );
 
         if ( CollectionUtils.isNotEmpty( results ) )
         {
@@ -194,45 +174,42 @@
                 return;
             }
 
-            ArchivaArtifact artifact;
+            ArtifactReference artifactReference;
             try
             {
-                artifact = new ArchivaArtifact( 
repository.toArtifactReference( path ), repoId );
+                artifactReference = repository.toArtifactReference( path );
             }
             catch ( LayoutException e )
             {
                 log.warn( "Unable to report problem for path: " + path );
                 return;
             }
-            for ( ArchivaArtifact dupArtifact : results )
+
+            for ( ArtifactMetadata dupArtifact : results )
             {
-                if ( dupArtifact.equals( artifact ) )
+                String id = path.substring( path.lastIndexOf( "/" ) + 1 );
+                if ( dupArtifact.getId().equals( id ) &&
+                    dupArtifact.getNamespace().equals( 
artifactReference.getGroupId() ) &&
+                    dupArtifact.getProject().equals( 
artifactReference.getArtifactId() ) &&
+                    dupArtifact.getVersion().equals( 
artifactReference.getVersion() ) )
                 {
                     // Skip reference to itself.
                     continue;
                 }
 
-                RepositoryProblem problem = new RepositoryProblem();
-                problem.setRepositoryId( 
dupArtifact.getModel().getRepositoryId() );
-                problem.setPath( path );
-                problem.setGroupId( artifact.getGroupId() );
-                problem.setArtifactId( artifact.getArtifactId() );
-                problem.setVersion( artifact.getVersion() );
-                problem.setType( 
DuplicateArtifactReport.PROBLEM_TYPE_DUPLICATE_ARTIFACTS );
-                problem.setOrigin( getId() );
-                problem.setMessage( "Duplicate Artifact Detected: " + artifact 
+ " <--> " + dupArtifact );
+                RepositoryProblemFacet problem = new RepositoryProblemFacet();
+                problem.setRepositoryId( repoId );
+                problem.setNamespace( artifactReference.getGroupId() );
+                problem.setProject( artifactReference.getArtifactId() );
+                problem.setVersion( artifactReference.getVersion() );
+                problem.setId( id );
+                // TODO: proper path conversion for new metadata
+                problem.setMessage(
+                    "Duplicate Artifact Detected: " + path + " <--> " + 
dupArtifact.getNamespace().replace( '.', '/' ) +
+                        "/" + dupArtifact.getProject() + "/" + 
dupArtifact.getVersion() + "/" + dupArtifact.getId() );
+                problem.setProblem( "duplicate-artifact" );
 
-                try
-                {
-                    log.debug( "Found duplicate artifact: " + problem );
-                    dao.getRepositoryProblemDAO().saveRepositoryProblem( 
problem );
-                }
-                catch ( ArchivaDatabaseException e )
-                {
-                    String emsg = "Unable to save problem with duplicate 
artifact to DB: " + e.getMessage();
-                    log.warn( emsg, e );
-                    throw new ConsumerException( emsg, e );
-                }
+                metadataRepository.addMetadataFacet( repoId, 
RepositoryProblemFacet.FACET_ID, problem );
             }
         }
     }

Propchange: 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Propchange: 
archiva/branches/MRM-1025/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java?rev=891064&r1=891063&r2=891064&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
 Tue Dec 15 23:07:36 2009
@@ -19,9 +19,7 @@
  * under the License.
  */
 
-import java.text.DateFormat;
 import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
@@ -44,8 +42,6 @@
      */
     private MetadataRepository metadataRepository;
 
-    static final DateFormat SCAN_TIMESTAMP = new SimpleDateFormat( 
"yyyyMMdd.HHmmss.SSS" );
-
     public RepositoryStatistics getLastStatistics( String repositoryId )
     {
         // TODO: consider a more efficient implementation that directly gets 
the last one from the content repository
@@ -81,9 +77,7 @@
         // populate total project count from content repository
 //        repositoryStatistics.setTotalProjectCount(  );
 
-        metadataRepository.addMetadataFacet( repositoryId, 
RepositoryStatistics.FACET_ID,
-                                             SCAN_TIMESTAMP.format( 
repositoryStatistics.getScanStartTime() ),
-                                             repositoryStatistics );
+        metadataRepository.addMetadataFacet( repositoryId, 
RepositoryStatistics.FACET_ID, repositoryStatistics );
     }
 
     public void deleteStatistics( String repositoryId )
@@ -100,7 +94,7 @@
         {
             try
             {
-                Date date = SCAN_TIMESTAMP.parse( name );
+                Date date = RepositoryStatistics.SCAN_TIMESTAMP.parse( name );
                 if ( ( startTime == null || !date.before( startTime ) ) &&
                     ( endTime == null || !date.after( endTime ) ) )
                 {

Modified: 
archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatistics.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatistics.java?rev=891064&r1=891063&r2=891064&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatistics.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/RepositoryStatistics.java
 Tue Dec 15 23:07:36 2009
@@ -19,6 +19,8 @@
  * under the License.
  */
 
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -46,6 +48,8 @@
 
     public static String FACET_ID = 
"org.apache.archiva.metadata.repository.stats";
 
+    static final DateFormat SCAN_TIMESTAMP = new SimpleDateFormat( 
"yyyyMMdd.HHmmss.SSS" );
+
     public Date getScanEndTime()
     {
         return scanEndTime;
@@ -136,6 +140,11 @@
         return FACET_ID;
     }
 
+    public String getName()
+    {
+        return SCAN_TIMESTAMP.format( scanStartTime );
+    }
+
     public Map<String, String> toProperties()
     {
         Map<String, String> properties = new HashMap<String, String>();

Modified: 
archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java?rev=891064&r1=891063&r2=891064&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java
 Tue Dec 15 23:07:36 2009
@@ -65,11 +65,10 @@
     public void testGetLatestStats()
         throws ParseException
     {
-        Date endTime =
-            new Date( DefaultRepositoryStatisticsManager.SCAN_TIMESTAMP.parse( 
SECOND_TEST_SCAN ).getTime() + 60000 );
+        Date endTime = new Date( RepositoryStatistics.SCAN_TIMESTAMP.parse( 
SECOND_TEST_SCAN ).getTime() + 60000 );
 
         RepositoryStatistics stats = new RepositoryStatistics();
-        stats.setScanStartTime( 
DefaultRepositoryStatisticsManager.SCAN_TIMESTAMP.parse( SECOND_TEST_SCAN ) );
+        stats.setScanStartTime( RepositoryStatistics.SCAN_TIMESTAMP.parse( 
SECOND_TEST_SCAN ) );
         stats.setScanEndTime( endTime );
         stats.setTotalArtifactFileSize( 1314527915L );
         stats.setNewFileCount( 123 );
@@ -94,8 +93,8 @@
         assertEquals( 2031, stats.getTotalProjectCount() );
         assertEquals( 529, stats.getTotalGroupCount() );
         assertEquals( 56229, stats.getTotalFileCount() );
-        assertEquals( SECOND_TEST_SCAN,
-                      
DefaultRepositoryStatisticsManager.SCAN_TIMESTAMP.format( 
stats.getScanStartTime() ) );
+        assertEquals( SECOND_TEST_SCAN, 
RepositoryStatistics.SCAN_TIMESTAMP.format( stats.getScanStartTime() ) );
+        assertEquals( SECOND_TEST_SCAN, stats.getName() );
         assertEquals( endTime, stats.getScanEndTime() );
 
         metadataRepositoryControl.verify();
@@ -119,17 +118,15 @@
         Date current = new Date();
         Date startTime = new Date( current.getTime() - 12345 );
 
-        RepositoryStatistics stats1 = createTestStats( startTime, current );
+        RepositoryStatistics stats = createTestStats( startTime, current );
 
-        String startTimeAsString = 
DefaultRepositoryStatisticsManager.SCAN_TIMESTAMP.format( startTime );
-        metadataRepository.addMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, startTimeAsString, stats1 );
+        metadataRepository.addMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, stats );
         metadataRepositoryControl.expectAndReturn(
             metadataRepository.getMetadataFacets( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID ),
-            Arrays.asList( startTimeAsString ) );
+            Arrays.asList( stats.getName() ) );
         metadataRepositoryControl.expectAndReturn(
-            metadataRepository.getMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, startTimeAsString ),
-            stats1 );
-        RepositoryStatistics stats = stats1;
+            metadataRepository.getMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, stats.getName() ),
+            stats );
 
         metadataRepositoryControl.replay();
 
@@ -155,19 +152,17 @@
 
         Date startTime1 = new Date( current.getTime() - 12345 );
         RepositoryStatistics stats1 = createTestStats( startTime1, new Date( 
current.getTime() - 6000 ) );
-        String startTimeAsString1 = 
DefaultRepositoryStatisticsManager.SCAN_TIMESTAMP.format( startTime1 );
-        metadataRepository.addMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, startTimeAsString1, stats1 );
+        metadataRepository.addMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, stats1 );
 
         Date startTime2 = new Date( current.getTime() - 3000 );
         RepositoryStatistics stats2 = createTestStats( startTime2, current );
-        String startTimeAsString2 = 
DefaultRepositoryStatisticsManager.SCAN_TIMESTAMP.format( startTime2 );
-        metadataRepository.addMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, startTimeAsString2, stats2 );
+        metadataRepository.addMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, stats2 );
 
         metadataRepositoryControl.expectAndReturn(
             metadataRepository.getMetadataFacets( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID ),
-            Arrays.asList( startTimeAsString1, startTimeAsString2 ) );
+            Arrays.asList( stats1.getName(), stats2.getName() ) );
         metadataRepositoryControl.expectAndReturn(
-            metadataRepository.getMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, startTimeAsString2 ),
+            metadataRepository.getMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, stats2.getName() ),
             stats2 );
 
         metadataRepository.removeMetadataFacets( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID );
@@ -230,7 +225,7 @@
 
         for ( RepositoryStatistics stats : statsCreated.values() )
         {
-            repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, 
stats );           
+            repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, 
stats );
         }
 
         List<RepositoryStatistics> list =
@@ -396,9 +391,8 @@
     private void addStats( Date startTime, Date endTime )
     {
         RepositoryStatistics stats = createTestStats( startTime, endTime );
-        String startTimeAsString = 
DefaultRepositoryStatisticsManager.SCAN_TIMESTAMP.format( startTime );
-        metadataRepository.addMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, startTimeAsString, stats );
-        statsCreated.put( startTimeAsString, stats );
+        metadataRepository.addMetadataFacet( TEST_REPO_ID, 
RepositoryStatistics.FACET_ID, stats );
+        statsCreated.put( stats.getName(), stats );
     }
 
     private RepositoryStatistics createTestStats( Date startTime, Date endTime 
)

Modified: archiva/branches/MRM-1025/archiva-modules/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/pom.xml?rev=891064&r1=891063&r2=891064&view=diff
==============================================================================
--- archiva/branches/MRM-1025/archiva-modules/pom.xml (original)
+++ archiva/branches/MRM-1025/archiva-modules/pom.xml Tue Dec 15 23:07:36 2009
@@ -30,7 +30,6 @@
   <modules>
     <module>archiva-base</module>
     <module>archiva-database</module>
-    <module>archiva-reporting</module>
     <module>archiva-scheduler</module>
     <module>archiva-web</module>
     <module>metadata</module>

Modified: archiva/branches/MRM-1025/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/pom.xml?rev=891064&r1=891063&r2=891064&view=diff
==============================================================================
--- archiva/branches/MRM-1025/pom.xml (original)
+++ archiva/branches/MRM-1025/pom.xml Tue Dec 15 23:07:36 2009
@@ -311,22 +311,22 @@
       </dependency>
       <dependency>
         <groupId>org.apache.archiva</groupId>
-        <artifactId>maven2-repository</artifactId>
+        <artifactId>problem-reports</artifactId>
         <version>1.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>org.apache.archiva</groupId>
-        <artifactId>archiva-applet</artifactId>
+        <artifactId>maven2-repository</artifactId>
         <version>1.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>org.apache.archiva</groupId>
-        <artifactId>archiva-artifact-converter</artifactId>
+        <artifactId>archiva-applet</artifactId>
         <version>1.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>org.apache.archiva</groupId>
-        <artifactId>archiva-artifact-reports</artifactId>
+        <artifactId>archiva-artifact-converter</artifactId>
         <version>1.3-SNAPSHOT</version>
       </dependency>
       <dependency>
@@ -396,11 +396,6 @@
       </dependency>
       <dependency>
         <groupId>org.apache.archiva</groupId>
-        <artifactId>archiva-report-manager</artifactId>
-        <version>1.3-SNAPSHOT</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.archiva</groupId>
         <artifactId>archiva-repository-layer</artifactId>
         <version>1.3-SNAPSHOT</version>
       </dependency>


Reply via email to