Jadice search: Programmatische Textsuche, Part 1

Die jadice document platform enthält eine integrierte Suche nach textuellen Inhalten eines Dokuments. Neben der bereits vorgefertigten GUI kann die Suche programmatisch gesteuert werden, um beispielsweise eigene Such-Masken zu implementieren.

com.levigo.jadice.addon.search.SearchRequest

Mittels des

SearchRequest

wird die Suchanfrage konfiguriert und letztlich auch ausgeführt.

Beispiel:
Möchte man die Seiten eines geladenen Dokuments nach dem String „java" durchsuchen, so genügt bereits folgendes Code-Fragment:

SearchRequest request = new SearchRequest();
request.setPages(document.getPages());
request.setSearchStrings(new String[]{"java"});
request.addSearchResultListener(new MyListener());
request.execute();

Die Methode setSearchStrings erlaubt es, mehrere Strings für eine Suche zu setzen. Es ist zu beachten, dass diese in einer „ODER"-Relation zueinander stehen. Die Suche wird jeden Treffer melden, der einen der angegebenen Strings enthält.
Die Method execute() führt die Suchanfrage letztlich aus. Wichtig sind hierbei zwei Dinge:

  • execute() wird asynchron ausgeführt. Die Anfrage wird an die jadice interne SearchEngine weitergereicht und in einem eigenen Thread bearbeitet.
  • Es kann derzeit nur eine Suche zur selben Zeit ausgeführt werden. Wird die Methode execute() gerufen, während noch eine weitere Suche läuft, wird die laufende Suchanfrage abgebrochen.

Um die Ergebnisse der Suche zu erhalten wird eine Implementation des com.levigo.jadice.addon.search.SearchResultListener registiert. Dieser wird über jeden Treffer informiert. Eine Implementation könnte beispielsweise wie folgt aussehen:

public class MyListener implements SearchResultListener {
public void searchResultFound(SearchResultEvent e) {
Result result = e.getResult();
Page page = result.getPage();
String text = result.getSelectedText();
// page und text verarbeiten
}
}

Das SearchRequest verfügt über weitere kleine Helfer, die vor allem für die Verwendung innerhalb einer Suchmaske von Interesse sind. Mehr Informationen hierzu wird der zweite Teil dieser Artikel-Reihe „enthüllen".