Merged /archiva/trunk:r882055-882383

git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@882394 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Brett Porter 2009-11-20 03:15:07 +00:00
commit 69a38f7af5
2 changed files with 115 additions and 51 deletions

View File

@ -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
List<ArchivaArtifact> artifacts = dao.getArtifactDAO().queryArtifacts( constraint );
// it's possible that similar artifacts reside in different repos
if ( !artifacts.isEmpty() )
{
pomArtifact =
dao.getArtifactDAO().getArtifact( groupId, artifactId, version, null, "pom", repositoryId );
break;
}
catch ( ArchivaDatabaseException e )
{
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 )
{

View File

@ -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;
@ -44,13 +47,13 @@ public class RepositoryBrowsingTest
static
{
GUEST_REPO_IDS = new ArrayList<String>();
GUEST_REPO_IDS.add( "central" );
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( "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" );
@ -213,7 +254,7 @@ public class RepositoryBrowsingTest
{
super.setUp();
ArchivaDAO dao = (ArchivaDAO) lookup( ArchivaDAO.ROLE, "jdo" );
artifactDao = dao.getArtifactDAO();
saveTestData();
}
}