Author: joakime
Date: Fri Nov  2 15:35:07 2007
New Revision: 591500

URL: http://svn.apache.org/viewvc?rev=591500&view=rev
Log:
[MRM-516] Search results return results for all repositories, regardless of 
security.
Added selectedRepos to interface/impl for CrossRepositorySearch.searchTerms().


Removed:
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AllTests.java
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/AllTests.java
Modified:
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/CrossRepositorySearch.java
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/FileContentIndexPopulator.java
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/HashcodesIndexPopulator.java
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/IndexPopulator.java
    
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.xml
    
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java

Modified: 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/CrossRepositorySearch.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/CrossRepositorySearch.java?rev=591500&r1=591499&r2=591500&view=diff
==============================================================================
--- 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/CrossRepositorySearch.java
 (original)
+++ 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/CrossRepositorySearch.java
 Fri Nov  2 15:35:07 2007
@@ -1,5 +1,7 @@
 package org.apache.maven.archiva.indexer.search;
 
+import java.util.List;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -35,7 +37,7 @@
      * @param limits the limits to apply to the search results.
      * @return the results.
      */
-    public SearchResults searchForTerm( String term, SearchResultLimits limits 
);
+    public SearchResults searchForTerm( String principal, List<String> 
selectedRepos, String term, SearchResultLimits limits );
     
     /**
      * Search for the specific bytecode across all repositories.
@@ -44,7 +46,7 @@
      * @param limits the limits to apply to the search results.
      * @return the results.
      */
-    public SearchResults searchForBytecode( String term, SearchResultLimits 
limits );
+    public SearchResults searchForBytecode( String principal, List<String> 
selectedRepos, String term, SearchResultLimits limits );
 
     /**
      * Search for the specific checksum string across all repositories.
@@ -53,5 +55,5 @@
      * @param limits the limits to apply to the search results.
      * @return the results.
      */
-    public SearchResults searchForChecksum( String checksum, 
SearchResultLimits limits );
+    public SearchResults searchForChecksum( String principal, List<String> 
selectedRepos, String checksum, SearchResultLimits limits );
 }

Modified: 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java?rev=591500&r1=591499&r2=591500&view=diff
==============================================================================
--- 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
 (original)
+++ 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearch.java
 Fri Nov  2 15:35:07 2007
@@ -33,6 +33,9 @@
 import org.apache.maven.archiva.configuration.ConfigurationNames;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
 import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
 import org.apache.maven.archiva.indexer.bytecode.BytecodeHandlers;
 import org.apache.maven.archiva.indexer.filecontent.FileContentHandlers;
 import 
