2011-02-19

SteelSeriesFactory

"Das müssen wir haben!" (klick hier) raunte mein Chef, während er die Kristalle meines Monitors zu schillernden Regenbogen zusammendrückt. Es fallen Begriffe wie Dashboards, Tachometer, Anzeigen, tolle Grafik - und das würde ideal zu unserem bisherigen Produkt passen.

Bevor der Leser jetzt genauso verwirrt ist, wie ich es war, bringe ich schnelle Aufklärung. Unser Produkt (www.visualcockpit.de) ist eine grafische Controlling-/Analyselösung. Interaktiv verknüpfte, proprietäre Grafiken ermöglichen herzerfrischende Zaubereien für jeden Analysten. Was fehlt sind jedoch ein paar hübsch aussehende, einfach zu verstehende Anzeigen, welche man auch einem flinken Entscheider zeigen kann, ohne das Gesamtbild (nennen wir es Dashboard) erst interpretieren zu müssen.

Hier kommt die tolle Grafikbibliothek SteelSeries von Gerrit Grunwald ins Spiel, von welcher mein Chef gehört/gelesen hat (wir erinnern uns an den Link ganz am Anfang des Posts). Als Programmierer, welcher endlich wieder programmieren darf, habe ich mich natürlich gleich in das Abenteuer gestürzt und versucht, die Anzeigen aus der Bibliothek zu adaptieren. Mittlerweile gibt es die SteelSeries in einer stabilen und aufgeräumten Version 3. Zu meinen Anfängen war das Projekt selber noch ein Dachboden voller toller Ideen, aus welchem man jedoch erst einige Bugs vertreiben und Redundanzen entsorgen musste. Um vor den damaligen häufigen Strukturänderungen gefeit zu sein und auch weil viele Funktionalitäten toller Grafiken keine gemeinsame Oberklasse oder Interfaces besaßen, habe ich zunächst aus der Not heraus und um mir meine Arbeit auf Arbeit zu erleichtern, eine Hilfsbibliothek zusammengebaut. Ziel sollte es sein, alle möglichen Einstellungen aller Grafiken zu vereinen und aus einem Einstellungspool heraus jede beliebige Anzeige kreieren zu können.

Was als klein Hilfsbibliothek begonnen hat, wurde zu einem recht zeitaufwendigen Freizeitprojekt. Es besteht zwar nur aus ein paar wenigen Klassen mit nicht all zuviel Code, jedoch haben sich meine Ideen überschlagen und der Wunsch nach absoluter Dynamik der möglichen Einstellungen der Hilfsbibliothek gegenüber den tatsächlichen Einstellungen der SteelSeries-Bibliothek hat mich gefesselt. Nachdem ich nämlich den Quelltext der SteelSeries-Bibliothek auf alle möglichen öffentlichen Attribute hin untersucht hatte, verging mir schnell die Lust, all diese in einer Klasse oder einem Interface zusammenzufassen. Zumale kamen ständig neue hinzu.

Entstanden ist die SteelSeriesFactory, nicht mehr eine Hilfsbibliothek sondern eine sinnvolle Ergänzung, ein Tool zum einfachen Erstellen und Handhaben der Anzeigen des SteelSeries-Projekte. Geben wir ein paar Fakten zum Projekt an:
  • abhängig von der SteelSeries-Bibliothek
  • die Einstellung aller Anzeigen kann zentral über eine oder mehrere selbst definierte Klassen verwaltet werden
  • diese eigenen Klassen sind ein Model, in welchem man losgelöst von den Grafiken selbst das Persistieren der Attribute implementieren kann
  • aus dem Model heraus können unterschiedliche Anzeigen heraus erstellt werden
  • das Model muss dazu auch nur eine Teilmenge aller möglichen Einstellungen beinhalten. Fehlen Einstellungen, werden diese auch nicht die entsprechenden Attribute der Anzeige beeinflussen. Gibt es mehr Einstellungen als eine Anzeige unterstützt (nicht jede Anzeige unterstützt ja alle Attribute einer Anderen anzeige) haben entsprechenden Attribute auch keinen Einfluss auf die Anzeige
  • zur einfachen Handhabung gibt es eine 'Universal-Anzeige'. Dieses GaugePanel kann die Einstellungen aller Einzel-Anzeigen haben und sich zu jeder Zeit in jede beliebige Einzel-Anzeige verwandeln lassen.


class DashboardPanel extends JPanel{

// unsere 'Universalanzeige' und deren Model
MyOwnModelClass myModel;
GaugePanel dashboardGauge;
...

public DashboardPanel(){
myModel = MyOwnModelClass();
dasbhboardGauge = new GaugePanel(GaugeType.RADIAL, myModel);
add(dashboardGauge);
}

public void setNewDashboardStyle(GaugeStyle style){
// Änderungen an dem GaugePanel werden sofort übernommen
dashboardGauge.setStyle(style);
/* Das ändern des Anzeigen-Stils ist
weitestgehend die einzige Änderung
an der Anzeige selber. Der Rest wird
über das Model gehandhabt. */
}

public void applyChangesFromModelToGauge(){
// Änderungen am Model werden erst nach einem Refresh übernommen
dashboardGauge.refresh();
}

public void setGaugeTitle(String title){
// Beispiel einer Änderung am Model
myModel.setTitle(title);
}

/* schon haben wir eine Anzeige mit
veränderbaren Style, Titel und allen
Attributen welche (z.B. von Außen)
noch an unserem Model geändert
werden können. */
}


Links:

Keine Kommentare: