Search in sources :

Example 6 with Searcher

use of org.eclipse.che.api.vfs.search.Searcher in project che by eclipse.

the class AbstractLuceneSearcherProvider method close.

@Override
public void close() throws ServerException {
    Searcher searcher = searcherReference.get();
    if (searcher != null) {
        searcher.close();
    }
    searcherReference.set(null);
}
Also used : Searcher(org.eclipse.che.api.vfs.search.Searcher)

Example 7 with Searcher

use of org.eclipse.che.api.vfs.search.Searcher in project che by eclipse.

the class AbstractLuceneSearcherProvider method getSearcher.

@Override
public Searcher getSearcher(VirtualFileSystem virtualFileSystem, boolean create) throws ServerException {
    Searcher cachedSearcher = searcherReference.get();
    if (cachedSearcher == null && create) {
        LuceneSearcher searcher = createLuceneSearcher(() -> searcherReference.set(null));
        if (searcherReference.compareAndSet(null, searcher)) {
            searcher.initAsynchronously(executor, virtualFileSystem);
        }
        cachedSearcher = searcherReference.get();
    }
    return cachedSearcher;
}
Also used : Searcher(org.eclipse.che.api.vfs.search.Searcher)

Example 8 with Searcher

use of org.eclipse.che.api.vfs.search.Searcher in project che by eclipse.

the class ProjectService method search.

@GET
@Path("/search/{path:.*}")
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(value = "Search for resources", notes = "Search for resources applying a number of search filters as query parameters", response = ItemReference.class, responseContainer = "List")
@ApiResponses({ @ApiResponse(code = 200, message = "OK"), @ApiResponse(code = 403, message = "User not authorized to call this operation"), @ApiResponse(code = 404, message = "Not found"), @ApiResponse(code = 409, message = "Conflict error"), @ApiResponse(code = 500, message = "Internal Server Error") })
public List<ItemReference> search(@ApiParam(value = "Path to resource, i.e. where to search?", required = true) @PathParam("path") String path, @ApiParam(value = "Resource name") @QueryParam("name") String name, @ApiParam(value = "Search keywords") @QueryParam("text") String text, @ApiParam(value = "Maximum items to display. If this parameter is dropped, there are no limits") @QueryParam("maxItems") @DefaultValue("-1") int maxItems, @ApiParam(value = "Skip count") @QueryParam("skipCount") int skipCount) throws NotFoundException, ForbiddenException, ConflictException, ServerException {
    final Searcher searcher;
    try {
        searcher = projectManager.getSearcher();
    } catch (NotFoundException e) {
        LOG.warn(e.getLocalizedMessage());
        return Collections.emptyList();
    }
    if (skipCount < 0) {
        throw new ConflictException(String.format("Invalid 'skipCount' parameter: %d.", skipCount));
    }
    final QueryExpression expr = new QueryExpression().setPath(path.startsWith("/") ? path : ('/' + path)).setName(name).setText(text).setMaxItems(maxItems).setSkipCount(skipCount);
    final SearchResult result = searcher.search(expr);
    final List<SearchResultEntry> searchResultEntries = result.getResults();
    final List<ItemReference> items = new ArrayList<>(searchResultEntries.size());
    final FolderEntry root = projectManager.getProjectsRoot();
    for (SearchResultEntry searchResultEntry : searchResultEntries) {
        final VirtualFileEntry child = root.getChild(searchResultEntry.getFilePath());
        if (child != null && child.isFile()) {
            items.add(injectFileLinks(asDto((FileEntry) child)));
        }
    }
    return items;
}
Also used : ItemReference(org.eclipse.che.api.project.shared.dto.ItemReference) ConflictException(org.eclipse.che.api.core.ConflictException) Searcher(org.eclipse.che.api.vfs.search.Searcher) ArrayList(java.util.ArrayList) NotFoundException(org.eclipse.che.api.core.NotFoundException) SearchResult(org.eclipse.che.api.vfs.search.SearchResult) QueryExpression(org.eclipse.che.api.vfs.search.QueryExpression) SearchResultEntry(org.eclipse.che.api.vfs.search.SearchResultEntry) Path(javax.ws.rs.Path) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) ApiOperation(io.swagger.annotations.ApiOperation) ApiResponses(io.swagger.annotations.ApiResponses)

Example 9 with Searcher

use of org.eclipse.che.api.vfs.search.Searcher in project che by eclipse.

the class FSLuceneSearcherProviderTest method resetsSearcherInProviderAfterClosingSearcher.

@Test
public void resetsSearcherInProviderAfterClosingSearcher() throws Exception {
    VirtualFileSystem virtualFileSystem = mockVirtualFileSystem();
    Searcher searcher = fsLuceneSearcherProvider.getSearcher(virtualFileSystem, true);
    assertNotNull(searcher);
    searcher.close();
    assertNull(fsLuceneSearcherProvider.getSearcher(virtualFileSystem, false));
}
Also used : VirtualFileSystem(org.eclipse.che.api.vfs.VirtualFileSystem) Searcher(org.eclipse.che.api.vfs.search.Searcher) Test(org.junit.Test)

Example 10 with Searcher

use of org.eclipse.che.api.vfs.search.Searcher in project che by eclipse.

the class FSLuceneSearcherProviderTest method closesSearcherWhenProviderIsClosed.

@Test
public void closesSearcherWhenProviderIsClosed() throws Exception {
    Searcher searcher = mock(Searcher.class);
    fsLuceneSearcherProvider.searcherReference.set(searcher);
    fsLuceneSearcherProvider.close();
    verify(searcher).close();
}
Also used : Searcher(org.eclipse.che.api.vfs.search.Searcher) Test(org.junit.Test)

Aggregations

Searcher (org.eclipse.che.api.vfs.search.Searcher)18 SearcherProvider (org.eclipse.che.api.vfs.search.SearcherProvider)9 VirtualFileSystem (org.eclipse.che.api.vfs.VirtualFileSystem)7 Before (org.junit.Before)6 Test (org.junit.Test)6 File (java.io.File)4 Path (java.nio.file.Path)3 ServerException (org.eclipse.che.api.core.ServerException)3 VirtualFile (org.eclipse.che.api.vfs.VirtualFile)3 ArchiverFactory (org.eclipse.che.api.vfs.ArchiverFactory)2 LocalVirtualFileSystem (org.eclipse.che.api.vfs.impl.file.LocalVirtualFileSystem)2 ApiOperation (io.swagger.annotations.ApiOperation)1 ApiResponses (io.swagger.annotations.ApiResponses)1 ArrayList (java.util.ArrayList)1 GET (javax.ws.rs.GET)1 Path (javax.ws.rs.Path)1 Produces (javax.ws.rs.Produces)1 ConflictException (org.eclipse.che.api.core.ConflictException)1 NotFoundException (org.eclipse.che.api.core.NotFoundException)1 ItemReference (org.eclipse.che.api.project.shared.dto.ItemReference)1