summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaria Odea B. Ching <oching@apache.org>2009-11-19 09:51:03 +0000
committerMaria Odea B. Ching <oching@apache.org>2009-11-19 09:51:03 +0000
commite9d9ac68e674be9cc546c136fa3dee6415a9e08a (patch)
treed21b220cedb9370998bf86a26bdbb4d99f87aefb
parent2819ac8d303be0c480c8e35a97f379007aec7cc9 (diff)
downloadarchiva-e9d9ac68e674be9cc546c136fa3dee6415a9e08a.tar.gz
archiva-e9d9ac68e674be9cc546c136fa3dee6415a9e08a.zip
[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
-rw-r--r--archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java73
-rw-r--r--archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java93
2 files changed, 115 insertions, 51 deletions
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<ArchivaArtifact> 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<ArchivaProjectModel> getUsedBy( final String principal, final List<String> 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<ArchivaArtifact> 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<String>();
- GUEST_REPO_IDS.add( "central" );
+ GUEST_REPO_IDS = new ArrayList<String>();
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<ArchivaArtifact> 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<String> 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<String> 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();
}
}