From a6bcb89e099c442b26363a123b0b1bd901abdeab Mon Sep 17 00:00:00 2001 From: Vitalii Parfonov Date: Wed, 20 Dec 2017 17:47:17 +0200 Subject: [PATCH] Add sorting Signed-off-by: Vitalii Parfonov --- .../ide/filetypes/FileTypeRegistryImpl.java | 11 +- .../navigation/NavigateToFilePresenter.java | 37 +++--- .../NavigateToFilePresenterTest.java | 4 +- .../org/eclipse/che/ide/util/NameUtils.java | 9 ++ .../eclipse/che/ide/util/NameUtilsTest.java | 7 ++ .../che-plugin-java-plain-server/pom.xml | 4 + .../projecttype/PlainJavaProjectType.java | 9 +- .../maven/server/inject/MavenModule.java | 12 ++ .../MavenTargetExcludeMatcher.java | 48 +++++++ .../excludes/MediaTypesExcludeMatcher.java | 8 ++ .../search/server/impl/LuceneSearcher.java | 23 ++-- .../che/api/search/LuceneSearcherTest.java | 117 ------------------ 12 files changed, 128 insertions(+), 161 deletions(-) create mode 100644 plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/projecttype/MavenTargetExcludeMatcher.java delete mode 100644 wsagent/che-core-api-project/src/test/java/org/eclipse/che/api/search/LuceneSearcherTest.java diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/filetypes/FileTypeRegistryImpl.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/filetypes/FileTypeRegistryImpl.java index ef62d88750f8..da40c2d4125f 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/filetypes/FileTypeRegistryImpl.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/filetypes/FileTypeRegistryImpl.java @@ -10,6 +10,8 @@ */ package org.eclipse.che.ide.filetypes; +import static org.eclipse.che.ide.util.NameUtils.getFileExtension; + import com.google.common.base.Strings; import com.google.gwt.regexp.shared.RegExp; import com.google.inject.Inject; @@ -84,13 +86,4 @@ public FileType getFileTypeByNamePattern(String name) { return unknownFileType; } - - private String getFileExtension(String name) { - final int lastDotPosition = name.lastIndexOf('.'); - // name has no extension - if (lastDotPosition < 0) { - return ""; - } - return name.substring(lastDotPosition + 1); - } } diff --git a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/navigation/NavigateToFilePresenter.java b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/navigation/NavigateToFilePresenter.java index 61ce2984c77a..ac218949308a 100644 --- a/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/navigation/NavigateToFilePresenter.java +++ b/ide/che-core-ide-app/src/main/java/org/eclipse/che/ide/navigation/NavigateToFilePresenter.java @@ -11,9 +11,12 @@ package org.eclipse.che.ide.navigation; import static java.util.Collections.emptyList; +import static java.util.Collections.sort; import static org.eclipse.che.ide.api.jsonrpc.Constants.WS_AGENT_JSON_RPC_ENDPOINT_ID; +import static org.eclipse.che.ide.util.NameUtils.getFileExtension; import com.google.common.base.Optional; +import com.google.gwt.http.client.URL; import com.google.inject.Inject; import com.google.inject.Singleton; import org.eclipse.che.api.core.jsonrpc.commons.RequestTransmitter; @@ -23,16 +26,11 @@ import org.eclipse.che.api.promises.client.OperationException; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.api.editor.EditorAgent; -import org.eclipse.che.ide.api.filetypes.FileType; -import org.eclipse.che.ide.api.filetypes.FileTypeRegistry; import org.eclipse.che.ide.api.resources.File; import org.eclipse.che.ide.dto.DtoFactory; import org.eclipse.che.ide.resource.Path; import org.eclipse.che.ide.util.loging.Log; -import java.util.List; -import java.util.function.Consumer; - /** * Presenter for file navigation (find file by name and open it). * @@ -45,11 +43,9 @@ public class NavigateToFilePresenter implements NavigateToFileView.ActionDelegat private final EditorAgent editorAgent; private final RequestTransmitter requestTransmitter; - private final FileTypeRegistry fileTypeRegistry; private final DtoFactory dtoFactory; private final NavigateToFileView view; private final AppContext appContext; - private String pattern; @Inject public NavigateToFilePresenter( @@ -57,24 +53,14 @@ public NavigateToFilePresenter( AppContext appContext, EditorAgent editorAgent, RequestTransmitter requestTransmitter, - FileTypeRegistry fileTypeRegistry, DtoFactory dtoFactory) { this.view = view; this.appContext = appContext; this.editorAgent = editorAgent; this.requestTransmitter = requestTransmitter; - this.fileTypeRegistry = fileTypeRegistry; this.dtoFactory = dtoFactory; this.view.setDelegate(this); - - List registeredFileTypes = fileTypeRegistry.getRegisteredFileTypes(); - registeredFileTypes.forEach(new Consumer() { - @Override - public void accept(FileType fileType) { - pattern = pattern + "|" + fileType.getExtension(); - } - }); } /** Show dialog with view for navigation. */ @@ -111,9 +97,7 @@ public void onFileNameChanged(String fileName) { dtoFactory .createDto(ProjectSearchRequestDto.class) .withPath("") - .withName(".*.(" + pattern + ")"); - - Log.info(getClass(), ">>>> " + requestParams.getName()); + .withName(URL.encodePathSegment(fileName + "*")); requestTransmitter .newRequest() @@ -121,8 +105,19 @@ public void onFileNameChanged(String fileName) { .methodName("project/search") .paramsAsDto(requestParams) .sendAndReceiveResultAsDto(ProjectSearchResponseDto.class, 20_000) - .onSuccess(response -> view.showItems(response.getItemReferences())) + .onSuccess(response -> prepareResults(response)) .onFailure(error -> Log.error(getClass(), error.getMessage())) .onTimeout(() -> Log.error(getClass(), "Project search request failed due timeout")); } + + private void prepareResults(ProjectSearchResponseDto response) { + sort( + response.getItemReferences(), + (o1, o2) -> { + String ext1 = getFileExtension(o1.getItemReference().getName()); + String ext2 = getFileExtension(o2.getItemReference().getName()); + return ext1.compareToIgnoreCase(ext2); + }); + view.showItems(response.getItemReferences()); + } } diff --git a/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/navigation/NavigateToFilePresenterTest.java b/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/navigation/NavigateToFilePresenterTest.java index d5d8ad8005ff..db03de018eb1 100644 --- a/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/navigation/NavigateToFilePresenterTest.java +++ b/ide/che-core-ide-app/src/test/java/org/eclipse/che/ide/navigation/NavigateToFilePresenterTest.java @@ -21,7 +21,6 @@ import org.eclipse.che.api.promises.client.Promise; import org.eclipse.che.ide.api.app.AppContext; import org.eclipse.che.ide.api.editor.EditorAgent; -import org.eclipse.che.ide.api.filetypes.FileTypeRegistry; import org.eclipse.che.ide.api.resources.Container; import org.eclipse.che.ide.api.resources.File; import org.eclipse.che.ide.dto.DtoFactory; @@ -50,7 +49,6 @@ public class NavigateToFilePresenterTest { @Mock private Promise> optFilePromise; @Mock private AppContext appContext; @Mock private EditorAgent editorAgent; - @Mock private FileTypeRegistry fileTypeRegistry; @Mock private DtoFactory dtoFactory; @Mock private RequestTransmitter requestTransmitter; @@ -62,7 +60,7 @@ public void setUp() { when(container.getFile(any(Path.class))).thenReturn(optFilePromise); presenter = - new NavigateToFilePresenter(view, appContext, editorAgent, requestTransmitter, fileTypeRegistry, dtoFactory); + new NavigateToFilePresenter(view, appContext, editorAgent, requestTransmitter, dtoFactory); } @Test diff --git a/ide/commons-gwt/src/main/java/org/eclipse/che/ide/util/NameUtils.java b/ide/commons-gwt/src/main/java/org/eclipse/che/ide/util/NameUtils.java index 8dc345a84f87..f7141b48fde0 100644 --- a/ide/commons-gwt/src/main/java/org/eclipse/che/ide/util/NameUtils.java +++ b/ide/commons-gwt/src/main/java/org/eclipse/che/ide/util/NameUtils.java @@ -54,4 +54,13 @@ public static boolean checkFolderName(String name) { public static boolean checkProjectName(String name) { return PROJECT_NAME.test(name); } + + public static String getFileExtension(String name) { + final int lastDotPosition = name.lastIndexOf('.'); + // name has no extension + if (lastDotPosition < 0) { + return ""; + } + return name.substring(lastDotPosition + 1); + } } diff --git a/ide/commons-gwt/src/test/java/org/eclipse/che/ide/util/NameUtilsTest.java b/ide/commons-gwt/src/test/java/org/eclipse/che/ide/util/NameUtilsTest.java index f7c497b43cf7..2fd535422819 100644 --- a/ide/commons-gwt/src/test/java/org/eclipse/che/ide/util/NameUtilsTest.java +++ b/ide/commons-gwt/src/test/java/org/eclipse/che/ide/util/NameUtilsTest.java @@ -55,6 +55,13 @@ public void invalidFolderNamesShouldNotGetValidated(String invalidFolderName) { NameUtils.checkFileName(invalidFolderName)); } + @Test + public void getFileExtension() { + assertEquals("txt", NameUtils.getFileExtension("123.txt")); + assertEquals("", NameUtils.getFileExtension("123")); + assertEquals("zz", NameUtils.getFileExtension("123.txt.zz")); + } + @DataProvider(name = "ValidFilenames") public Object[][] getValidFilenames() { return toDataProviderData(VALID_FILENAMES); diff --git a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/pom.xml b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/pom.xml index 7d90df449b13..352fb41d8dce 100644 --- a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/pom.xml +++ b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/pom.xml @@ -33,6 +33,10 @@ javax.ws.rs javax.ws.rs-api + + org.apache.tika + tika-core + org.eclipse.birt.runtime org.eclipse.equinox.common diff --git a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/src/main/java/org/eclipse/che/plugin/java/plain/server/projecttype/PlainJavaProjectType.java b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/src/main/java/org/eclipse/che/plugin/java/plain/server/projecttype/PlainJavaProjectType.java index 8104f96822e6..d64dc8743f41 100644 --- a/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/src/main/java/org/eclipse/che/plugin/java/plain/server/projecttype/PlainJavaProjectType.java +++ b/plugins/plugin-java/che-plugin-java-plain/che-plugin-java-plain-server/src/main/java/org/eclipse/che/plugin/java/plain/server/projecttype/PlainJavaProjectType.java @@ -19,7 +19,9 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import org.apache.tika.mime.MediaType; import org.eclipse.che.api.project.server.type.ProjectTypeDef; +import org.eclipse.che.api.search.server.excludes.MediaTypesExcludeMatcher; /** * Project type for plain java projects. @@ -29,7 +31,9 @@ @Singleton public class PlainJavaProjectType extends ProjectTypeDef { @Inject - public PlainJavaProjectType(PlainJavaValueProviderFactory valueProviderFactory) { + public PlainJavaProjectType( + PlainJavaValueProviderFactory valueProviderFactory, + MediaTypesExcludeMatcher mediaTypesExcludeMatcher) { super(JAVAC, JAVAC_PROJECT_NAME, true, false, true); setValueProviderFactory(SOURCE_FOLDER, valueProviderFactory); @@ -38,5 +42,8 @@ public PlainJavaProjectType(PlainJavaValueProviderFactory valueProviderFactory) addVariableDefinition(LIBRARY_FOLDER, "java library folder", false); addParent(JAVA_ID); + + mediaTypesExcludeMatcher.addExcludedMediaType(new MediaType("application", "java-vm")); + mediaTypesExcludeMatcher.addExcludedMediaType(new MediaType("application", "java-archive")); } } diff --git a/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/inject/MavenModule.java b/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/inject/MavenModule.java index eb771c7982e9..1b080ba0fb46 100644 --- a/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/inject/MavenModule.java +++ b/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/inject/MavenModule.java @@ -15,6 +15,8 @@ import com.google.inject.AbstractModule; import com.google.inject.Singleton; import com.google.inject.multibindings.Multibinder; +import com.google.inject.name.Names; +import java.nio.file.PathMatcher; import java.util.Collections; import org.eclipse.che.api.languageserver.launcher.LanguageServerLauncher; import org.eclipse.che.api.languageserver.shared.model.LanguageDescription; @@ -32,6 +34,7 @@ import org.eclipse.che.plugin.maven.server.core.MavenTerminalImpl; import org.eclipse.che.plugin.maven.server.core.project.PomChangeListener; import org.eclipse.che.plugin.maven.server.projecttype.MavenProjectType; +import org.eclipse.che.plugin.maven.server.projecttype.MavenTargetExcludeMatcher; import org.eclipse.che.plugin.maven.server.projecttype.MavenValueProviderFactory; import org.eclipse.che.plugin.maven.server.projecttype.handler.ArchetypeGenerationStrategy; import org.eclipse.che.plugin.maven.server.projecttype.handler.GeneratorStrategy; @@ -65,6 +68,15 @@ protected void configure() { generatorStrategyMultibinder.addBinding().to(SimpleGeneratorStrategy.class); generatorStrategyMultibinder.addBinding().to(ArchetypeGenerationStrategy.class); + Multibinder excludeMatcher = + newSetBinder(binder(), PathMatcher.class, Names.named("vfs.index_filter_matcher")); + excludeMatcher.addBinding().to(MavenTargetExcludeMatcher.class); + + Multibinder fileWatcherExcludes = + newSetBinder( + binder(), PathMatcher.class, Names.named("che.user.workspaces.storage.excludes")); + fileWatcherExcludes.addBinding().to(MavenTargetExcludeMatcher.class); + bind(MavenTerminal.class).to(MavenTerminalImpl.class).in(Singleton.class); bind(MavenProgressNotifier.class).to(MavenServerNotifier.class).in(Singleton.class); diff --git a/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/projecttype/MavenTargetExcludeMatcher.java b/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/projecttype/MavenTargetExcludeMatcher.java new file mode 100644 index 000000000000..dbcfa122ecd3 --- /dev/null +++ b/plugins/plugin-maven/che-plugin-maven-server/src/main/java/org/eclipse/che/plugin/maven/server/projecttype/MavenTargetExcludeMatcher.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2012-2017 Red Hat, Inc. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Red Hat, Inc. - initial API and implementation + */ +package org.eclipse.che.plugin.maven.server.projecttype; + +import java.nio.file.Path; +import java.nio.file.PathMatcher; +import javax.inject.Inject; +import javax.inject.Singleton; +import org.eclipse.che.api.fs.server.PathTransformer; +import org.eclipse.che.api.project.server.ProjectManager; +import org.eclipse.che.api.project.server.impl.RegisteredProject; +import org.eclipse.che.plugin.maven.shared.MavenAttributes; + +@Singleton +public class MavenTargetExcludeMatcher implements PathMatcher { + + private final ProjectManager projectManager; + private final PathTransformer pathTransformer; + + @Inject + public MavenTargetExcludeMatcher(ProjectManager projectManager, PathTransformer pathTransformer) { + this.projectManager = projectManager; + this.pathTransformer = pathTransformer; + } + + @Override + public boolean matches(Path fsPath) { + String wsPath = pathTransformer.transform(fsPath); + RegisteredProject project = projectManager.getClosestOrNull(wsPath); + if (project == null) { + return false; + } + + if (MavenAttributes.MAVEN_ID.equals(project.getType())) { + String mavenTarget = project.getPath() + "/target"; + return wsPath.startsWith(mavenTarget); + } + return false; + } +} diff --git a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/search/server/excludes/MediaTypesExcludeMatcher.java b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/search/server/excludes/MediaTypesExcludeMatcher.java index 7a2d1afc9c5b..d8605960b6c1 100644 --- a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/search/server/excludes/MediaTypesExcludeMatcher.java +++ b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/search/server/excludes/MediaTypesExcludeMatcher.java @@ -55,6 +55,14 @@ public MediaTypesExcludeMatcher(FsManager fsManager, PathTransformer pathTransfo this.fsManager = fsManager; } + public void addExcludedMediaType(MediaType mediaType) { + excludedMediaTypes.add(mediaType); + } + + public void addExcludedTypes(String type) { + excludedTypes.add(type); + } + @Override public boolean matches(Path fsPath) { if (!fsPath.toFile().exists()) { diff --git a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/search/server/impl/LuceneSearcher.java b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/search/server/impl/LuceneSearcher.java index 0c68bdbc6d33..b22f564ff0d1 100644 --- a/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/search/server/impl/LuceneSearcher.java +++ b/wsagent/che-core-api-project/src/main/java/org/eclipse/che/api/search/server/impl/LuceneSearcher.java @@ -56,7 +56,15 @@ import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; -import org.apache.lucene.search.*; +import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.BooleanQuery; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.PrefixQuery; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.ScoreDoc; +import org.apache.lucene.search.SearcherFactory; +import org.apache.lucene.search.SearcherManager; +import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.TokenSources; import org.apache.lucene.store.Directory; @@ -103,7 +111,7 @@ public class LuceneSearcher implements Searcher { private boolean closed = true; @Inject - public LuceneSearcher( + protected LuceneSearcher( @Named("vfs.index_filter_matcher") Set excludePatterns, @Named("vfs.local.fs_index_root_dir") File indexDirectory, @Named("che.user.workspaces.storage") File root, @@ -123,7 +131,7 @@ public LuceneSearcher( } @PostConstruct - public void initialize() throws ServerException { + private void initialize() throws ServerException { doInitialize(); if (!executor.isShutdown()) { executor.execute( @@ -138,7 +146,7 @@ public void initialize() throws ServerException { } @PreDestroy - public void terminate() { + private void terminate() { doTerminate(); executor.shutdown(); try { @@ -199,7 +207,7 @@ public SearchResult search(QueryExpression query) throws ServerException { searcherManager.maybeRefresh(); luceneSearcher = searcherManager.acquire(); - Query luceneQuery = createRegexpLuceneQuery(query); + Query luceneQuery = createLuceneQuery(query); ScoreDoc after = null; final int numSkipDocs = Math.max(0, query.getSkipCount()); @@ -312,11 +320,6 @@ public SearchResult search(QueryExpression query) throws ServerException { } } - private Query createRegexpLuceneQuery(QueryExpression query) throws ParseException, IOException { - RegexpQuery regexpQuery = new RegexpQuery(new Term(NAME_FIELD, query.getName())); - return regexpQuery; - } - private Query createLuceneQuery(QueryExpression query) throws ParseException, IOException { BooleanQuery.Builder luceneQueryBuilder = new BooleanQuery.Builder(); final String name = query.getName(); diff --git a/wsagent/che-core-api-project/src/test/java/org/eclipse/che/api/search/LuceneSearcherTest.java b/wsagent/che-core-api-project/src/test/java/org/eclipse/che/api/search/LuceneSearcherTest.java deleted file mode 100644 index b7b74b728180..000000000000 --- a/wsagent/che-core-api-project/src/test/java/org/eclipse/che/api/search/LuceneSearcherTest.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2012-2017 Red Hat, Inc. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Red Hat, Inc. - initial API and implementation - */ -package org.eclipse.che.api.search; - -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertTrue; - -import java.io.File; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.Collections; -import java.util.List; -import java.util.function.Consumer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.eclipse.che.api.fs.server.PathTransformer; -import org.eclipse.che.api.search.server.SearchResult; -import org.eclipse.che.api.search.server.impl.LuceneSearcher; -import org.eclipse.che.api.search.server.impl.QueryExpression; -import org.eclipse.che.api.search.server.impl.SearchResultEntry; -import org.eclipse.che.commons.lang.IoUtil; -import org.eclipse.che.commons.lang.NameGenerator; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -public class LuceneSearcherTest { - private static final String[] TEST_CONTENT = { - "Apollo set several major human spaceflight milestones", - "Maybe you should think twice", - "To be or not to be beeeee lambergeeene", - "In early 1961, direct ascent was generally the mission mode in favor at NASA", - "Time to think" - }; - - private File indexDirectory; - private LuceneSearcher searcher; - private Path tempDirectory; - - private static Pattern fileExtnPtrn = Pattern.compile("([^\\s]+(\\.(?i)(txt|doc|csv|pdf))$)"); - - public static boolean validateFileExtn(String userName){ - - Matcher mtch = fileExtnPtrn.matcher(userName); - if(mtch.matches()){ - return true; - } - return false; - } - - @BeforeMethod - public void setUp() throws Exception { - - File targetDir = - new File(Thread.currentThread().getContextClassLoader().getResource(".").getPath()) - .getParentFile(); - indexDirectory = new File(targetDir, NameGenerator.generate("index-", 4)); - assertTrue(indexDirectory.mkdir()); - } - - @AfterMethod - public void tearDown() throws Exception { - // searcher.close(); - IoUtil.deleteRecursive(indexDirectory); - } - - @Test - public void initializesIndexForExistedFiles() throws Exception { - tempDirectory = Files.createTempDirectory("testsSearch"); - Files.createFile(Paths.get(tempDirectory.toString(), "xxx.txt")); - Files.createFile(Paths.get(tempDirectory.toString(), "zzz.java")); - Files.createFile(Paths.get(tempDirectory.toString(), "aaa.yaml")); - Files.createFile(Paths.get(tempDirectory.toString(), "bbb.java")); - Files.createFile(Paths.get(tempDirectory.toString(), "zzz.txt")); - searcher = - new LuceneSearcher( - Collections.emptySet(), - indexDirectory, - tempDirectory.toFile(), - new PathTransformer() { - @Override - public Path transform(String wsPath) { - return Paths.get(wsPath); - } - - @Override - public String transform(Path fsPath) { - return fsPath.toString(); - } - }); - searcher.initialize(); - Thread.sleep(1000); - QueryExpression query = new QueryExpression().setName(".*.(xml|txt|json|md|java|yaml|yml)"); - SearchResult search = searcher.search(query); - List results = search.getResults(); - assertEquals(results.size(), 5); - //TODO: result must be sorted by file extension and file name - results.forEach(searchResultEntry -> { - String filePath = searchResultEntry.getFilePath(); - System.out.println(filePath); - }); - - - } - - -}