コード例 #1
0
  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();
    }
  }
コード例 #2
0
  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));
    }
  }