From: Maria Odea B. Ching Date: Thu, 19 Nov 2009 09:51:03 +0000 (+0000) Subject: [MRM-1278] Wrong repository displayed in Archiva browse X-Git-Tag: archiva-1.3~52 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e9d9ac68e674be9cc546c136fa3dee6415a9e08a;p=archiva.git [MRM-1278] Wrong repository displayed in Archiva browse o retrieve artifact by using ArtifactsRelatedConstraint instead of using getArtifact(..) with an incorrect type o updated existing and added new unit test for repo browse git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@882090 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java b/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java index dfe6c74bf..3f3e30c66 100644 --- a/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java +++ b/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java @@ -21,7 +21,6 @@ package org.apache.maven.archiva.database.browsing; import java.util.ArrayList; import java.util.Collections; -import java.util.Date; import java.util.List; import org.apache.commons.collections.CollectionUtils; @@ -31,6 +30,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.common.utils.VersionUtil; import org.apache.maven.archiva.database.ArchivaDAO; import org.apache.maven.archiva.database.ArchivaDatabaseException; +import org.apache.maven.archiva.database.Constraint; import org.apache.maven.archiva.database.ObjectNotFoundException; import org.apache.maven.archiva.database.constraints.ArtifactsRelatedConstraint; import org.apache.maven.archiva.database.constraints.ProjectsByArtifactUsageConstraint; @@ -142,7 +142,6 @@ public class DefaultRepositoryBrowsing } ArchivaArtifact pomArtifact = getArtifact( principal, observableRepositoryIds, groupId, artifactId, version ); - ArchivaProjectModel model; if ( !pomArtifact.getModel().isProcessed() ) @@ -153,6 +152,11 @@ public class DefaultRepositoryBrowsing model = getProjectModel( groupId, artifactId, pomArtifact.getVersion() ); + if ( model.getPackaging() == null || "".equals( model.getPackaging() ) ) + { + model.setPackaging( pomArtifact.getType() ); + } + return model; } @@ -215,42 +219,53 @@ public class DefaultRepositoryBrowsing throws ObjectNotFoundException, ArchivaDatabaseException { ArchivaArtifact pomArtifact = null; + Constraint constraint = new ArtifactsRelatedConstraint( groupId, artifactId, version ); - for ( final String repositoryId : observableRepositoryIds ) + try { - try - { - pomArtifact = - dao.getArtifactDAO().getArtifact( groupId, artifactId, version, null, "pom", repositoryId ); - break; - } - catch ( ArchivaDatabaseException e ) + List artifacts = dao.getArtifactDAO().queryArtifacts( constraint ); + + // it's possible that similar artifacts reside in different repos + if ( !artifacts.isEmpty() ) { - pomArtifact = handleGenericSnapshots( groupId, artifactId, version, repositoryId ); + for ( ArchivaArtifact artifact : artifacts ) + { + if ( observableRepositoryIds.contains( artifact.getRepositoryId() ) ) + { + pomArtifact = artifacts.get( 0 ); + break; + } + } } } + catch ( ArchivaDatabaseException e ) + { + log.warn( "ArchivaDatabaseException occurred while querying for artifact '" + groupId + ":" + artifactId + + ":" + version + "'." ); + } if ( pomArtifact == null ) { - String type = getArtifactType( groupId, artifactId, version ); + for ( final String repositoryId : observableRepositoryIds ) + { + pomArtifact = handleGenericSnapshots( groupId, artifactId, version, repositoryId ); - // We dont want these to persist in the database - pomArtifact = - new ArchivaArtifact( groupId, artifactId, version, null, type, observableRepositoryIds.get( 0 ) ); - pomArtifact.getModel().setWhenProcessed( new Date() ); + if ( pomArtifact != null ) + { + break; + } + } } - // Allowed to see this? - if ( observableRepositoryIds.contains( pomArtifact.getModel().getRepositoryId() ) ) - { - return pomArtifact; - } - else + // throw exception if pom artifact is still null! + if ( pomArtifact == null ) { throw new ObjectNotFoundException( "Unable to find artifact " + Keys.toKey( groupId, artifactId, version ) + " in observable repository [" + StringUtils.join( observableRepositoryIds.iterator(), ", " ) + "] for user " + principal ); } + + return pomArtifact; } public List getUsedBy( final String principal, final List observableRepositoryIds, @@ -336,9 +351,17 @@ public class DefaultRepositoryBrowsing try { log.debug( "Retrieving artifact with version " + uniqueVersion ); - result = - dao.getArtifactDAO().getArtifact( groupId, artifactId, uniqueVersion, null, "pom", repositoryId ); - break; + Constraint constraint = new ArtifactsRelatedConstraint( groupId, artifactId, uniqueVersion ); + List artifacts = dao.getArtifactDAO().queryArtifacts( constraint ); + + for ( ArchivaArtifact artifact : artifacts ) + { + if ( artifact.getRepositoryId().equals( repositoryId ) ) + { + result = artifact; + break; + } + } } catch ( ObjectNotFoundException e ) { diff --git a/archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java b/archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java index 77d80ed7a..1a6600a8c 100644 --- a/archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java +++ b/archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java @@ -20,8 +20,11 @@ package org.apache.maven.archiva.database.browsing; */ import org.apache.maven.archiva.database.AbstractArchivaDatabaseTestCase; -import org.apache.maven.archiva.database.ArchivaDAO; +import org.apache.maven.archiva.database.ArchivaDatabaseException; import org.apache.maven.archiva.database.ArtifactDAO; +import org.apache.maven.archiva.database.Constraint; +import org.apache.maven.archiva.database.ObjectNotFoundException; +import org.apache.maven.archiva.database.constraints.ArtifactsRelatedConstraint; import org.apache.maven.archiva.model.ArchivaArtifact; import org.apache.maven.archiva.model.ArchivaProjectModel; @@ -43,14 +46,14 @@ public class RepositoryBrowsingTest static { - GUEST_REPO_IDS = new ArrayList(); - GUEST_REPO_IDS.add( "central" ); + GUEST_REPO_IDS = new ArrayList(); GUEST_REPO_IDS.add( "snapshots" ); + GUEST_REPO_IDS.add( "central" ); } private ArtifactDAO artifactDao; - public ArchivaArtifact createArtifact( String groupId, String artifactId, String version ) + private ArchivaArtifact createArtifact( String groupId, String artifactId, String version ) { ArchivaArtifact artifact = artifactDao.createArtifact( groupId, artifactId, version, "", "jar", "central" ); artifact.getModel().setLastModified( new Date() ); // mandatory field. @@ -58,7 +61,7 @@ public class RepositoryBrowsingTest return artifact; } - public RepositoryBrowsing lookupBrowser() + private RepositoryBrowsing lookupBrowser() throws Exception { RepositoryBrowsing browser = (RepositoryBrowsing) lookup( RepositoryBrowsing.class ); @@ -66,7 +69,7 @@ public class RepositoryBrowsingTest return browser; } - public void saveTestData() + private void saveTestData() throws Exception { ArchivaArtifact artifact; @@ -74,46 +77,74 @@ public class RepositoryBrowsingTest // Setup artifacts in fresh DB. artifact = createArtifact( "commons-lang", "commons-lang", "2.0" ); artifactDao.saveArtifact( artifact ); - + assertArtifactWasSaved( "commons-lang", "commons-lang", "2.0" ); + artifact = createArtifact( "commons-lang", "commons-lang", "2.1" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "commons-lang", "commons-lang", "2.1" ); artifact = createArtifact( "org.apache.maven.test", "test-one", "1.2" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.maven.test", "test-one", "1.2" ); artifact = createArtifact( "org.apache.maven.test.foo", "test-two", "1.0" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.maven.test.foo", "test-two", "1.0" ); artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.0" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.maven.shared", "test-two", "2.0" ); artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.1-SNAPSHOT" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.maven.shared", "test-two", "2.1-SNAPSHOT" ); artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.1-20070522.143249-1" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.maven.shared", "test-two", "2.1-20070522.143249-1" ); artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.1-20070522.153141-2" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.maven.shared", "test-two", "2.1-20070522.153141-2" ); artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.1.1" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.maven.shared", "test-two", "2.1.1" ); artifact = createArtifact( "org.apache.maven.shared", "test-two", "2.1-alpha-1" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.maven.shared", "test-two", "2.1-alpha-1" ); artifact = createArtifact( "org.apache.maven.shared", "test-bar", "2.1" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.maven.shared", "test-bar", "2.1" ); artifact = createArtifact( "org.codehaus.modello", "modellong", "3.0" ); artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.codehaus.modello", "modellong", "3.0" ); + + artifact = createArtifact( "org.apache.archiva", "archiva-indexer", "1.0-20070522.143249-1" ); + artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.archiva", "archiva-indexer", "1.0-20070522.143249-1" ); + + artifact = createArtifact( "org.apache.archiva", "archiva-indexer", "1.0-20070522.153141-2" ); + artifactDao.saveArtifact( artifact ); + assertArtifactWasSaved( "org.apache.archiva", "archiva-indexer", "1.0-20070522.153141-2" ); + } + + private void assertArtifactWasSaved(String groupId, String artifactId, String version) + throws ObjectNotFoundException, ArchivaDatabaseException + { + Constraint constraint = new ArtifactsRelatedConstraint( groupId, artifactId, version ); + List artifacts = artifactDao.queryArtifacts( constraint ); + + assertFalse( "Artifact '" + groupId + ":" + artifactId + ":" + version + "' should have been found.", + artifacts.isEmpty() ); } public void testBrowseIntoGroupWithSubgroups() throws Exception { - saveTestData(); - RepositoryBrowsing browser = lookupBrowser(); BrowsingResults results = browser.selectGroupId( USER_GUEST, GUEST_REPO_IDS, "org.apache.maven.test" ); assertNotNull( "Browsing Results should not be null.", results ); @@ -125,8 +156,6 @@ public class RepositoryBrowsingTest public void testSimpleBrowse() throws Exception { - saveTestData(); - RepositoryBrowsing browser = lookupBrowser(); BrowsingResults results = browser.getRoot( USER_GUEST, GUEST_REPO_IDS ); assertNotNull( "Browsing Results should not be null.", results ); @@ -139,21 +168,37 @@ public class RepositoryBrowsingTest public void testViewArtifact() throws Exception { - saveTestData(); - RepositoryBrowsing browser = lookupBrowser(); - ArchivaProjectModel artifact = browser.selectVersion( USER_GUEST, GUEST_REPO_IDS, "org.apache.commons", "commons-lang", "2.0" ); + ArchivaProjectModel artifact = browser.selectVersion( USER_GUEST, GUEST_REPO_IDS, "commons-lang", "commons-lang", "2.0" ); assertNotNull( "Artifact should not be null.", artifact ); - assertEquals( "org.apache.commons", artifact.getGroupId() ); + assertEquals( "commons-lang", artifact.getGroupId() ); assertEquals( "commons-lang", artifact.getArtifactId() ); - assertEquals( "2.0", artifact.getVersion() ); + assertEquals( "2.0", artifact.getVersion() ); + assertEquals( "jar", artifact.getPackaging() ); + + // MRM-1278 + String repoId = browser.getRepositoryId( USER_GUEST, GUEST_REPO_IDS, "commons-lang", "commons-lang", "2.0" ); + assertEquals( "central", repoId ); + } + + public void testViewArtifactWithMultipleTimestampedVersions() + throws Exception + { + RepositoryBrowsing browser = lookupBrowser(); + ArchivaProjectModel artifact = browser.selectVersion( USER_GUEST, GUEST_REPO_IDS, "org.apache.archiva", "archiva-indexer", "1.0-SNAPSHOT" ); + assertNotNull( "Artifact should not be null.", artifact ); + assertEquals( "org.apache.archiva", artifact.getGroupId() ); + assertEquals( "archiva-indexer", artifact.getArtifactId() ); + assertEquals( "1.0-20070522.143249-1", artifact.getVersion() ); + assertEquals( "jar", artifact.getPackaging() ); + + String repoId = browser.getRepositoryId( USER_GUEST, GUEST_REPO_IDS, "org.apache.archiva", "archiva-indexer", "1.0-SNAPSHOT" ); + assertEquals( "central", repoId ); } public void testSelectArtifactId() throws Exception - { - saveTestData(); - + { RepositoryBrowsing browser = lookupBrowser(); BrowsingResults results = browser.selectArtifactId( USER_GUEST, GUEST_REPO_IDS, "org.apache.maven.shared", "test-two" ); @@ -168,8 +213,6 @@ public class RepositoryBrowsingTest public void testGetOtherSnapshotVersionsRequestedVersionIsGeneric() throws Exception { - saveTestData(); - RepositoryBrowsing browser = lookupBrowser(); List results = browser.getOtherSnapshotVersions( GUEST_REPO_IDS, "org.apache.maven.shared", "test-two", "2.1-SNAPSHOT" ); @@ -183,8 +226,6 @@ public class RepositoryBrowsingTest public void testGetOtherSnapshotVersionsRequestedVersionIsUnique() throws Exception { - saveTestData(); - RepositoryBrowsing browser = lookupBrowser(); List results = browser.getOtherSnapshotVersions( GUEST_REPO_IDS, "org.apache.maven.shared", "test-two", "2.1-20070522.143249-1" ); @@ -212,8 +253,8 @@ public class RepositoryBrowsingTest throws Exception { super.setUp(); - - ArchivaDAO dao = (ArchivaDAO) lookup( ArchivaDAO.ROLE, "jdo" ); - artifactDao = dao.getArtifactDAO(); + + artifactDao = dao.getArtifactDAO(); + saveTestData(); } }