Java tutorial
package org.apache.maven.index; /* * 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.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.IndexSearcher; import org.apache.maven.index.context.IndexCreator; import org.apache.maven.index.context.IndexingContext; import org.apache.maven.index.expr.StringSearchExpression; import org.apache.maven.index.packer.IndexPacker; import org.apache.maven.index.packer.IndexPackingRequest; import org.codehaus.plexus.util.FileUtils; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * @author Olivier Lamy */ public class SearchWithAnEmptyIndexTest extends AbstractTestSupport { static final String INDEX_ID1 = "osgi-test1"; static final String INDEX_ID2 = "empty-repo"; protected List<IndexCreator> indexCreators; private NexusIndexer nexusIndexer; private IndexPacker indexPacker; @Override public void setUp() throws Exception { super.setUp(); indexCreators = this.getContainer().lookupList(IndexCreator.class); nexusIndexer = this.lookup(NexusIndexer.class); indexPacker = this.lookup(IndexPacker.class); if (!nexusIndexer.getIndexingContexts().isEmpty()) { for (IndexingContext context : nexusIndexer.getIndexingContexts().values()) { nexusIndexer.removeIndexingContext(context, true); } } } public void testWithTwoContextWithOneEmptyFirstInContextsListSearchFlat() throws Exception { String repoPath = "target/test/empty-repo-for-searchtest"; File emptyRepo = new File(getBasedir(), repoPath); if (emptyRepo.exists()) { FileUtils.deleteDirectory(emptyRepo); } emptyRepo.mkdirs(); //createIndex( "/src/test/repo", repoPath + "/.index", INDEX_ID2 ); createIndex(repoPath, repoPath, INDEX_ID2); createIndex("src/test/repo-with-osgi", "target/test/repo-with-osgi/", INDEX_ID1); try { BooleanQuery q = new BooleanQuery(); q.add(nexusIndexer.constructQuery(OSGI.SYMBOLIC_NAME, new StringSearchExpression("org.apache.karaf.features.command")), BooleanClause.Occur.MUST); FlatSearchRequest request = new FlatSearchRequest(q); assertEquals(2, nexusIndexer.getIndexingContexts().values().size()); request.setContexts(Arrays.asList(nexusIndexer.getIndexingContexts().get(INDEX_ID2), nexusIndexer.getIndexingContexts().get(INDEX_ID1))); FlatSearchResponse response = nexusIndexer.searchFlat(request); assertEquals(1, response.getResults().size()); q = new BooleanQuery(); q.add(nexusIndexer.constructQuery(OSGI.SYMBOLIC_NAME, new StringSearchExpression("org.apache.karaf.features.core")), BooleanClause.Occur.MUST); request = new FlatSearchRequest(q); request.setContexts(new ArrayList(nexusIndexer.getIndexingContexts().values())); response = nexusIndexer.searchFlat(request); assertEquals(3, response.getResults().size()); String term = "org.apache.karaf.features"; q = new BooleanQuery(); q.add(nexusIndexer.constructQuery(MAVEN.GROUP_ID, new StringSearchExpression(term)), BooleanClause.Occur.SHOULD); q.add(nexusIndexer.constructQuery(MAVEN.ARTIFACT_ID, new StringSearchExpression(term)), BooleanClause.Occur.SHOULD); q.add(nexusIndexer.constructQuery(MAVEN.VERSION, new StringSearchExpression(term)), BooleanClause.Occur.SHOULD); q.add(nexusIndexer.constructQuery(MAVEN.PACKAGING, new StringSearchExpression(term)), BooleanClause.Occur.SHOULD); q.add(nexusIndexer.constructQuery(MAVEN.CLASSNAMES, new StringSearchExpression(term)), BooleanClause.Occur.SHOULD); request = new FlatSearchRequest(q); request.setContexts(new ArrayList(nexusIndexer.getIndexingContexts().values())); response = nexusIndexer.searchFlat(request); System.out.println(" result size with term usage " + response.getResults().size()); assertEquals(4, response.getResults().size()); } finally { closeAllIndexs(); } } /** * both repos contains commons-cli so ensure we don't return duplicates */ public void testSearchNoDuplicateArtifactInfo() throws Exception { String repoPathIndex = "target/test/repo-for-searchdupe"; File emptyRepo = new File(getBasedir(), repoPathIndex); if (emptyRepo.exists()) { FileUtils.deleteDirectory(emptyRepo); } emptyRepo.mkdirs(); //createIndex( "/src/test/repo", repoPath + "/.index", INDEX_ID2 ); createIndex("/src/test/repo", repoPathIndex, INDEX_ID2); createIndex("src/test/repo-with-osgi", "target/test/repo-with-osgi/", INDEX_ID1); try { BooleanQuery q = new BooleanQuery(); q.add(nexusIndexer.constructQuery(MAVEN.GROUP_ID, new StringSearchExpression("commons-cli")), BooleanClause.Occur.MUST); q.add(nexusIndexer.constructQuery(MAVEN.PACKAGING, new StringSearchExpression("jar")), BooleanClause.Occur.MUST); q.add(nexusIndexer.constructQuery(MAVEN.CLASSIFIER, new StringSearchExpression("sources")), BooleanClause.Occur.MUST); FlatSearchRequest request = new FlatSearchRequest(q); assertEquals(2, nexusIndexer.getIndexingContexts().values().size()); request.setContexts(Arrays.asList(nexusIndexer.getIndexingContexts().get(INDEX_ID2), nexusIndexer.getIndexingContexts().get(INDEX_ID1))); FlatSearchResponse response = nexusIndexer.searchFlat(request); assertEquals(1, response.getResults().size()); } finally { closeAllIndexs(); } } private void closeAllIndexs() throws Exception { for (IndexingContext context : nexusIndexer.getIndexingContexts().values()) { context.close(true); } } private void createIndex(String filePath, String repoIndex, String contextId) throws Exception { File repo = new File(getBasedir(), filePath); File repoIndexDir = new File(getBasedir(), repoIndex + "/.index"); if (repoIndexDir.exists()) { FileUtils.deleteDirectory(repoIndexDir); } repoIndexDir.mkdirs(); System.out.println( "creating Index with id " + contextId + " path : " + filePath + " , indexPath " + repoIndex); IndexingContext indexingContext = nexusIndexer.addIndexingContext(contextId, contextId, repo, repoIndexDir, "http://www.apache.org", "http://www.apache.org/.index", indexCreators); indexingContext.setSearchable(true); nexusIndexer.scan(indexingContext, false); indexingContext.optimize(); File managedRepository = new File(repoIndex); final IndexSearcher indexSearcher = indexingContext.acquireIndexSearcher(); try { final File indexLocation = new File(managedRepository, ".index"); IndexPackingRequest request = new IndexPackingRequest(indexingContext, indexSearcher.getIndexReader(), indexLocation); indexPacker.packIndex(request); } finally { indexingContext.releaseIndexSearcher(indexSearcher); } } }