Indizierte Subkomponenten
public class A {
public interface Config extends PolymorphicConfiguration<A> {
@Key(B.Config.NAME_PROPERTY_NAME)
@EntryTag("bConfig")
Map<String, B.Config> getBConfigs();
}
Map<String, B> bs;
public A(InstantiationContext context, A.Config config) {
this.bs = TypedConfiguration.getInstanceMap(context, config.getBConfigs());
}
}
public class B {
public interface Config extends PolymorphicConfiguration<B> {
String NAME_PROPERTY_NAME = "name";
@Name(NAME_PROPERTY_NAME)
String getName()
}
...
}
Eine Komponente A kann eine Ansammlung von Subkomponenten enthalten, die nach einem definierten Konfigurationswert indiziert werden. In der obigen Deklaration besteht die Konfiguration A.Config aus einer indizierten Ansammlung von Konfigurationen B.Config, die nach dem Konfigurationswert B.Config.getName() indiziert sind. Die von A.Config.getBConfigs() gelieferte Map enthält als Werte Konfigurationseinträge B.Config und als Schlüssel die Werte der Property name der entsprechenden B.Config Konfigurationseinträge.
Über die Annotation com.top_logic.basic.config.annotation.Key wird deklariert, dass die Ansammlung nach der Eigenschaft name des Elementtyps B.Config indiziert werden soll. Die Referenz auf eine Eigenschaft eines Konfigurationsinterfaces wird realisiert, indem der Konfigurationsname der fremden Eigenschaft angegeben wird.
Bei Verwendung des Default-XML-Bindings könnte eine Komponente über folgendes XML-Document konfiguriert werden:
<aConfig>
<bConfigs>
<bConfig name="component-1" />
<bConfig name="component-2" />
<bConfig name="component-3" />
...
<bConfigs>
</aConfig>
Das Ergebnis von A.Config.getBConfigs() wäre dann eine Map, welche die im name-Attribute angegebenen Schlüssel component-1,… auf den jeweiligen Konfigurationseintrag vom Typ B.Config abbildet.
Bei der Instanziierung bleiben die Map-Schlüssel erhalten, und die Konfigurationseinträge werden durch die jeweiligen konfigurierten Instanzen ersetzt.
Auch Eigenschaften vom Typ Collection, List und Set können mit der @Key-Annotation versehen werden. In diesem Fall, können in einer inkrementellen XML-Konfiguration auf einzelne Elemente der Kollektion zugegriffen werden, siehe unten