In diesem Abschnitt soll der Begriff des Widget im Kontext von jowidgets definiert werden. Dazu wird zunächst ein kleiner Abstecher zur Entstehungsgeschichte gemacht.
In einem gemeinsamen Projekt zweier Unternehmen sollte ein bereits vorhandenes firmeninternes Framework neu entwickelt werden. Dieses Framework lieferte unter anderem Tabellen und Formulare für CRUD Anwendungen mit Datenbankanbindung sowie Sortierung und Filterung in der Datenbank (und nicht im Client, weil das für große Datenmengen nicht möglich ist). Bei der Neuentwicklung sollten bisherige Schwachpunkte wie eine fehlende 3 Tier Architektur, keine Security in der Service Schicht und eine nicht austauschbare Datenschicht optimiert werden. [4]
Die eine Firma setzte Eclipse RCP ein und wollte daran auch nichts ändern, die andere Swing. Die neu entwickelten Module sollten aber auch für die Erweiterung bisheriger (Swing) Applikation kompatibel sein und ob man zukünftig anstatt Swing SWT einsetzten wollte, war auch nicht geklärt.
So entstand die Idee, für die UI relevanten Anteile wie die
BeanTable
und das BeanForm
Schnittstellen zu definieren. Die eine Firma implementierte dann
das dazugehörige Widget für Swing, die andere für SWT. Schnell
wurde klar, das diese Aufteilung zu grob war,
denn es entstand hauptsächlich für das Formular viel redundanter
Code. Es wuchs die Begehrlichkeit, auch für Eingabefelder,
Comboboxen, etc. Schnittstellen zu definieren, um das
BeanForm
auf Basis dieser implementieren zu
können. Das war die Geburtsstunde von
jowidgets.
Man kam zu dem Schluss, dass jede Interaktion mit dem Nutzer (HCI)
durch eine Java Schnittstelle spezifiziert werden kann und soll.
Dies gilt für einfache Controls wie ein Button
,
eine ComboBox
oder ein
Eingabefeld
genauso wie für zusammengesetzte
Widgets wie Beispielsweise ein Formular oder ein Dialog zur
Eingabe einer Person. Während das einfache Control vielleicht eine
Zahl oder einen Text liefert, liefert ein
BeanForm
ein Bean und ein
PersonDialog
ein Personenobjekt.
Das API sollte nicht nur diese einfachen und zusammengesetzten Widgets Schnittstellen bereitstellen, sondern auch eine Platform bieten um selbst eigene Widget Bibliotheken nach dem gleichen Konzept und mit dem gleichen Benefit wie anpassbaren Defaultwerten, Dekorierbarkeit, Testbarkeit, etc. zu erstellen.
Jowidgets soll eine offene, erweiterbare API für Widgets in Java bieten. Der Name jowidges steht ursprünglich für Java Open Widgets.
Defintion: Ein Widget ist eine Schnittstelle für den Austausch von Informationen zwischen Nutzer und Applikation
In jowidgets werden diese Schnittstellen immer durch Java Interfaces abgebildet. Es kann generell mehrere Implementierungen für die gleiche Schnittstelle geben. So könnte zum Beispiel die Eingabe von Personendaten auf einem Tablet anders aussehen als auf einem Desktop PC. Eine Widget Implementierung kann in der Generic Widget Factory überschrieben oder dekoriert (Decorator Pattern) werden. Zudem läßt sich das Default Setup eines jeden Widgets überschreiben.
[4] Dieses Framework ist auch unter BSD Lizenz veröffentlicht und findet sich hier jo-client-platform