Author: brett
Date: Thu Dec 10 08:22:22 2009
New Revision: 889130

URL: http://svn.apache.org/viewvc?rev=889130&view=rev
Log:
[MRM-1300] move search and find artifact action over to metadata repository

Modified:
    
archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
    
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
    
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
    
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp
    
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataRepository.java
    
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/SearchActionTest.java
    
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
    
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
    
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
    
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
 Thu Dec 10 08:22:22 2009
@@ -136,6 +136,11 @@
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
+    public List<ArtifactMetadata> getArtifactsByChecksum( String repoId, 
String checksum )
+    {
+        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    }
+
     public Collection<ArtifactMetadata> getArtifacts( String repoId, String 
namespace, String projectId,
                                                       String projectVersion )
     {

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
 Thu Dec 10 08:22:22 2009
@@ -26,23 +26,20 @@
 import java.util.List;
 import java.util.Map;
 
+import com.opensymphony.xwork2.Preparable;
 import org.apache.archiva.indexer.search.RepositorySearch;
 import org.apache.archiva.indexer.search.RepositorySearchException;
 import org.apache.archiva.indexer.search.SearchFields;
 import org.apache.archiva.indexer.search.SearchResultHit;
 import org.apache.archiva.indexer.search.SearchResultLimits;
 import org.apache.archiva.indexer.search.SearchResults;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
-import org.apache.maven.archiva.database.ArchivaDAO;
-import org.apache.maven.archiva.database.ArtifactDAO;
-import org.apache.maven.archiva.database.Constraint;
-import 
org.apache.maven.archiva.database.constraints.ArtifactsByChecksumConstraint;
-import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint;
-import org.apache.maven.archiva.model.ArchivaArtifact;
 import org.apache.maven.archiva.security.AccessDeniedException;
 import org.apache.maven.archiva.security.ArchivaSecurityException;
 import org.apache.maven.archiva.security.PrincipalNotFoundException;
@@ -51,8 +48,6 @@
 import org.springframework.web.context.WebApplicationContext;
 import org.springframework.web.context.support.WebApplicationContextUtils;
 
-import com.opensymphony.xwork2.Preparable;
-
 /**
  * Search all indexed fields by the given criteria.
  *
@@ -71,11 +66,6 @@
     private String q;
 
     /**
-     * @plexus.requirement role-hint="jdo"
-     */
-    private ArchivaDAO dao;
-
-    /**
      * The Search Results.
      */
     private SearchResults results;
@@ -89,7 +79,7 @@
 
     private static final String ARTIFACT = "artifact";
 
-    private List<ArchivaArtifact> databaseResults;
+    private List<ArtifactMetadata> databaseResults;
     
     private int currentPage = 0;
     
@@ -126,7 +116,12 @@
     private Map<String, String> searchFields;
 
     private String infoMessage;
-        
+
+    /**
+     * @plexus.requirement
+     */
+    private MetadataRepository metadataRepository;
+
     public boolean isFromResultsPage()
     {
         return fromResultsPage;
@@ -322,43 +317,9 @@
             buildCompleteQueryString( q );
         }
        
-        //Lets get the versions for the artifact we just found and display them
-        //Yes, this is in the lucene index but its more challenging to get 
them out when we are searching by project
-        
-        // TODO: do we still need to do this? all hits are already filtered in 
the NexusRepositorySearch
-        //      before being returned as search results
-        for ( SearchResultHit resultHit : results.getHits() )
-        {
-            final List<String> versions =
-                (List<String>) dao.query( new UniqueVersionConstraint( 
getObservableRepos(), resultHit.getGroupId(),
-                                                    resultHit.getArtifactId() 
) );
-            if ( versions != null && !versions.isEmpty() )
-            {
-                resultHit.setVersion( null );
-                resultHit.setVersions( filterTimestampedSnapshots( versions ) 
);
-            }
-        }
-       
         return SUCCESS;
     }
 
-    /**
-     * Remove timestamped snapshots from versions
-     */
-    private static List<String> filterTimestampedSnapshots(List<String> 
versions)
-    {
-        final List<String> filtered = new ArrayList<String>();
-        for (final String version : versions)
-        {
-            final String baseVersion = VersionUtil.getBaseVersion(version);
-            if (!filtered.contains(baseVersion))
-            {
-                filtered.add(baseVersion);
-            }
-        }
-        return filtered;
-    }
-
     public String findArtifact()
         throws Exception
     {
@@ -370,10 +331,11 @@
             return INPUT;
         }
 
-        Constraint constraint = new ArtifactsByChecksumConstraint( q );
-        
-        ArtifactDAO artifactDao = dao.getArtifactDAO();
-        databaseResults = artifactDao.queryArtifacts( constraint );
+        databaseResults = new ArrayList<ArtifactMetadata>();
+        for ( String repoId : getObservableRepos() )
+        {
+            databaseResults.addAll( metadataRepository.getArtifactsByChecksum( 
repoId, q ) );
+        }
 
         if ( databaseResults.isEmpty() )
         {
@@ -471,7 +433,7 @@
         return results;
     }
 
-    public List<ArchivaArtifact> getDatabaseResults()
+    public List<ArtifactMetadata> getDatabaseResults()
     {
         return databaseResults;
     }
@@ -632,16 +594,6 @@
         this.nexusSearch = nexusSearch;
     }
 
-    public ArchivaDAO getDao()
-    {
-        return dao;
-    }
-
-    public void setDao( ArchivaDAO dao )
-    {
-        this.dao = dao;
-    }
-
     public UserRepositories getUserRepositories()
     {
         return userRepositories;
@@ -671,4 +623,9 @@
     {
         this.infoMessage = infoMessage;
     }
+
+    public void setMetadataRepository( MetadataRepository metadataRepository )
+    {
+        this.metadataRepository = metadataRepository;
+    }
 }

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/resources/struts.xml
 Thu Dec 10 08:22:22 2009
@@ -177,7 +177,7 @@
       <result name="results">/WEB-INF/jsp/results.jsp</result>
       <result name="error">/WEB-INF/jsp/findArtifact.jsp</result>
       <result name="artifact" type="redirect">
-        
/browse/${databaseResults.get(0).getGroupId()}/${databaseResults.get(0).getArtifactId()}/${databaseResults.get(0).getVersion()}
+        
/browse/${databaseResults.get(0).getNamespace()}/${databaseResults.get(0).getProject()}/${databaseResults.get(0).getVersion()}
       </result>
     </action>    
 

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/results.jsp
 Thu Dec 10 08:22:22 2009
@@ -332,16 +332,16 @@
           <c:otherwise>
             <c:forEach items="${databaseResults}" var="artifactModel" 
varStatus="i">
               <c:choose>
-                <c:when test="${not empty (artifactModel.groupId)}">
+                <c:when test="${not empty (artifactModel.namespace)}">
                   <h3 class="artifact-title">
-                    <archiva:showArtifactTitle 
groupId="${artifactModel.groupId}"
-                                               
artifactId="${artifactModel.artifactId}"
+                    <archiva:showArtifactTitle 
groupId="${artifactModel.namespace}"
+                                               
artifactId="${artifactModel.project}"
                                                
version="${artifactModel.version}"/>
 
                   </h3>
                   <p>
-                    <archiva:showArtifactLink  
groupId="${artifactModel.groupId}"
-                                               
artifactId="${artifactModel.artifactId}"
+                    <archiva:showArtifactLink  
groupId="${artifactModel.namespace}"
+                                               
artifactId="${artifactModel.project}"
                                                
version="${artifactModel.version}"/>
 
                   </p>

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataRepository.java?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataRepository.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/archiva/metadata/repository/memory/TestMetadataRepository.java
 Thu Dec 10 08:22:22 2009
@@ -176,6 +176,11 @@
         return Collections.singletonList( TEST_REPO );
     }
 