org.apache.maven.archiva.indexer.functors.UserAllowedToSearchRepositoryPredicate;
@@ -63,40 +66,20 @@
     implements CrossRepositorySearch, RegistryListener, Initializable
 {
     /**
-     * @plexus.requirement role-hint="bytecode"
+     * @plexus.requirement role-hint="lucene"
      */
-    private Transformer bytecodeIndexTransformer;
-
-    /**
-     * @plexus.requirement role-hint="filecontent"
-     */
-    private Transformer filecontentIndexTransformer;
-
-    /**
-     * @plexus.requirement role-hint="hashcodes"
-     */
-    private Transformer hashcodesIndexTransformer;
-
-    /**
-     * @plexus.requirement role-hint="searchable"
-     */
-    private Transformer searchableTransformer;
-
-    /**
-     * @plexus.requirement role-hint="index-exists"
-     */
-    private Predicate indexExistsPredicate;
-
+    private RepositoryContentIndexFactory indexFactory;
+    
     /**
      * @plexus.requirement
      */
     private ArchivaConfiguration configuration;
 
-    private List localIndexedRepositories = new ArrayList();
+    private List<ManagedRepositoryConfiguration> localIndexedRepositories = 
new ArrayList<ManagedRepositoryConfiguration>();
 
-    public SearchResults searchForChecksum( String checksum, 
SearchResultLimits limits )
+    public SearchResults searchForChecksum( String principal, List<String> 
selectedRepos, String checksum, SearchResultLimits limits )
     {
-        List indexes = getHashcodeIndexes();
+        List<RepositoryContentIndex> indexes = getHashcodeIndexes( principal, 
selectedRepos );
 
         try
         {
@@ -117,9 +100,9 @@
         return new SearchResults();
     }
 
-    public SearchResults searchForBytecode( String term, SearchResultLimits 
limits )
+    public SearchResults searchForBytecode( String principal, List<String> 
selectedRepos, String term, SearchResultLimits limits )
     {
-        List indexes = getHashcodeIndexes();
+        List<RepositoryContentIndex> indexes = getHashcodeIndexes( principal, 
selectedRepos );
 
         try
         {
@@ -139,9 +122,9 @@
         return new SearchResults();
     }
 
-    public SearchResults searchForTerm( String term, SearchResultLimits limits 
)
+    public SearchResults searchForTerm( String principal, List<String> 
selectedRepos, String term, SearchResultLimits limits )
     {
-        List indexes = getFileContentIndexes();
+        List<RepositoryContentIndex> indexes = getFileContentIndexes( 
principal, selectedRepos );
 
         try
         {
@@ -161,7 +144,7 @@
         return new SearchResults();
     }
 
-    private SearchResults searchAll( LuceneQuery luceneQuery, 
SearchResultLimits limits, List indexes )
+    private SearchResults searchAll( LuceneQuery luceneQuery, 
SearchResultLimits limits, List<RepositoryContentIndex> indexes )
     {
         org.apache.lucene.search.Query specificQuery = 
luceneQuery.getLuceneQuery();
 
@@ -175,12 +158,11 @@
 
         // Setup the converter
         LuceneEntryConverter converter = null;
-        RepositoryContentIndex index = (RepositoryContentIndex) indexes.get( 0 
);
+        RepositoryContentIndex index = indexes.get( 0 );
         converter = index.getEntryConverter();
 
         // Process indexes into an array of Searchables.
-        List searchableList = new ArrayList( indexes );
-        CollectionUtils.transform( searchableList, searchableTransformer );
+        List<Searchable> searchableList = toSearchables( indexes );
 
         Searchable searchables[] = new Searchable[searchableList.size()];
         searchableList.toArray( searchables );
@@ -258,51 +240,101 @@
         return results;
     }
 
-    private Predicate getAllowedToSearchReposPredicate()
+    private List<Searchable> toSearchables( List<RepositoryContentIndex> 
indexes )
     {
-        return new UserAllowedToSearchRepositoryPredicate();
+        List<Searchable> searchableList = new ArrayList<Searchable>();
+        for ( RepositoryContentIndex contentIndex : indexes )
+        {
+            try
+            {
+                searchableList.add( contentIndex.getSearchable() );
+            }
+            catch ( RepositoryIndexSearchException e )
+            {
+                getLogger().warn( "Unable to get searchable for index [" + 
contentIndex.getId() + "] :"
+                                      + e.getMessage(), e );
+            }
+        }
+        return searchableList;
     }
 
-    public List getBytecodeIndexes()
+    public List<RepositoryContentIndex> getBytecodeIndexes( String principal, 
List<String> selectedRepos )
     {
-        List ret = new ArrayList();
+        List<RepositoryContentIndex> ret = new 
ArrayList<RepositoryContentIndex>();
 
-        synchronized ( this.localIndexedRepositories )
+        for ( ManagedRepositoryConfiguration repoConfig : 
localIndexedRepositories )
         {
-            ret.addAll( CollectionUtils.select( this.localIndexedRepositories, 
getAllowedToSearchReposPredicate() ) );
-            CollectionUtils.transform( ret, bytecodeIndexTransformer );
-            CollectionUtils.filter( ret, indexExistsPredicate );
+            // Only used selected repo
+            if ( selectedRepos.contains( repoConfig.getId() ) )
+            {
+                RepositoryContentIndex index = 
indexFactory.createBytecodeIndex( repoConfig );
+                // If they exist.
+                if ( indexExists( index ) )
+                {
+                    ret.add( index );
+                }
+            }
         }
 
         return ret;
     }
 
-    public List getFileContentIndexes()
+    public List<RepositoryContentIndex> getFileContentIndexes( String 
principal, List<String> selectedRepos )
     {
-        List ret = new ArrayList();
+        List<RepositoryContentIndex> ret = new 
ArrayList<RepositoryContentIndex>();
 
-        synchronized ( this.localIndexedRepositories )
+        for ( ManagedRepositoryConfiguration repoConfig : 
localIndexedRepositories )
         {
-            ret.addAll( CollectionUtils.select( this.localIndexedRepositories, 
getAllowedToSearchReposPredicate() ) );
-            CollectionUtils.transform( ret, filecontentIndexTransformer );
-            CollectionUtils.filter( ret, indexExistsPredicate );
+            // Only used selected repo
+            if ( selectedRepos.contains( repoConfig.getId() ) )
+            {
+                RepositoryContentIndex index = 
indexFactory.createFileContentIndex( repoConfig );
+                // If they exist.
+                if ( indexExists( index ) )
+                {
+                    ret.add( index );
+                }
+            }
         }
 
         return ret;
     }
 
-    public List getHashcodeIndexes()
+    public List<RepositoryContentIndex> getHashcodeIndexes( String principal, 
List<String> selectedRepos )
     {
-        List ret = new ArrayList();
+        List<RepositoryContentIndex> ret = new 
ArrayList<RepositoryContentIndex>();
 
-        synchronized ( this.localIndexedRepositories )
+        for ( ManagedRepositoryConfiguration repoConfig : 
localIndexedRepositories )
         {
-            ret.addAll( CollectionUtils.select( this.localIndexedRepositories, 
getAllowedToSearchReposPredicate() ) );
-            CollectionUtils.transform( ret, hashcodesIndexTransformer );
-            CollectionUtils.filter( ret, indexExistsPredicate );
+            // Only used selected repo
+            if ( selectedRepos.contains( repoConfig.getId() ) )
+            {
+                RepositoryContentIndex index = 
indexFactory.createHashcodeIndex( repoConfig );
+                // If they exist.
+                if ( indexExists( index ) )
+                {
+                    ret.add( index );
+                }
+            }
         }
 
         return ret;
+    }
+    
+    private boolean indexExists( RepositoryContentIndex index )
+    {
+        try
+        {
+            return index.exists();
+        }
+        catch ( RepositoryIndexException e )
+        {
+            getLogger().info(
+                              "Repository Content Index [" + index.getId() + 
"] for repository ["
+                                  + index.getRepository().getId() + "] does 
not exist yet in ["
+                                  + 
index.getIndexDirectory().getAbsolutePath() + "]." );
+            return false;
+        }
     }
 
     public void afterConfigurationChange( Registry registry, String 
propertyName, Object propertyValue )

Modified: 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java?rev=591500&r1=591499&r2=591500&view=diff
==============================================================================
--- 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
 (original)
+++ 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/BytecodeIndexPopulator.java
 Fri Nov  2 15:35:07 2007
@@ -19,15 +19,16 @@
  * under the License.
  */
 
-import junit.framework.AssertionFailedError;
 import org.apache.maven.archiva.indexer.bytecode.BytecodeRecord;
 import org.apache.maven.archiva.indexer.bytecode.BytecodeRecordLoader;
 import org.apache.maven.archiva.model.ArchivaArtifact;
 
 import java.io.File;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
+
+import junit.framework.AssertionFailedError;
 
 /**
  * BytecodeIndexPopulator
@@ -39,10 +40,10 @@
     implements IndexPopulator
 {
 
-    public Map getObjectMap()
+    public Map<String,ArchivaArtifact> getObjectMap()
     {
 
-        Map dumps = new HashMap();
+        Map<String,ArchivaArtifact> dumps = new 
HashMap<String,ArchivaArtifact>();
 
         // archiva-common-1.0.jar.txt
         dumps.put( "archiva-common",
@@ -86,15 +87,13 @@
         return artifact;
     }
 
-    public Map populate( File basedir )
+    public Map<String, BytecodeRecord> populate( File basedir )
     {
-        Map records = new HashMap();
+        Map<String, BytecodeRecord> records = new HashMap<String, 
BytecodeRecord>();
 
-        Map artifactDumps = getObjectMap();
-        for ( Iterator iter = artifactDumps.entrySet().iterator(); 
iter.hasNext(); )
+        for ( Entry<String, ArchivaArtifact> entry : getObjectMap().entrySet() 
)
         {
-            Map.Entry entry = (Map.Entry) iter.next();
-            ArchivaArtifact artifact = (ArchivaArtifact) entry.getValue();
+            ArchivaArtifact artifact = entry.getValue();
             File dumpFile = getDumpFile( basedir, artifact );
             BytecodeRecord record = BytecodeRecordLoader.loadRecord( dumpFile, 
artifact );
             record.setRepositoryId( "test-repo" );

Modified: 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java?rev=591500&r1=591499&r2=591500&view=diff
==============================================================================
--- 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
 (original)
+++ 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.java
 Fri Nov  2 15:35:07 2007
@@ -28,10 +28,16 @@
 import org.apache.maven.archiva.indexer.MockConfiguration;
 import org.apache.maven.archiva.indexer.RepositoryContentIndex;
 import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+import org.apache.maven.archiva.indexer.bytecode.BytecodeRecord;
+import org.apache.maven.archiva.indexer.filecontent.FileContentRecord;
+import org.apache.maven.archiva.indexer.hashcodes.HashcodesRecord;
 import org.codehaus.plexus.PlexusTestCase;
 import org.codehaus.plexus.util.FileUtils;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -47,6 +53,7 @@
 
     private static final String TEST_DEFAULT_REPO_ID = "testDefaultRepo";
 
+    @Override
     protected void setUp()
         throws Exception
     {
@@ -86,17 +93,17 @@
         RepositoryContentIndex indexContents = 
indexFactory.createFileContentIndex( repository );
 
         // Now populate them.
-        Map hashcodesMap = ( new HashcodesIndexPopulator() ).populate( new 
File( getBasedir() ) );
+        Map<String, HashcodesRecord> hashcodesMap = new 
HashcodesIndexPopulator().populate( new File( getBasedir() ) );
         indexHashcode.indexRecords( hashcodesMap.values() );
         assertEquals( "Hashcode Key Count", hashcodesMap.size(), 
indexHashcode.getAllRecordKeys().size() );
         assertRecordCount( indexHashcode, hashcodesMap.size() );
 
-        Map bytecodeMap = ( new BytecodeIndexPopulator() ).populate( new File( 
getBasedir() ) );
+        Map<String, BytecodeRecord> bytecodeMap = new 
BytecodeIndexPopulator().populate( new File( getBasedir() ) );
         indexBytecode.indexRecords( bytecodeMap.values() );
         assertEquals( "Bytecode Key Count", bytecodeMap.size(), 
indexBytecode.getAllRecordKeys().size() );
         assertRecordCount( indexBytecode, bytecodeMap.size() );
 
-        Map contentMap = ( new FileContentIndexPopulator() ).populate( new 
File( getBasedir() ) );
+        Map<String, FileContentRecord> contentMap = new 
FileContentIndexPopulator().populate( new File( getBasedir() ) );
         indexContents.indexRecords( contentMap.values() );
         assertEquals( "File Content Key Count", contentMap.size(), 
indexContents.getAllRecordKeys().size() );
         assertRecordCount( indexContents, contentMap.size() );
@@ -125,23 +132,31 @@
     {
         CrossRepositorySearch search = lookupCrossRepositorySearch();
 
-        SearchResultLimits limits = new SearchResultLimits( 0 );
-        limits.setPageSize( 20 );
-
-        SearchResults results = search.searchForTerm( "org", limits );
-        assertResults( 1, 7, results );
+        String expectedRepos[] = new String[] {
+            TEST_DEFAULT_REPO_ID
+        };
+        
+        String expectedResults[] = new String[] { 
+            "org","org2","org3","org4","org5","org6","org7"
+        };
+        
+        assertSearchResults( expectedRepos, expectedResults, search, "org" );
     }
 
     public void testSearchTerm_Junit()
         throws Exception
     {
         CrossRepositorySearch search = lookupCrossRepositorySearch();
-
-        SearchResultLimits limits = new SearchResultLimits( 0 );
-        limits.setPageSize( 20 );
-
-        SearchResults results = search.searchForTerm( "junit", limits );
-        assertResults( 1, 3, results );
+        
+        String expectedRepos[] = new String[] {
+            TEST_DEFAULT_REPO_ID
+        };
+        
+        String expectedResults[] = new String[] { 
+            "junit","junit2","junit3"
+        };
+        
+        assertSearchResults( expectedRepos, expectedResults, search, "junit" );
     }
 
     public void testSearchInvalidTerm()
@@ -149,21 +164,37 @@
     {
         CrossRepositorySearch search = lookupCrossRepositorySearch();
 
-        SearchResultLimits limits = new SearchResultLimits( 0 );
-        limits.setPageSize( 20 );
-
-        SearchResults results = search.searchForTerm( "monosodium", limits );
-        assertResults( 1, 0, results );
+        String expectedRepos[] = new String[] {
+            TEST_DEFAULT_REPO_ID
+        };
+        
+        String expectedResults[] = new String[] { 
+            // Nothing.
+        };
+        
+        assertSearchResults( expectedRepos, expectedResults, search, 
"monosodium" );
     }
-
-    private void assertResults( int repoCount, int hitCount, SearchResults 
results )
+    
+    private void assertSearchResults( String expectedRepos[], String 
expectedResults[], CrossRepositorySearch search, String term )
+        throws Exception
     {
+        SearchResultLimits limits = new SearchResultLimits( 0 );
+        limits.setPageSize( 20 );
+        
+        List<String> selectedRepos = new ArrayList<String>();
+        selectedRepos.addAll( Arrays.asList( expectedRepos ) );
+        
+        SearchResults results = search.searchForTerm( "guest", selectedRepos, 
term, limits );
+        
         assertNotNull( "Search Results should not be null.", results );
-        assertEquals( "Repository Hits", repoCount, 
results.getRepositories().size() );
+        assertEquals( "Repository Hits", expectedRepos.length, 
results.getRepositories().size() );
+        // TODO: test the repository ids returned.
 
-        assertEquals( "Search Result Hits", hitCount, results.getHits().size() 
);
+        assertEquals( "Search Result Hits", expectedResults.length, 
results.getHits().size() );
+        // TODO: test the order of hits.
+        // TODO: test the value of the hits.
     }
-    
+
     protected ManagedRepositoryConfiguration createRepository( String id, 
String name, File location )
     {
         ManagedRepositoryConfiguration repo = new 
ManagedRepositoryConfiguration();

Modified: 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/FileContentIndexPopulator.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/FileContentIndexPopulator.java?rev=591500&r1=591499&r2=591500&view=diff
==============================================================================
--- 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/FileContentIndexPopulator.java
 (original)
+++ 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/FileContentIndexPopulator.java
 Fri Nov  2 15:35:07 2007
@@ -21,6 +21,7 @@
 
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.archiva.indexer.filecontent.FileContentRecord;
+import org.apache.maven.archiva.model.ArchivaArtifact;
 
 import java.io.File;
 import java.io.IOException;
@@ -38,14 +39,14 @@
 public class FileContentIndexPopulator
     implements IndexPopulator
 {
-    public Map getObjectMap()
+    public Map<String, ArchivaArtifact> getObjectMap()
     {
         return null;
     }
 
-    public Map populate( File basedir )
+    public Map<String, FileContentRecord> populate( File basedir )
     {
-        Map map = new HashMap();
+        Map<String, FileContentRecord> map = new HashMap<String, 
FileContentRecord>();
 
         File repoDir = new File( basedir, "src/test/managed-repository" );
 

Modified: 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/HashcodesIndexPopulator.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/HashcodesIndexPopulator.java?rev=591500&r1=591499&r2=591500&view=diff
==============================================================================
--- 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/HashcodesIndexPopulator.java
 (original)
+++ 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/HashcodesIndexPopulator.java
 Fri Nov  2 15:35:07 2007
@@ -1,22 +1,48 @@
 package org.apache.maven.archiva.indexer.search;
 
-import junit.framework.AssertionFailedError;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import org.apache.maven.archiva.indexer.hashcodes.HashcodesRecord;
 import org.apache.maven.archiva.indexer.hashcodes.HashcodesRecordLoader;
 import org.apache.maven.archiva.model.ArchivaArtifact;
 
 import java.io.File;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.Map;
+import java.util.Map.Entry;
+
+import junit.framework.AssertionFailedError;
 
+/**
+ * HashcodesIndexPopulator 
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Joakim Erdfelt</a>
+ * @version $Id$
+ */
 public class HashcodesIndexPopulator
     implements IndexPopulator
 {
 
-    public Map getObjectMap()
+    public Map<String, ArchivaArtifact> getObjectMap()
     {
-        Map dumps = new HashMap();
+        Map<String, ArchivaArtifact> dumps = new HashMap<String, 
ArchivaArtifact>();
 
         // archiva-common-1.0.jar.txt
         dumps.put( "archiva-common",
@@ -52,15 +78,13 @@
         return dumps;
     }
 
-    public Map populate( File basedir )
+    public Map<String, HashcodesRecord> populate( File basedir )
     {
-        Map records = new HashMap();
+        Map<String, HashcodesRecord> records = new HashMap<String, 
HashcodesRecord>();
 
-        Map artifactDumps = getObjectMap();
-        for ( Iterator iter = artifactDumps.entrySet().iterator(); 
iter.hasNext(); )
+        for ( Entry<String, ArchivaArtifact> entry : getObjectMap().entrySet() 
)
         {
-            Map.Entry entry = (Map.Entry) iter.next();
-            ArchivaArtifact artifact = (ArchivaArtifact) entry.getValue();
+            ArchivaArtifact artifact = entry.getValue();
             File dumpFile = getDumpFile( basedir, artifact );
             HashcodesRecord record = HashcodesRecordLoader.loadRecord( 
dumpFile, artifact );
             record.setRepositoryId( "test-repo" );

Modified: 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/IndexPopulator.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/IndexPopulator.java?rev=591500&r1=591499&r2=591500&view=diff
==============================================================================
--- 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/IndexPopulator.java
 (original)
+++ 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/search/IndexPopulator.java
 Fri Nov  2 15:35:07 2007
@@ -19,6 +19,9 @@
  * under the License.
  */
 
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
 import java.io.File;
 import java.util.Map;
 
@@ -30,7 +33,7 @@
  */
 public interface IndexPopulator
 {
-    public Map getObjectMap();
+    public Map<String, ArchivaArtifact> getObjectMap();
 
-    public Map populate( File basedir );
+    public Map<String, ? extends LuceneRepositoryContentRecord> populate( File 
basedir );
 }

Modified: 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.xml
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.xml?rev=591500&r1=591499&r2=591500&view=diff
==============================================================================
--- 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.xml
 (original)
+++ 
maven/archiva/branches/archiva-backend-security/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/search/DefaultCrossRepositorySearchTest.xml
 Fri Nov  2 15:35:07 2007
@@ -25,29 +25,9 @@
       <description>DefaultCrossRepositorySearch</description>
       <requirements>
         <requirement>
-          <role>org.apache.commons.collections.Transformer</role>
-          <role-hint>bytecode</role-hint>
-          <field-name>bytecodeIndexTransformer</field-name>
-        </requirement>
-        <requirement>
-          <role>org.apache.commons.collections.Transformer</role>
-          <role-hint>filecontent</role-hint>
-          <field-name>filecontentIndexTransformer</field-name>
-        </requirement>
-        <requirement>
-          <role>org.apache.commons.collections.Transformer</role>
-          <role-hint>hashcodes</role-hint>
-          <field-name>hashcodesIndexTransformer</field-name>
-        </requirement>
-        <requirement>
-          <role>org.apache.commons.collections.Transformer</role>
-          <role-hint>searchable</role-hint>
-          <field-name>searchableTransformer</field-name>
-        </requirement>
-        <requirement>
-          <role>org.apache.commons.collections.Predicate</role>
-          <role-hint>index-exists</role-hint>
-          <field-name>indexExistsPredicate</field-name>
+          
<role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+          <role-hint>lucene</role-hint>
+          <field-name>indexFactory</field-name>
         </requirement>
         <requirement>
           
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>

Modified: 
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java?rev=591500&r1=591499&r2=591500&view=diff
==============================================================================
--- 
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
 (original)
+++ 
maven/archiva/branches/archiva-backend-security/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
 Fri Nov  2 15:35:07 2007
@@ -28,9 +28,15 @@
 import org.apache.maven.archiva.indexer.search.CrossRepositorySearch;
 import org.apache.maven.archiva.indexer.search.SearchResultLimits;
 import org.apache.maven.archiva.indexer.search.SearchResults;
+import org.apache.maven.archiva.security.AccessDeniedException;
+import org.apache.maven.archiva.security.ArchivaSecurityException;
+import org.apache.maven.archiva.security.ArchivaUser;
+import org.apache.maven.archiva.security.PrincipalNotFoundException;
+import org.apache.maven.archiva.security.UserRepositories;
 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 import java.net.MalformedURLException;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -60,6 +66,16 @@
      * @plexus.requirement role-hint="default"
      */
     private CrossRepositorySearch crossRepoSearch;
+    
+    /**
+     * @plexus.requirement
+     */
+    private UserRepositories userRepositories;
+    
+    /**
+     * @plexus.requirement role-hint="xwork"
+     */
+    private ArchivaUser archivaUser;
 
     private static final String RESULTS = "results";
 
@@ -80,7 +96,7 @@
 
         SearchResultLimits limits = new SearchResultLimits( 0 );
 
-        results = crossRepoSearch.searchForTerm( q, limits );
+        results = crossRepoSearch.searchForTerm( getPrincipal(), 
getObservableRepos(), q, limits );
 
         if ( results.isEmpty() )
         {
@@ -125,15 +141,41 @@
             // 1 hit? return it's information directly!            
             return ARTIFACT;
         }
-        else
-        {
-            return RESULTS;
-        }
+        
+        return RESULTS;
     }
 
+    @Override
     public String doInput()
     {
         return INPUT;
+    }
+    
+    private String getPrincipal()
+    {
+        return archivaUser.getActivePrincipal();
+    }
+    
+    private List<String> getObservableRepos()
+    {
+        try
+        {
+            return userRepositories.getObservableRepositoryIds( getPrincipal() 
);
+        }
+        catch ( PrincipalNotFoundException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+        }
+        catch ( AccessDeniedException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+            // TODO: pass this onto the screen.
+        }
+        catch ( ArchivaSecurityException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+        }
+        return Collections.emptyList();
     }
 
     public String getQ()


Reply via email to