ASDL:Tool
From Wiki
Endbericht des ASDL-Projekts
Inhaltsverzeichnis | Hauptseite des ASDL-Projekts
Contents |
Die Vorüberlegungen
Die Überlegungen zum Tool liefen ziemlich schnell in eine Richtung: Nur nicht aufdrängen und dadurch den Benutzer stören! Wir wollen dem Benutzer schließlich bei der Suche helfen, wenn er es wünscht. Dann sollte er Vorschläge geliefert bekommen und auf andere Tools hingewiesen werden, damit er dann weitersuchen kann. Wir hoffen, das Tool so übersichtlich und selbsterklärend wie möglich in das große Daffodil-System integriert zu haben.
Der Knopf
Nachdem eine Suchanfrage beendet worden ist, wird erst ein Button im Ergebnisfeld sichtbar gemacht.
public boolean setASDLshow(String nl) {...} public boolean setASDLhide() {...}
Der Button weist darauf hin, dass es eine Suchunterstützung gibt. Der Buttontext zeigt auch schon an, wie viele Vorschläge zur Verfügung stehen.
Genauso gibt es eine Funktion, die den Button wieder ausblendet, nachdem er gedrückt wurde. Das wurde aus Performance- und Stabilitätsgründen nötig. Der Benutzer sollte nicht in der Lage sein, mehrfach den Knopf zu drücken.
Wenn der Benutzer den Knopf drückt, dann wird eine Ask-Nachricht abgeschickt, die die Vorschläge anfordert:
... Ask a = new Ask(this); a.setReceiver("ASDLOutput"); a.setMsg("<getsuggestions sessionid=... useragentid=... language=... />"); Dispatcher.postEvent(a); ...
Das Toolfenster
Wenn die Vorschläge, in Form einer suggestions-Nachricht, beim ASDL-Tool eingehen, öffnet sich ein View des ASDL-Tools:
Die Gestaltung ist einfach gehalten. Es gibt eine Beschreibung für die unterschiedlichen Symbole am unteren Fensterrand und der restliche Platz dient zur Darstellung der Vorschläge. Die Vorschläge werden ähnlich wie die Ergebnisse einer Suchanfrage durch ein ListModel dargestellt. Sie erhalten ein Ranking, eine aussagekräftige Überschrift und eine ausführlichere Beschreibung.
Die Vorschläge
Es wird zwischen ausführbaren und nicht-ausführbaren Vorschlägen unterschieden. Die ausführbaren sind mit Symbolen markiert, damit diese Funktionalität dem Benutzer auffällt. Das besondere an den „ausführbaren“ Vorschlägen ist, dass nachdem der Benutzer auf einem Vorschlag doppelklickt Funktionalität ausgeführt wird. So wird z.B. die Suchanfrage verändert, oder die Koautoren-Suche von Daffodil mit dem häufigsten extrahierten Autor aus der Suchanfrage gestartet. Hier haben wir versucht, dem Benutzer möglichst viel Arbeit abzunehmen.
Bereits verfügbare ausführbare Suggestions
- AddAuthorToSearchSuggestion: Fügt den am häufigsten extrahierten und noch nicht in der Anfrage vertretenen Autoren zur Suchanfrage hinzu
- AddCurrentYearToSearchSuggestion: Fügt das aktuelle Jahr zur Suchanfrage hinzu
- AddTermToFreetextSuggestion: Fügt dem am häufigsten extrahiertem Term zur Suchanfrage ins Freitext-Feld hinzu
- BrowseConferencesSuggestion: Öffnet das Konferenz-Tool und startet die Suche nach der am häufigsten extrahierten Konferenz
- BrowseJournalsSuggestion: Öffnet das Journal-Tool und startet die Suche nach dem am häufigsten extrahierten Journal
- SearchForAuthorSuggestion: Startet eine neue Suche nach dem am häufigsten extrahierten Autoren
- ShowCoAuthorGraphSuggestion: Öffnet den Koautoren-Graphen und startet eine Suche nach dem am häufigsten extrahierten Autoren
Beispielhafte Suggestion-Klasse:
Alle Suggestion-Klassen erben von der Klasse Suggestion. Diese Klasse selbst wird geladen, wenn es für eine Suggestion keine eigenen Klasse gibt (z.B. die nicht ausführbaren Vorschläge).
public class AddCurrentYearToSearchSuggestion extends Suggestion { public AddCurrentYearToSearchSuggestion() { } ...
Ein leerer Konstruktor wird benötigt, weil die Klasse per Class.forName(...) geladen wird.
... public AddCurrentYearToSearchSuggestion(Element sugg, Element context) { super(sugg, context); } private String year = ""; public void initialize(Element sugg, Element context) { super.initialize(sugg, context); GregorianCalendar cal = new GregorianCalendar(); cal.setTimeZone(TimeZone.getTimeZone("ECT")); year = String.valueOf(cal.get(Calendar.YEAR)); } ...
Nachdem die Klasse geladen wurde wird die initialize-Methode aufgerufen. Als Parameter werden der Vorschlag und die Kontextdaten als XML-Element übergeben. Daraus werden dann in der Oberklasse Suggestion Werte, wie z.B. der Vorschlagstext und die Gewichtung ausgelesen.
... @Override public void execute() { ToolController tc = ToolController.getInstance(); SearchTool searchTool = (SearchTool) tc.getTool(SearchTool.class); if (searchTool != null) { searchTool.addToQuery(new SimpleDataTransfer(year, "term", year), 31); searchTool.search(); // notify change of query NotifyQueryChanged n = new NotifyQueryChanged(this, ToolController.getInstance().getSessionId(), Integer.toString(DQueryRegistry.YEAR), this.getClass().getName(), year); n.dispatchYourSelf(); } super.execute(); } ...
Die eigentliche Funktionalität muss in dieser Methode implementiert werden.
... public boolean isExecutable() { return true; } }
Wenn die Suggestion als ausführbar angezeigt werden soll und somit ausgeführt werden kann, muss diese Methode den boolschen Wert true zurüchliefern.
Weitere Informationen stehen im Handbuch.
Das Rechtsklick-Menü
Über die rechte Maustaste ist ein Menü zu öffnen. Dort besteht wieder die Auswahl, den Vorschlag auszuführen (falls er ausführbar ist), aber auch ihn zu bewerten. Diese Bewertung dient der Verbesserung des Systems. Damit soll erreicht werden, dass die Vorschläge, die von den Benutzern als nützlich eingeschätzt wurden, bei den nächsten Anfragen ziemlich weit oben in der Vorschlagsliste stehen.
