Browse Source

[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
tags/archiva-1.3
Maria Odea B. Ching 14 years ago
parent
commit
e9d9ac68e6

+ 48
- 25
archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java 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
{
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 )
{

+ 67
- 26
archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java 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;

@@ -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();
}
}

Loading…
Cancel
Save