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>
