Map-Binding
Map mit primitivem Key und Wert
public interface Config extends ConfigurationItem {
@MapBinding()
Map<String, String> getAdditionalNamespaces();
}
lässt sich konfigurieren als:
<foo>
<additional-namespaces>
<additional-namespace key="config" value="http://www.top-logic.com/ns/config/6.0"/>
<additional-namespace key="annotation" value="http://www.top-logic.com/ns/layout/annotation/1.0"/>
<additional-namespace key="fubar" value="http://example.com/NS/fubar"/>
</additional-namespaces>
</foo>
Die Tag- und Attribut-Namen können als optionale Parameter am @MapBinding
spezifiziert werden:
public interface Config extends ConfigurationItem {
@MapBinding(tag = "namespace", key = "prefix", attribute = "uri")
Map<String, String> getAdditionalNamespaces();
}
In diesem Fall muss die Konfiguration folgendermaßen lauten:
<foo>
<additional-namespaces>
<namespace prefix="config" uri="http://www.top-logic.com/ns/config/6.0"/>
<namespace prefix="annotation" uri="http://www.top-logic.com/ns/layout/annotation/1.0"/>
<namespace prefix="fubar" uri="http://example.com/NS/fubar"/>
</additional-namespaces>
</foo>
Für andere Typen als Strings kann jeweils ein ConfigurationValueProvider
für den Key und den Value angegeben werden:
public interface Config extends ConfigurationItem {
@MapBinding(keyFormat = ClassReferenceResolver.class, valueFormat = HexEncodedColor.class)
Map<Class, Color> getAdditionalNamespaces();
}
Im folgenden Beispiel wird eine Abbildung Map<String, Color> getColors()
von Namen auf Farbwerte definiert:
public interface Config extends ConfigurationItem {
@MapBinding(key = "name", valueFormat = HexEncodedColor.class, attribute = "value", tag = "color")
Map<String, Color> getColors();
}
Dies kann über folgendes XML-Document konfiguriert werden:
<config>
<colors>
<color name="red" value="#ff0000"/>
<color name="green" value="#00ff00"/>
<color name="blue" value="#0000ff"/>
</colors>
</config>
Der Default-Wert ist eine leere, modifizierbare Map, nicht null
.