Typisierte Konfiguration

Die typisierte Konfiguration als Konzept erleichtert dem Entwickler, die anwendungsdefinierten Klassen (z.B. Layout-Komponenten) konfigurierbar zu machen. Eine Konfiguration wird direkt in der Klasse als inneres Interface hinterlegt, welches von ​ConfigurationItem ableitet und der Java-Beans-Konvention folgt. Jeder Getter in so einem Interface definiert eine Eigenschaft, liefert den konfigurierten Wert als Ergebnis und kann überall in der Klasse aufgerufen werden.

/** The class that need configuration. */
public class Car {

  /** The configuration interface that defines the configuration. */
  public interface Config extends ConfigurationItem {
    int getHorsePower();
    String getColor();
  }

  ...

  public void decide(...) {
    ...
    // Access to the configuration value.
    if (getConfig().getHorsePower() < 100) {...}
    ...
  }
}

Die obige Beispiel-Konfiguration kann dann über folgendes XML-Document konfiguriert werden:

<config
   horse-power="120"
   color="red"
/>

Das Framework übernimmt die Aufgaben:

  • Instanziierung der Konfiguration über Reflection.
  • Serialisierung der Konfiguration in eine XML​-Datei (z.B. eine *.layout.xml) und Parsen der XML-Datei in eine mit Werten befüllte Konfiguration (anpassbar durch @Binding-Annotations).
  • Mapping zwischen dem Namen des Getters getHorsePower() und Namen der Eigenschaft horse-power in der XML-Datei (anpassbar durch @Name-Annotation).
  • Konsistenz zwischen dem Rückgabetyp des Getters und dem Wertetyp der Eigenschaft in der XML-Datei (anpassbar durch @Format-Annotation).

Entsprechende Setter kann man auch in der Konfiguration aufführen, falls man vorhat die aus der XML-Datei eingelesene Werte zu ändern.

Der Wert einer Eigenschaft kann selbst eine Konfiguration sein - dadurch entsteht ein ganzer Konfigurationsbaum.