public void search( String searchTerm, Set<Integer> categories, Set<String> languages, String sortBy) { if (searcher == null) { System.err.println("Searching before searcher was initialized."); return; } // fetch from cache if searchterm is null if (searchTerm == null) searchTerm = lastSearchTerm; lastCategories = categories; lastLanguages = languages; lastSearchTerm = searchTerm; lastSortBy = sortBy; try { lastResults = searcher.search(searchTerm, categories, languages); lastResults = sortResults(lastResults, sortBy); for (SearcherListener listener : listListeners) { listener.onSearch(lastResults); } } catch (ParseException e) { Alert.alert(MessageType.WARNING, "The search string is not valid.", window); e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
private void init(final SyncWindow window) { this.window = window; final Path searchPath = FileSystems.getDefault().getPath("res", "pdfs"); Path indexPath = FileSystems.getDefault().getPath("res", "index"); IndexFactory factory = new MMapIndexFactory(indexPath); searcher = new Searcher(factory, searchPath); // check if index is built - build it if not if (!searcher.indexExists()) { System.out.println("Index is not built."); IndexTask indexTask = new IndexTask(searcher, window); TaskListener<Integer> taskListener = new TaskListener<Integer>() { @Override public void taskExecuted(Task<Integer> task) { if (task.getResult() != 0) { System.out.println("Index built."); // do first search on init to avoid index searcher caching overhead on user search try { searcher.search("piglet"); } catch (IOException | ParseException e) { e.printStackTrace(); } } else { Alert.alert( MessageType.ERROR, "No pdf files found in \"" + searchPath.toAbsolutePath() + "\".", window); System.out.println("No files added to index."); } window.progress.setEnabled(false); window.progress.setVisible(false); } @Override public void executeFailed(Task<Integer> task) { System.err.println(task.getFault()); } }; indexTask.execute(new TaskAdapter<Integer>(taskListener)); } }