+    public List<ArtifactMetadata> getArtifactsByChecksum( String repoId, 
String checksum )
+    {
+        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    }
+
     public Collection<ArtifactMetadata> getArtifacts( String repoId, String 
namespace, String projectId,
                                                       String projectVersion )
     {

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/SearchActionTest.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/SearchActionTest.java?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/SearchActionTest.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/SearchActionTest.java
 Thu Dec 10 08:22:22 2009
@@ -20,146 +20,121 @@
  */
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 
+import com.opensymphony.xwork2.Action;
 import org.apache.archiva.indexer.search.RepositorySearch;
 import org.apache.archiva.indexer.search.SearchFields;
 import org.apache.archiva.indexer.search.SearchResultHit;
 import org.apache.archiva.indexer.search.SearchResultLimits;
 import org.apache.archiva.indexer.search.SearchResults;
 import org.apache.archiva.indexer.util.SearchUtil;
+import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
-import org.apache.maven.archiva.database.ArchivaDAO;
-import org.apache.maven.archiva.database.ArtifactDAO;
-import 
org.apache.maven.archiva.database.constraints.ArtifactsByChecksumConstraint;
-import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint;
-import org.apache.maven.archiva.model.ArchivaArtifact;
 import org.apache.maven.archiva.security.UserRepositories;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 import org.easymock.MockControl;
 
-import com.opensymphony.xwork2.Action;
-
 /**
- * 
+ *
  */
 public class SearchActionTest
-    extends PlexusInSpringTestCase 
+    extends PlexusInSpringTestCase
 {
     private SearchAction action;
-    
-    private MockControl archivaConfigControl;
-    
-    private ArchivaConfiguration archivaConfig;
-    
-    private MockControl daoControl;
-    
-    private ArchivaDAO dao;
-    
+
     private MockControl userReposControl;
-    
+
     private UserRepositories userRepos;
-    
+
     private MockControl searchControl;
-    
+
     private RepositorySearch search;
-    
-    private MockControl artifactDaoControl;
-    
-    private ArtifactDAO artifactDao;
-    
+
+    private static final String TEST_CHECKSUM = "afbcdeaadbcffceabbba1";
+
+    private static final String TEST_REPO = "test-repo";
+
+    private static final String GUEST = "guest";
+
     @Override
-    protected void setUp() 
+    protected void setUp()
         throws Exception
     {
         super.setUp();
-        
+
         action = new SearchAction();
-        
-        archivaConfigControl = MockControl.createControl( 
ArchivaConfiguration.class );        
-        archivaConfig = ( ArchivaConfiguration ) 
archivaConfigControl.getMock();
-        
-        daoControl = MockControl.createControl( ArchivaDAO.class );
-        daoControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );        
-        dao = ( ArchivaDAO ) daoControl.getMock();
-        
-        userReposControl = MockControl.createControl( UserRepositories.class 
);        
+
+        MockControl archivaConfigControl = MockControl.createControl( 
ArchivaConfiguration.class );
+        ArchivaConfiguration archivaConfig = (ArchivaConfiguration) 
archivaConfigControl.getMock();
+
+        userReposControl = MockControl.createControl( UserRepositories.class );
         userRepos = ( UserRepositories ) userReposControl.getMock();
-        
+
         searchControl = MockControl.createControl( RepositorySearch.class );
         searchControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
         search = ( RepositorySearch ) searchControl.getMock();
-        
-        artifactDaoControl = MockControl.createControl( ArtifactDAO.class );
-        artifactDaoControl.setDefaultMatcher( MockControl.ALWAYS_MATCHER );
-        artifactDao = ( ArtifactDAO ) artifactDaoControl.getMock();
-                
+
         action.setArchivaConfiguration( archivaConfig );
         action.setUserRepositories( userRepos );
-        action.setDao( dao );
         action.setNexusSearch( search );
     }
-    
+
     @Override
     protected void tearDown()
         throws Exception
     {
         super.tearDown();
     }
-    
+
     // quick search...
-    
+
     public void testQuickSearch()
         throws Exception
-    {           
+    {
         action.setQ( "archiva" );
         action.setCurrentPage( 0 );
         action.setSearchResultsOnly( false );
         action.setCompleteQueryString( "" );
-        
+
         List<String> selectedRepos = new ArrayList<String>();
         selectedRepos.add( "internal" );
         selectedRepos.add( "snapshots" );
-        
+
         SearchResultLimits limits = new SearchResultLimits( 
action.getCurrentPage() );
         limits.setPageSize( 30 );
-        
+
         SearchResultHit hit = new SearchResultHit();
         hit.setGroupId( "org.apache.archiva" );
         hit.setArtifactId( "archiva-configuration" );
         hit.setUrl( "url" );
         hit.addVersion( "1.0" );
-        hit.addVersion( "1.1" );        
-        
+        hit.addVersion( "1.1" );
+
         SearchResults results = new SearchResults();
         results.setLimits( limits );
         results.setTotalHits( 1 );
         results.addHit( SearchUtil.getHitId( "org.apache.archiva", 
"archiva-configuration" ), hit );
-        
-        List<String> versions = new ArrayList<String>();
-        versions.add( "1.0" );
-        versions.add( "1.1" );
-        
-        userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( "user" ), selectedRepos, 2 );
-        
+
+        userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( "user" ), selectedRepos );
+
         searchControl.expectAndReturn( search.search( "user", selectedRepos, 
"archiva", limits, null ), results );
-                
-        daoControl.expectAndReturn( dao.query( new UniqueVersionConstraint( 
selectedRepos, hit.getGroupId(), hit.getArtifactId() ) ), versions );
-                
+
         userReposControl.replay();
         searchControl.replay();
-        daoControl.replay();
-        
+
         action.setPrincipal( "user" );
         String result = action.quickSearch();
-        
-        assertEquals( Action.SUCCESS, result );      
+
+        assertEquals( Action.SUCCESS, result );
         assertEquals( 1, action.getTotalPages() );
         assertEquals( 1, action.getResults().getTotalHits() );
-        
+
         userReposControl.verify();
         searchControl.verify();
-        daoControl.verify();
     }
 
     public void testSearchWithinSearchResults()
@@ -169,77 +144,69 @@
         action.setCurrentPage( 0 );
         action.setSearchResultsOnly( true );
         action.setCompleteQueryString( "org;apache" );
-        
+
         List<String> parsed = new ArrayList<String>();
         parsed.add( "org" );
         parsed.add( "apache" );
-        
+
         List<String> selectedRepos = new ArrayList<String>();
         selectedRepos.add( "internal" );
         selectedRepos.add( "snapshots" );
-        
+
         SearchResultLimits limits = new SearchResultLimits( 
action.getCurrentPage() );
         limits.setPageSize( 30 );
-        
+
         SearchResultHit hit = new SearchResultHit();
         hit.setGroupId( "org.apache.archiva" );
         hit.setArtifactId( "archiva-configuration" );
         hit.setUrl( "url" );
         hit.addVersion( "1.0" );
-        hit.addVersion( "1.1" );        
-        
+        hit.addVersion( "1.1" );
+
         SearchResults results = new SearchResults();
         results.setLimits( limits );
         results.setTotalHits( 1 );
         results.addHit( SearchUtil.getHitId( "org.apache.archiva", 
"archiva-configuration" ), hit );
-        
-        List<String> versions = new ArrayList<String>();
-        versions.add( "1.0" );
-        versions.add( "1.1" );
-        
-        userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( "user" ), selectedRepos, 2 );
-        
+
+        userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( "user" ), selectedRepos );
+
         searchControl.expectAndReturn( search.search( "user", selectedRepos, 
"archiva", limits, parsed ), results );
-                
-        daoControl.expectAndReturn( dao.query( new UniqueVersionConstraint( 
selectedRepos, hit.getGroupId(), hit.getArtifactId() ) ), versions );
-                
+
         userReposControl.replay();
         searchControl.replay();
-        daoControl.replay();
-        
+
         action.setPrincipal( "user" );
         String result = action.quickSearch();
-        
+
         assertEquals( Action.SUCCESS, result );
         assertEquals( "org;apache;archiva", action.getCompleteQueryString() );
         assertEquals( 1, action.getTotalPages() );
         assertEquals( 1, action.getResults().getTotalHits() );
-        
+
         userReposControl.verify();
         searchControl.verify();
-        daoControl.verify();
-    }        
-    
+    }
+
     public void testQuickSearchUserHasNoAccessToAnyRepository()
         throws Exception
     {
         action.setQ( "archiva" );
         action.setCurrentPage( 0 );
-        
+
         List<String> selectedRepos = new ArrayList<String>();
-        
+
         userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( "user" ), selectedRepos );
-        
+
         userReposControl.replay();
-        
+
         action.setPrincipal( "user" );
         String result = action.quickSearch();
-        
-        assertEquals( GlobalResults.ACCESS_TO_NO_REPOS, result );        
-        
-        userReposControl.verify();        
+
+        assertEquals( GlobalResults.ACCESS_TO_NO_REPOS, result );
+
+        userReposControl.verify();
     }
-    
+
     public void testQuickSearchNoSearchHits()
         throws Exception
     {
@@ -247,281 +214,299 @@
         action.setCurrentPage( 0 );
         action.setSearchResultsOnly( false );
         action.setCompleteQueryString( "" );
-        
+
         List<String> selectedRepos = new ArrayList<String>();
         selectedRepos.add( "internal" );
         selectedRepos.add( "snapshots" );
-        
+
         SearchResultLimits limits = new SearchResultLimits( 
action.getCurrentPage() );
         limits.setPageSize( 30 );
-                
+
         SearchResults results = new SearchResults();
-        
+
         userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( "user" ), selectedRepos );
-        
+
         searchControl.expectAndReturn( search.search( "user", selectedRepos, 
"archiva", limits, null ), results );
-        
+
         userReposControl.replay();
         searchControl.replay();
-        
+
         action.setPrincipal( "user" );
         String result = action.quickSearch();
-        
-        assertEquals( Action.INPUT, result );        
-        
+
+        assertEquals( Action.INPUT, result );
+
         userReposControl.verify();
         searchControl.verify();
     }
-        
+
     // advanced/filtered search...
