Glazed Lists

Sortierung von Listen

Eine wesentliche Stärke von Glazed Lists ist die leichte Implementierung der Sortierung. Dazu muss eigentlich nur eine SortedList mit der bestehenden EventList erstellt werden.

SortedList
sortedArticleList = new SortedList
(articleList,null);

Soll die Liste anfangs auch sortiert werden, dann muss ein Comparator implementiert und übergeben werden. Anwender sind es gewohnt, dass die markierte Spalte sortiert wird, wenn sie darauf klicken. Dafür existiert der TableComparatorChooser.

new TableComparatorChooser(t, sortedArticleList,true);

Bei der Sortierung kommt das Decorator Pattern zum Einsatz. Sowohl unsere EventList als auch unsere Tabelle wird mit einer Sortierfunktionalität erweitert. Der letzte Boolean-Parameter beim TableComparatorChooser gibt an, ob eine Mehrfachsortierung der Spalten möglich ist oder nicht.

Filterung von Listen

Ein weiteres Muss heutiger Listen ist deren Filterung, d.h. über einen Filter können die Daten in der Liste entsprechend eingeschränkt werden. Wir erweitern nun unsere Liste um eine Filterfunktionalität, möchten dabei aber nicht auf die Sortierung verzichten. Mit Glazed Lists können sehr einfach Pipelines von Listen erstellt werden, d.h. ich kann nun meine SortedList verwenden und diese um eine Filterfunktion ergänzen (Listing 4).

Zunächst definieren wir für unseren Filter ein Textfeld für die Filtereingabe. Anschließend wird dieses Textfeld um einen TextComponentMatcherEditor erweitert, welcher die Eingabe des Anwenders entgegennimmt und eine Filterung durchführt. Das TextFilterator Interface definiert dabei, welche Felder unseres Artikels für die Filterung berücksichtigt werden sollen. Der Grund dafür, dass getFilterStrings keine neue Liste (die gefilterte Liste) zurückliefert, ist die Performance, denn gerade bei einer Livesuche entsteht eine Unzahl an Instanzen. Stattdessen wird die baseList immer wieder verwendet, was die Performance der Filterung nicht beeinträchtigt. Zum Schluss wird noch eine FilterList definiert, welche unsere sortierte Liste und den zuvor definierten matcherEditor benötigt.

Listing 4: Filterung von Listen
        
JTextField filterField = new JTextField(30);

TextComponentMatcherEditor matcherEditor = new TextComponentMatcherEditor(filterField, new TextFilterator(){
            public void getFilterStrings(List baseList, Object element) {
                Article article = (Article)element;
                baseList.add(article.getTitle());
                baseList.add(article.getCategory());
            }
        });

FilterList
filteredArticleList = new FilterList
(sortedArticleList, matcherEditor);
Gruppierung von Listen

Neben Sortierung und Filterung bietet Glazed Lists ein nettes Listenfeature, um Listen zu gruppieren und daraus eindeutige Einträge zu filtern. Betrachten wir unsere Artikelliste. In einem Sportshop gibt es eine Menge an unterschiedlichen Artikeln, wobei die Artikel unterschiedlicher Kategorien auch von der gleichen Marke sein können. Jetzt kann man ohne größere Probleme und Programmieraufwand eine Liste erstellen, welche alle Marken eines Sportshop anzeigt. Dabei greift man auf GroupingList und FunctionList zurück und stellt hierfür einen passenden Comparator zur Verfügung.

Features von Glazed Lists
  • Filter- und Sortierfunktionen sind einfach zu implementieren
  • Concurrency Built-in
  • AutoComplete-Support für Spalten
  • Einfache Integration mit JFreeChart (Chart kann auf Basis von FunctionLists erstellt werden und ist dabei immer synchron.)
  • Hibernate-Integration, um EventLists zu persistieren
    Fazit

    Glazed Lists ist eine recht schlanke Bibliothek, bietet aber eine Menge an Funktionalität. Leider muss man sagen, dass die Dokumentation dieser Technologie mangelhaft ist. Die Community von Glazed Lists ist aber sehr aktiv und Fragen in den Mailing-Lists werden in kurzer Zeit beantwortet. Die Integration von Glazed Lists in eigene Projekte ist wirklich sehr einfach, und es lohnt sich allemal, einen Blick auf diese Bibliothek zu werfen. Gerade in der Desktopentwicklung sind Tabellen aus heutigen Anwendungen nicht mehr wegzudenken.

    Markus Demolsky ist Software-Engineer und Consultant. In seiner selbständigen Tätigkeit unterstützt er zusammen mit Indoqa andere Unternehmen im Bereich Softwarearchitektur/-design und Open-Source-Technologien im Java-EE-Umfeld. Aktuell arbeitet er gemeinsam mit Dr. Alexander Schatten an einem Buch zum Thema „Software Engineering – Best Practices“. Kontakt: markus.demolsky[at]indoqa.com

    Zu dem Artikel können Sie hier den Quellcode als zip-Datei downloaden.

    Kommentare

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht.