Such-Service als Adapter in die experimentelle Search-API einhängen

Einleitung

Mit der Search-API wird für den Integrator die Möglichkeit geschaffen, individuelle Such-Services an die Suche anzubinden. Dafür müssen diese als Such-Adapter registriert werden.

Als einer der nächsten Schritte bezüglich der Search-API ist geplant, dass abstrakte Klassen der RolloutSearch und des SearchPanels bereitgestellt werden. Integratoren haben dann die Möglichkeit, eine vereinfachte Anpassung der GUI-Komponenten vorzunehmen, ohne sich an dieser Stelle um die zugrundeliegende Verwendung der Search-API zu kümmern.


Such-Service als Adapter einhängen

Um einen weiteren Such-Service als Such-Adapter einzuhängen, müssen die beiden Interfaces /jadice-search/src/main/java/com/levigo/jadice/search/engine/SearchEngine.java und /jadice-search/src/main/java/com/levigo/jadice/search/engine/Search.java implementiert werden.

Es wird ein Listener-Mechanismus zur Verfügung gestellt, der Updates über die laufende Suche liefern kann, wie beispielsweise Zwischenergebnisse, um dadurch eine GUI zu updaten. Falls der zur Verfügung gestellte Listener-Mechanismus genutzt werden soll, gibt es dafür zwei verschiedene Möglichkeiten. Einerseits kann der Listener selbst eingebunden werden oder es kann die bereits bereitgestellte Implementation in der abstrakten Klasse AbstractSearch genutzt werden. Dafür muss dann statt dem Interface /jadice-search/src/main/java/com/levigo/jadice/search/engine/Search.java die abstrakte Klasse /jadice-search/src/main/java/com/levigo/jadice/search/engine/AbstractSearch.java implementiert werden.


Nachdem die beiden Interfaces oder das Interface und die abstrakte Klasse eingebunden wurden, kann der Such-Adapter über com.levigo.jadice.search.engine.SearchEngineRegistry.registerSearchEngine(SearchEngine, int) zusammen mit seiner Priorität registriert werden. Mithilfe der Priorität hat der Integrator die Möglichkeit, die Reihenfolge der Such-Adapter anzugeben.

Wenn die Priorität eines Such-Adapters geändert werden soll, kann der Integrator diese über com.levigo.jadice.search.engine.SearchEngineRegistry.changePriority(SearchEngine, int) ändern.

Wenn ein Such-Adapter nicht mehr genutzt werden soll, kann er mit com.levigo.jadice.search.engine.SearchEngineRegistry.deregisterSearchEngine(SearchEngine) aus den registrierten Such-Adaptern entfernt werden.


Such-Optionen hinzufügen

Da die verschiedenen Such-Services, die eingebunden werden, weitere Such-Optionen mit sich bringen können, wird im Folgenden erläutert, welche Schritte erfolgen müssen, um in der Demo-Anwendung weitere Such-Optionen hinzuzufügen. Beispielhaft wird dies an der Such-Option Wildcard gezeigt. Wildcard/wildcard muss somit jeweils durch den Namen der neuen Such-Option ersetzt werden:

  1. Die Such-Option muss als Parameter in /jadice-swing-appbase/src/main/resources/com/levigo/jadice/appbase/search/engine/ui/resources/commands.properties ergänzt werden.
    Beispiel:

    ToggleWildcard=com.levigo.jadice.appbase.search.engine.ui.ToggleOptionCommand
    ToggleWildcard.param.optionName=wildcard
  2. Die Such-Option muss in /jadice-swing-appbase/src/main/resources/com/levigo/jadice/appbase/search/engine/ui/resources/actions.properties und /jadice-swing-appbase/src/main/resources/com/levigo/jadice/appbase/search/engine/ui/resources/actions_de.properties ergänzt werden, mit einem eigenen Namen, einer Beschreibung und einem eigenen MnemonicKey.
    Beispiel:

    ToggleWildcard.commands = ToggleWildcard
    ToggleWildcard.Name = Wildcard
    ToggleWildcard.ShortDescription = Suche mit Wildcards
    ToggleWildcard.SmallIcon = defaulticons.TB_TEXTSEARCH
    ToggleWildcard.menuType = checkbox
    ToggleWildcard.MnemonicKey = I

    → Für actions.properties sollten der Name und die ShortDescription jeweils auf Englisch erfolgen. Der MnemonicKey sollte sich von den übrigen unterscheiden.

  3. Die Such-Option muss in /jadice-swing-appbase/src/main/resources/com/levigo/jadice/appbase/search/engine/ui/resources/menucomponents.properties für die RolloutSearch ergänzt werden. Dafür muss sie unter actions vor ,|,ExtendedSearch ergänzt werden.
    Beispiel (wenn es nur die Such-Option Wildcard gibt):

    rolloutSearchPopup.actions = ToggleWildcard,|,ExtendedSearch
  4. Im SearchPanel muss eine getter-Methode, in welcher eine JCheckBox erstellt wird, wie im Beispiel zu sehen, eingefügt werden. In der Methode levigo.jadice.appbase.search.engine.ui.SearchPanel.getSearchSection() wird die JCheckBox für die Such-Option dann mithilfe der getter-Methode der searchSection hinzugefügt.
    Beispiel:
    Die getter-Methode:

    private JCheckBox getWildcardOption() {
    	if (wildcardOption == null) {
    		wildcardOption = new JCheckBox(getActionFactory().getAction(ctx, "ToggleWildcard"));
        }
        return wildcardOption;
    }

    In der Methode com.levigo.jadice.appbase.search.engine.ui.SearchPanel.getSearchSection():

    searchSection.add(getWildcardOption());

Es ist zu beachten, dass überall derselbe ToggleOptionsname verwendet werden muss.