Author: olamy
Date: Thu Sep 15 15:45:49 2011
New Revision: 1171151
URL: http://svn.apache.org/viewvc?rev=1171151&view=rev
Log:
fix quick search which returns artifacts with classifier too : hackhish
solution currently as I can't find a way to say in a Lucene query this field
must empty or null
Added:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFiler.java
- copied, changed from r1171103,
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/ArtifactFiler.java
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFiler.java
- copied, changed from r1171103,
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/NoClassifierArtifactFiler.java
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/ArtifactFiler.java
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/NoClassifierArtifactFiler.java
Copied:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFiler.java
(from r1171103,
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/ArtifactFiler.java)
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFiler.java?p2=archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFiler.java&p1=archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/ArtifactFiler.java&r1=1171103&r2=1171151&rev=1171151&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/ArtifactFiler.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFiler.java
Thu Sep 15 15:45:49 2011
@@ -1,4 +1,4 @@
-package org.apache.archiva.rest.services.searchfilter;
+package org.apache.archiva.indexer.search;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -18,15 +18,15 @@ package org.apache.archiva.rest.services
* under the License.
*/
-import org.apache.archiva.rest.api.model.Artifact;
+import org.apache.maven.index.ArtifactInfo;
-import java.util.List;
+import java.util.Map;
/**
* @author Olivier Lamy
* @since 1.4
*/
-public interface ArtifactFiler
+public interface ArtifactInfoFiler
{
- boolean addArtifactInResult( Artifact artifact, List<Artifact>
currentResult );
+ boolean addArtifactInResult( ArtifactInfo artifact, Map<String,
SearchResultHit> currentResult );
}
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java?rev=1171151&r1=1171150&r2=1171151&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
Thu Sep 15 15:45:49 2011
@@ -47,6 +47,7 @@ import javax.inject.Inject;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -110,7 +111,10 @@ public class NexusRepositorySearch
q.add( iQuery, Occur.MUST );
}
- return search( limits, q, indexingContextIds );
+ // we retun only artifacts without classifier in quick search, olamy
cannot find a way to say with this field empty
+ // FIXME cannot find a way currently to setup this in constructQuery
!!!
+ return search( limits, q, indexingContextIds,
NoClassifierArtifactInfoFiler.LIST );
+
}
/**
@@ -199,10 +203,11 @@ public class NexusRepositorySearch
throw new RepositorySearchException( "No search fields set." );
}
- return search( limits, q, indexingContextIds );
+ return search( limits, q, indexingContextIds,
Collections.<ArtifactInfoFiler>emptyList() );
}
- private SearchResults search( SearchResultLimits limits, BooleanQuery q,
List<String> indexingContextIds )
+ private SearchResults search( SearchResultLimits limits, BooleanQuery q,
List<String> indexingContextIds,
+ List<? extends ArtifactInfoFiler> filters )
throws RepositorySearchException
{
@@ -219,7 +224,7 @@ public class NexusRepositorySearch
return results;
}
- return convertToSearchResults( response, limits );
+ return convertToSearchResults( response, limits, filters );
}
catch ( IOException e )
{
@@ -275,6 +280,10 @@ public class NexusRepositorySearch
q.add( indexer.constructQuery( MAVEN.VERSION, new
StringSearchExpression( term ) ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.PACKAGING, new
StringSearchExpression( term ) ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.CLASSNAMES, new
StringSearchExpression( term ) ), Occur.SHOULD );
+
+ //Query query =
+ // new WildcardQuery( new Term( MAVEN.CLASSNAMES.getFieldName(),
"*" ) );
+ //q.add( query, Occur.MUST_NOT );
// olamy IMHO we could set this option as at least one must match
//q.setMinimumNumberShouldMatch( 1 );
}
@@ -363,7 +372,8 @@ public class NexusRepositorySearch
}
- private SearchResults convertToSearchResults( FlatSearchResponse response,
SearchResultLimits limits )
+ private SearchResults convertToSearchResults( FlatSearchResponse response,
SearchResultLimits limits,
+ List<? extends
ArtifactInfoFiler> artifactInfoFilers )
{
SearchResults results = new SearchResults();
Set<ArtifactInfo> artifactInfos = response.getResults();
@@ -374,6 +384,11 @@ public class NexusRepositorySearch
artifactInfo.packaging );
Map<String, SearchResultHit> hitsMap = results.getHitsMap();
+ if ( !applyArtifactInfoFilters( artifactInfo, artifactInfoFilers,
hitsMap ) )
+ {
+ continue;
+ }
+
SearchResultHit hit = hitsMap.get( id );
if ( hit != null )
{
@@ -428,6 +443,25 @@ public class NexusRepositorySearch
}
}
+ private boolean applyArtifactInfoFilters( ArtifactInfo artifactInfo,
+ List<? extends
ArtifactInfoFiler> artifactInfoFilers,
+ Map<String, SearchResultHit>
currentResult )
+ {
+ if ( artifactInfoFilers == null || artifactInfoFilers.isEmpty() )
+ {
+ return true;
+ }
+
+ for ( ArtifactInfoFiler filter : artifactInfoFilers )
+ {
+ if ( !filter.addArtifactInResult( artifactInfo, currentResult ) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
private SearchResults paginate( SearchResults results )
{
SearchResultLimits limits = results.getLimits();
Copied:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFiler.java
(from r1171103,
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/NoClassifierArtifactFiler.java)
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFiler.java?p2=archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFiler.java&p1=archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/NoClassifierArtifactFiler.java&r1=1171103&r2=1171151&rev=1171151&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/searchfilter/NoClassifierArtifactFiler.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFiler.java
Thu Sep 15 15:45:49 2011
@@ -1,4 +1,4 @@
-package org.apache.archiva.rest.services.searchfilter;
+package org.apache.archiva.indexer.search;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
@@ -18,25 +18,25 @@ package org.apache.archiva.rest.services
* under the License.
*/
-import com.sun.org.apache.bcel.internal.generic.INSTANCEOF;
-import org.apache.archiva.rest.api.model.Artifact;
import org.apache.commons.lang.StringUtils;
+import org.apache.maven.index.ArtifactInfo;
import java.util.Arrays;
import java.util.List;
+import java.util.Map;
/**
* @author Olivier Lamy
*/
-public class NoClassifierArtifactFiler
- implements ArtifactFiler
+public class NoClassifierArtifactInfoFiler
+ implements ArtifactInfoFiler
{
- public static final NoClassifierArtifactFiler INSTANCE = new
NoClassifierArtifactFiler();
+ public static final NoClassifierArtifactInfoFiler INSTANCE = new
NoClassifierArtifactInfoFiler();
- public static final List<? extends ArtifactFiler> LIST = Arrays.asList(
INSTANCE );
+ public static final List<? extends ArtifactInfoFiler> LIST =
Arrays.asList( INSTANCE );
- public boolean addArtifactInResult( Artifact artifact, List<Artifact>
currentResult )
+ public boolean addArtifactInResult( ArtifactInfo artifact, Map<String,
SearchResultHit> currentResult )
{
- return StringUtils.isBlank( artifact.getClassifier() );
+ return StringUtils.isBlank( artifact.classifier );
}
}
Modified:
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java?rev=1171151&r1=1171150&r2=1171151&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
(original)
+++
archiva/trunk/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
Thu Sep 15 15:45:49 2011
@@ -132,6 +132,49 @@ public class NexusRepositorySearchTest
}
@Test
+ public void testQuickSearchNotWithClassifier()
+ throws Exception
+ {
+ createSimpleIndex( true );
+
+ List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
+
+ // search artifactId
+ archivaConfigControl.expectAndReturn(
archivaConfig.getConfiguration(), config );
+
+ archivaConfigControl.replay();
+
+ SearchResults results = search.search( "user", selectedRepos,
"archiva-search", null, null );
+
+ archivaConfigControl.verify();
+
+ assertNotNull( results );
+
+ SearchResultHit hit =
+ results.getSearchResultHit( SearchUtil.getHitId(
"org.apache.archiva", "archiva-search", null, "jar" ) );
+ assertNotNull( "hit null in result " + results.getHits(), hit );
+ assertEquals( "org.apache.archiva", hit.getGroupId() );
+ assertEquals( "archiva-search", hit.getArtifactId() );
+ assertEquals( "1.0", hit.getVersions().get( 0 ) );
+
+ archivaConfigControl.reset();
+
+ // search groupId
+ archivaConfigControl.expectAndReturn(
archivaConfig.getConfiguration(), config );
+
+ archivaConfigControl.replay();
+
+ results = search.search( "user", selectedRepos, "archiva-search",
null, null );
+
+ archivaConfigControl.verify();
+
+ assertNotNull( results );
+ assertEquals( "total hints not 3 hits " + results.getHits(), 3,
results.getTotalHits() );
+
+ //TODO: search for class & package names
+ }
+
+ @Test
public void testQuickSearchMultipleArtifactsSameVersion()
throws Exception
{
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java?rev=1171151&r1=1171150&r2=1171151&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
Thu Sep 15 15:45:49 2011
@@ -30,8 +30,6 @@ import org.apache.archiva.rest.api.model
import org.apache.archiva.rest.api.model.SearchRequest;
import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
import org.apache.archiva.rest.api.services.SearchService;
-import org.apache.archiva.rest.services.searchfilter.ArtifactFiler;
-import org.apache.archiva.rest.services.searchfilter.NoClassifierArtifactFiler;
import org.apache.archiva.security.AccessDeniedException;
import org.apache.archiva.security.ArchivaSecurityException;
import org.apache.archiva.security.PrincipalNotFoundException;
@@ -80,7 +78,7 @@ public class DefaultSearchService
SearchResults searchResults =
repositorySearch.search( getPrincipal(), getObservableRepos(),
queryString, limits,
Collections.<String>emptyList() );
- return getArtifacts( searchResults, new ArrayList<ArtifactFiler>(
NoClassifierArtifactFiler.LIST ) );
+ return getArtifacts( searchResults);
}
catch ( RepositorySearchException e )
@@ -105,7 +103,7 @@ public class DefaultSearchService
try
{
SearchResults searchResults = repositorySearch.search(
getPrincipal(), searchField, null );
- return getArtifacts( searchResults,
Collections.<ArtifactFiler>emptyList() );
+ return getArtifacts( searchResults );
}
catch ( RepositorySearchException e )
{
@@ -127,7 +125,7 @@ public class DefaultSearchService
try
{
SearchResults searchResults = repositorySearch.search(
getPrincipal(), searchField, limits );
- return getArtifacts( searchResults,
Collections.<ArtifactFiler>emptyList() );
+ return getArtifacts( searchResults );
}
catch ( RepositorySearchException e )
{
@@ -182,7 +180,7 @@ public class DefaultSearchService
: redbackRequestInformation.getUser().getUsername() );
}
- protected List<Artifact> getArtifacts( SearchResults searchResults,
List<ArtifactFiler> artifactFilers )
+ protected List<Artifact> getArtifacts( SearchResults searchResults )
{
if ( searchResults == null || searchResults.isEmpty() )
{
@@ -226,34 +224,13 @@ public class DefaultSearchService
if ( StringUtils.isNotBlank( version ) )
{
versionned.setVersion( version );
- if ( applyFiltering( versionned, artifactFilers,
artifacts ) )
- {
+
artifacts.add( versionned );
- }
+
}
}
}
}
return artifacts;
}
-
- protected boolean applyFiltering( Artifact artifact, List<ArtifactFiler>
artifactFilers, List<Artifact> artifacts )
- {
- if ( artifact == null )
- {
- return false;
- }
- if ( artifactFilers == null || artifactFilers.isEmpty() )
- {
- return true;
- }
- for ( ArtifactFiler filter : artifactFilers )
- {
- if ( !filter.addArtifactInResult( artifact, artifacts ) )
- {
- return false;
- }
- }
- return true;
- }
}