aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-modules/archiva-base/archiva-indexer
diff options
context:
space:
mode:
authorOlivier Lamy <olamy@apache.org>2011-09-15 15:45:49 +0000
committerOlivier Lamy <olamy@apache.org>2011-09-15 15:45:49 +0000
commit4579f684aa761897191c06736b7fd4f12b2e1369 (patch)
treef9ec58d4aa5b4177a78ec6904e302decaeb7a4cb /archiva-modules/archiva-base/archiva-indexer
parent4298c23f6d50cde1b1737454c218c597f2415042 (diff)
downloadarchiva-4579f684aa761897191c06736b7fd4f12b2e1369.tar.gz
archiva-4579f684aa761897191c06736b7fd4f12b2e1369.zip
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
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1171151 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-modules/archiva-base/archiva-indexer')
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFiler.java32
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java44
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFiler.java42
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java43
4 files changed, 156 insertions, 5 deletions
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFiler.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFiler.java
new file mode 100644
index 000000000..432580055
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/ArtifactInfoFiler.java
@@ -0,0 +1,32 @@
+package org.apache.archiva.indexer.search;
+/*
+ * 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.index.ArtifactInfo;
+
+import java.util.Map;
+
+/**
+ * @author Olivier Lamy
+ * @since 1.4
+ */
+public interface ArtifactInfoFiler
+{
+ boolean addArtifactInResult( ArtifactInfo artifact, Map<String, SearchResultHit> currentResult );
+}
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
index 5ffba7f88..cdc906c22 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
+++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
@@ -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();
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFiler.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFiler.java
new file mode 100644
index 000000000..078970299
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NoClassifierArtifactInfoFiler.java
@@ -0,0 +1,42 @@
+package org.apache.archiva.indexer.search;
+/*
+ * 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.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 NoClassifierArtifactInfoFiler
+ implements ArtifactInfoFiler
+{
+ public static final NoClassifierArtifactInfoFiler INSTANCE = new NoClassifierArtifactInfoFiler();
+
+ public static final List<? extends ArtifactInfoFiler> LIST = Arrays.asList( INSTANCE );
+
+ public boolean addArtifactInResult( ArtifactInfo artifact, Map<String, SearchResultHit> currentResult )
+ {
+ return StringUtils.isBlank( artifact.classifier );
+ }
+}
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
index fb6f4ae0d..2f7da7585 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
@@ -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
{