Author: oching
Date: Thu Nov 19 09:51:03 2009
New Revision: 882090
URL: http://svn.apache.org/viewvc?rev=882090&view=rev
Log:
[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
Modified:
archiva/trunk/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
archiva/trunk/archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java
Modified:
archiva/trunk/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java?rev=882090&r1=882089&r2=882090&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
(original)
+++
archiva/trunk/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/browsing/DefaultRepositoryBrowsing.java
Thu Nov 19 09:51:03 2009
@@ -21,7 +21,6 @@
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.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 @@
}
ArchivaArtifact pomArtifact = getArtifact( principal,
observableRepositoryIds, groupId, artifactId, version );
-
ArchivaProjectModel model;
if ( !pomArtifact.getModel().isProcessed() )
@@ -153,6 +152,11 @@
model = getProjectModel( groupId, artifactId, pomArtifact.getVersion()
);
+ if ( model.getPackaging() == null || "".equals( model.getPackaging() )
)
+ {
+ model.setPackaging( pomArtifact.getType() );
+ }
+
return model;
}
@@ -215,42 +219,53 @@
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 @@
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 )
{
Modified:
archiva/trunk/archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java?rev=882090&r1=882089&r2=882090&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java
(original)
+++
archiva/trunk/archiva-modules/archiva-database/src/test/java/org/apache/maven/archiva/database/browsing/RepositoryBrowsingTest.java
Thu Nov 19 09:51:03 2009
@@ -20,8 +20,11 @@
*/
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 @@
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 @@
return artifact;
}
- public RepositoryBrowsing lookupBrowser()
+ private RepositoryBrowsing lookupBrowser()
throws Exception
{
RepositoryBrowsing browser = (RepositoryBrowsing) lookup(
RepositoryBrowsing.class );
@@ -66,7 +69,7 @@
return browser;
}
- public void saveTestData()
+ private void saveTestData()
throws Exception
{
ArchivaArtifact artifact;
@@ -74,46 +77,74 @@
// 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 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 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 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 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 @@
throws Exception
{
super.setUp();
-
- ArchivaDAO dao = (ArchivaDAO) lookup( ArchivaDAO.ROLE, "jdo" );
- artifactDao = dao.getArtifactDAO();
+
+ artifactDao = dao.getArtifactDAO();
+ saveTestData();
}
}