-    
+
     public void testAdvancedSearchOneRepository()
         throws Exception
     {
         List<String> managedRepos = new ArrayList<String>();
         managedRepos.add( "internal" );
         managedRepos.add( "snapshots" );
-        
+
         action.setRepositoryId( "internal" );
         action.setManagedRepositoryList( managedRepos );
         action.setCurrentPage( 0 );
         action.setRowCount( 30 );
         action.setGroupId( "org" );
-        
+
         SearchResultLimits limits = new SearchResultLimits( 
action.getCurrentPage() );
         limits.setPageSize( 30 );
-        
+
         SearchResultHit hit = new SearchResultHit();
         hit.setGroupId( "org.apache.archiva" );
         hit.setArtifactId( "archiva-configuration" );
         hit.setUrl( "url" );
         hit.addVersion( "1.0" );
-        hit.addVersion( "1.1" );        
-        
+        hit.addVersion( "1.1" );
+
         SearchResults results = new SearchResults();
         results.setLimits( limits );
         results.setTotalHits( 1 );
         results.addHit( SearchUtil.getHitId( "org.apache.archiva", 
"archiva-configuration" ), hit );
-        
+
         List<String> selectedRepos = new ArrayList<String>();
         selectedRepos.add( "internal" );
         selectedRepos.add( "snapshots" );
-        
+
         SearchFields searchFields = new SearchFields( "org", null, null, null, 
null, selectedRepos );
-        
+
         searchControl.expectAndReturn( search.search( "user", searchFields, 
limits ), results );
-        
+
         searchControl.replay();
-        
+
         String result = action.filteredSearch();
-        
+
         assertEquals( Action.SUCCESS, result );
         assertEquals( 1, action.getTotalPages() );
         assertEquals( 1, action.getResults().getTotalHits() );
-        
+
         searchControl.verify();
     }
-    
+
     public void testAdvancedSearchAllRepositories()
         throws Exception
-    {   
+    {
         List<String> managedRepos = new ArrayList<String>();
         managedRepos.add( "internal" );
         managedRepos.add( "snapshots" );
-        
+
         action.setRepositoryId( "all" );
         action.setManagedRepositoryList( managedRepos );
         action.setCurrentPage( 0 );
         action.setRowCount( 30 );
         action.setGroupId( "org" );
-        
+
         SearchResultLimits limits = new SearchResultLimits( 
action.getCurrentPage() );
         limits.setPageSize( 30 );
-        
+
         SearchResultHit hit = new SearchResultHit();
         hit.setGroupId( "org.apache.archiva" );
         hit.setArtifactId( "archiva-configuration" );
         hit.setUrl( "url" );
         hit.addVersion( "1.0" );
-        hit.addVersion( "1.1" );        
-        
+        hit.addVersion( "1.1" );
+
         SearchResults results = new SearchResults();
         results.setLimits( limits );
         results.setTotalHits( 1 );
         results.addHit( SearchUtil.getHitId( "org.apache.archiva", 
"archiva-configuration" ), hit );
-        
+
         List<String> selectedRepos = new ArrayList<String>();
         selectedRepos.add( "internal" );
-        
+
         SearchFields searchFields = new SearchFields( "org", null, null, null, 
null, selectedRepos );
-        
+
         userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( "user" ), selectedRepos );
-        
+
         searchControl.expectAndReturn( search.search( "user", searchFields, 
limits ), results );
-        
+
         searchControl.replay();
         userReposControl.replay();
 
         action.setPrincipal( "user" );
         String result = action.filteredSearch();
-        
+
         assertEquals( Action.SUCCESS, result );
         assertEquals( 1, action.getTotalPages() );
         assertEquals( 1, action.getResults().getTotalHits() );
-        
+
         searchControl.verify();
         userReposControl.verify();
     }
-        
+
     public void testAdvancedSearchNoSearchHits()
         throws Exception
     {
         List<String> managedRepos = new ArrayList<String>();
         managedRepos.add( "internal" );
         managedRepos.add( "snapshots" );
-        
+
         action.setRepositoryId( "internal" );
         action.setManagedRepositoryList( managedRepos );
         action.setCurrentPage( 0 );
         action.setRowCount( 30 );
         action.setGroupId( "org" );
-        
+
         SearchResultLimits limits = new SearchResultLimits( 
action.getCurrentPage() );
         limits.setPageSize( 30 );
-                
+
         SearchResults results = new SearchResults();
-        
+
         List<String> selectedRepos = new ArrayList<String>();
         selectedRepos.add( "internal" );
         selectedRepos.add( "snapshots" );
-        
+
         SearchFields searchFields = new SearchFields( "org", null, null, null, 
null, selectedRepos );
-        
+
         searchControl.expectAndReturn( search.search( "user", searchFields, 
limits ), results );
-        
+
         searchControl.replay();
-        
+
         String result = action.filteredSearch();
-        
+
         assertEquals( Action.INPUT, result );
         assertFalse( action.getActionErrors().isEmpty() );
         assertEquals( "No results found",( String ) 
action.getActionErrors().iterator().next() );
-        
+
         searchControl.verify();
     }
