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.