-    
+
     public void testAdvancedSearchUserHasNoAccessToAnyRepository()
         throws Exception
     {
         List<String> managedRepos = new ArrayList<String>();
-        
+
         action.setGroupId( "org.apache.archiva" );
         action.setManagedRepositoryList( managedRepos );
-        
+
         String result = action.filteredSearch();
-        
+
         assertEquals( GlobalResults.ACCESS_TO_NO_REPOS, result );
     }
-    
+
     public void testAdvancedSearchNoSpecifiedCriteria()
         throws Exception
     {
         List<String> managedRepos = new ArrayList<String>();
-        
+
         action.setManagedRepositoryList( managedRepos );
-        
+
         String result = action.filteredSearch();
-        
+
         assertEquals( Action.INPUT, result );
         assertFalse( action.getActionErrors().isEmpty() );
         assertEquals( "Advanced Search - At least one search criteria must be 
provided.",
                       (String) action.getActionErrors().iterator().next() );
     }
-    
+
     // find artifact..
-    
     public void testFindArtifactWithOneHit()
         throws Exception
     {
-        action.setQ( "afbcdeaadbcffceabbba1" );
-        
-        List<ArchivaArtifact> dbResults = new ArrayList<ArchivaArtifact>();
-        dbResults.add( new ArchivaArtifact( "org.apache.archiva", 
"archiva-configuration", "1.0",
-                                           null, "jar", "test-repo" ) );
-        
-        daoControl.expectAndReturn( dao.getArtifactDAO(), artifactDao );
-        
-        artifactDaoControl.expectAndReturn( artifactDao.queryArtifacts( new 
ArtifactsByChecksumConstraint( action.getQ() ) ), dbResults );
-        
-        daoControl.replay();
-        artifactDaoControl.replay();
-        
+        action.setQ( TEST_CHECKSUM );
+
+        MockControl control = MockControl.createControl( 
MetadataRepository.class );
+        MetadataRepository metadataRepository = (MetadataRepository) 
control.getMock();
+        action.setMetadataRepository( metadataRepository );
+
+        ArtifactMetadata artifact = createArtifact( "archiva-configuration", 
"1.0" );
+        control.expectAndReturn( metadataRepository.getArtifactsByChecksum( 
TEST_REPO, TEST_CHECKSUM ),
+                                 Collections.singletonList( artifact ) );
+
+        userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( GUEST ),
+                                          Collections.singletonList( TEST_REPO 
) );
+
+        control.replay();
+        userReposControl.replay();
+
         String result = action.findArtifact();
         assertEquals( "artifact", result );
-        assertFalse( action.getDatabaseResults().isEmpty() );
         assertEquals( 1, action.getDatabaseResults().size() );
-        
-        daoControl.verify();
-        artifactDaoControl.verify();
+        assertEquals( artifact, action.getDatabaseResults().get( 0 ) );
+
+        control.verify();
+        userReposControl.verify();
     }
-        
+
     public void testFindArtifactWithMultipleHits()
         throws Exception
     {
-        action.setQ( "afbcdeaadbcffceabbba1" );
-        
-        List<ArchivaArtifact> dbResults = new ArrayList<ArchivaArtifact>();
-        dbResults.add( new ArchivaArtifact( "org.apache.archiva", 
"archiva-configuration", "1.0",
-                                           null, "jar", "test-repo" ) );
-        dbResults.add( new ArchivaArtifact( "org.apache.archiva", 
"archiva-indexer", "1.0",
-                                            null, "jar", "test-repo" ) );
-        
-        daoControl.expectAndReturn( dao.getArtifactDAO(), artifactDao );
-        
-        artifactDaoControl.expectAndReturn( artifactDao.queryArtifacts( new 
ArtifactsByChecksumConstraint( action.getQ() ) ), dbResults );
-        
-        daoControl.replay();
-        artifactDaoControl.replay();
-        
+        action.setQ( TEST_CHECKSUM );
+
+        MockControl control = MockControl.createControl( 
MetadataRepository.class );
+        MetadataRepository metadataRepository = (MetadataRepository) 
control.getMock();
+        action.setMetadataRepository( metadataRepository );
+
+        List<ArtifactMetadata> artifacts = Arrays.asList( createArtifact( 
"archiva-configuration", "1.0" ),
+                                                          createArtifact( 
"archiva-indexer", "1.0" ) );
+        control.expectAndReturn( metadataRepository.getArtifactsByChecksum( 
TEST_REPO, TEST_CHECKSUM ), artifacts );
+
+        userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( GUEST ),
+                                          Collections.singletonList( TEST_REPO 
) );
+
+        control.replay();
+        userReposControl.replay();
+
         String result = action.findArtifact();
         assertEquals( "results", result );
         assertFalse( action.getDatabaseResults().isEmpty() );
         assertEquals( 2, action.getDatabaseResults().size() );
-        
-        daoControl.verify();
-        artifactDaoControl.verify();
+
+        control.verify();
+        userReposControl.verify();
     }
-    
+
     public void testFindArtifactNoChecksumSpecified()
         throws Exception
     {
         String result = action.findArtifact();
-        
+
         assertEquals( Action.INPUT, result );
         assertFalse( action.getActionErrors().isEmpty() );
         assertEquals( "Unable to search for a blank checksum", ( String ) 
action.getActionErrors().iterator().next() );
     }
-    
+
     public void testFindArtifactNoResults()
         throws Exception
     {
-        action.setQ( "afbcdeaadbcffceabbba1" );
-        
-        List<ArchivaArtifact> dbResults = new ArrayList<ArchivaArtifact>();
-        
-        daoControl.expectAndReturn( dao.getArtifactDAO(), artifactDao );
-        
-        artifactDaoControl.expectAndReturn( artifactDao.queryArtifacts( new 
ArtifactsByChecksumConstraint( action.getQ() ) ), dbResults );
-        
-        daoControl.replay();
-        artifactDaoControl.replay();
-        
+        action.setQ( TEST_CHECKSUM );
+
+        MockControl control = MockControl.createControl( 
MetadataRepository.class );
+        MetadataRepository metadataRepository = (MetadataRepository) 
control.getMock();
+        action.setMetadataRepository( metadataRepository );
+
+        control.expectAndReturn( metadataRepository.getArtifactsByChecksum( 
TEST_REPO, TEST_CHECKSUM ),
+                                 Collections.<ArtifactMetadata>emptyList() );
+
+        userReposControl.expectAndReturn( 
userRepos.getObservableRepositoryIds( GUEST ),
+                                          Collections.singletonList( TEST_REPO 
) );
+
+        control.replay();
+        userReposControl.replay();
+
         String result = action.findArtifact();
         assertEquals( Action.INPUT, result );
         assertFalse( action.getActionErrors().isEmpty() );
         assertEquals( "No results found", ( String 
)action.getActionErrors().iterator().next() );
-        
-        daoControl.verify();
-        artifactDaoControl.verify();
+
+        control.verify();
+        userReposControl.verify();
+    }
+
+    private ArtifactMetadata createArtifact( String project, String version )
+    {
+        ArtifactMetadata metadata = new ArtifactMetadata();
+        metadata.setNamespace( "org.apache.archiva" );
+        metadata.setProject( project );
+        metadata.setVersion( version );
+        metadata.setRepositoryId( TEST_REPO );
+        metadata.setId( project + "-" + version + ".jar" );
+        return metadata;
     }
 }

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webdav/src/test/java/org/apache/archiva/metadata/repository/TestMetadataRepository.java
 Thu Dec 10 08:22:22 2009
@@ -136,6 +136,11 @@
         return null;  //To change body of implemented methods use File | 
Settings | File Templates.
     }
 
+    public List<ArtifactMetadata> getArtifactsByChecksum( String repoId, 
String checksum )
+    {
+        return null;  //To change body of implemented methods use File | 
Settings | File Templates.
+    }
+
     public Collection<ArtifactMetadata> getArtifacts( String repoId, String 
namespace, String projectId,
                                                       String projectVersion )
     {

Modified: 
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
 Thu Dec 10 08:22:22 2009
@@ -62,4 +62,6 @@
     List<ArtifactMetadata> getArtifactsByDateRange( String repoId, Date 
startTime, Date endTime );
 
     Collection<String> getRepositories();
+
+    List<ArtifactMetadata> getArtifactsByChecksum( String repoId, String 
checksum );
 }

Modified: 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
 Thu Dec 10 08:22:22 2009
@@ -418,6 +418,44 @@
         return repoIds != null ? Arrays.asList( repoIds ) : 
Collections.<String>emptyList();
     }
 
+    public List<ArtifactMetadata> getArtifactsByChecksum( String repositoryId, 
String checksum )
+    {
+        // TODO: this is quite slow - if we are to persist with this 
repository implementation we should build an index
+        //  of this information (eg. in Lucene, as before)
+        // alternatively, we could build a referential tree in the content 
repository, however it would need some levels
+        // of depth to avoid being too broad to be useful (eg. 
/repository/checksums/a/ab/abcdef1234567)
+
+        List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>();
+        for ( String ns : getRootNamespaces( repositoryId ) )
+        {
+            getArtifactsByChecksum( artifacts, repositoryId, ns, checksum );
+        }
+        return artifacts;
+    }
+
+    private void getArtifactsByChecksum( List<ArtifactMetadata> artifacts, 
String repositoryId, String ns,
+                                         String checksum )
+    {
+        for ( String namespace : getNamespaces( repositoryId, ns ) )
+        {
+            getArtifactsByChecksum( artifacts, repositoryId, ns + "." + 
namespace, checksum );
+        }
+
+        for ( String project : getProjects( repositoryId, ns ) )
+        {
+            for ( String version : getProjectVersions( repositoryId, ns, 
project ) )
+            {
+                for ( ArtifactMetadata artifact : getArtifacts( repositoryId, 
ns, project, version ) )
+                {
+                    if ( checksum.equals( artifact.getMd5() ) || 
checksum.equals( artifact.getSha1() ) )
+                    {
+                        artifacts.add( artifact );
+                    }
+                }
+            }
+        }
+    }
+
     private File getMetadataDirectory( String repositoryId, String facetId )
     {
         return new File( this.directory, repositoryId + "/.meta/" + facetId );

Modified: 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java?rev=889130&r1=889129&r2=889130&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
 Thu Dec 10 08:22:22 2009
@@ -61,6 +61,10 @@
 
     private static final String OTHER_REPO = "other-repo";
 
+    private static final String TEST_MD5 = "bd4a9b642562547754086de2dab26b7d";
+
+    private static final String TEST_SHA1 = 
"2e5daf0201ddeb068a62d5e08da18657ab2c6be9";
+
     public void setUp()
         throws Exception
     {
@@ -346,6 +350,60 @@
         assertEquals( Arrays.asList( "shared" ), repository.getNamespaces( 
TEST_REPO_ID, "org.apache.maven" ) );
     }
 
+    public void testGetArtifactsByChecksumSingleResultMd5()
+    {
+        repository.updateNamespace( TEST_REPO_ID, TEST_NAMESPACE );
+        repository.updateProject( TEST_REPO_ID, createProject() );
+        ArtifactMetadata artifact = createArtifact();
+        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, 
TEST_PROJECT_VERSION, artifact );
+
+        assertEquals( Collections.singletonList( artifact ),
+                      repository.getArtifactsByChecksum( TEST_REPO_ID, 
TEST_MD5 ) );
+    }
+
+    public void testGetArtifactsByChecksumSingleResultSha1()
+    {
+        repository.updateNamespace( TEST_REPO_ID, TEST_NAMESPACE );
+        repository.updateProject( TEST_REPO_ID, createProject() );
+        ArtifactMetadata artifact = createArtifact();
+        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, 
TEST_PROJECT_VERSION, artifact );
+
+        assertEquals( Collections.singletonList( artifact ),
+                      repository.getArtifactsByChecksum( TEST_REPO_ID, 
TEST_SHA1 ) );
+    }
+
+    public void testGetArtifactsByChecksumMultipleResult()
+    {
+        repository.updateNamespace( TEST_REPO_ID, TEST_NAMESPACE );
+
+        ProjectMetadata projectMetadata = createProject();
+        repository.updateProject( TEST_REPO_ID, projectMetadata );
+        ArtifactMetadata artifact1 = createArtifact();
+        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, 
TEST_PROJECT_VERSION, artifact1 );
+
+        projectMetadata = createProject();
+        String newProjectId = "another-project";
+        projectMetadata.setId( newProjectId );
+        repository.updateProject( TEST_REPO_ID, projectMetadata );
+        ArtifactMetadata artifact2 = createArtifact();
+        artifact2.setProject( newProjectId );
+        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, newProjectId, 
TEST_PROJECT_VERSION, artifact2 );
+
+        assertEquals( Arrays.asList( artifact2, artifact1 ),
+                      repository.getArtifactsByChecksum( TEST_REPO_ID, 
TEST_SHA1 ) );
+    }
+
+    public void testGetArtifactsByChecksumNoResult()
+    {
+        repository.updateNamespace( TEST_REPO_ID, TEST_NAMESPACE );
+        repository.updateProject( TEST_REPO_ID, createProject() );
+        ArtifactMetadata artifact = createArtifact();
+        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, 
TEST_PROJECT_VERSION, artifact );
+
+        assertEquals( Collections.<ArtifactMetadata>emptyList(),
+                      repository.getArtifactsByChecksum( TEST_REPO_ID, "not a 
checksum" ) );
+    }
+
     private ProjectMetadata createProject()
     {
         return createProject( TEST_NAMESPACE );
@@ -374,6 +432,8 @@
         artifact.setRepositoryId( TEST_REPO_ID );
         artifact.setFileLastModified( System.currentTimeMillis() );
         artifact.setVersion( TEST_PROJECT_VERSION );
+        artifact.setMd5( TEST_MD5 );
+        artifact.setSha1( TEST_SHA1 );
         return artifact;
     }
 


Reply via email to