Die Schnittstelle PropertiesProvider
Das Document
-Interface erweitert die Schnittstelle PropertiesProvider
. Diese Schnittstelle findet sich noch
in einer ganzen Reihe weiterer Klassen und Interfaces der document platform. In allen Fällen
dient sie dem gleichen Zweck, nämlich es zu erlauben, integrationsspezifische Zusatzdaten an
diese Objekte anzuhängen. PropertiesProvider
stellen zu diesem Zweck eine
Map
zur Verfügung, die Strings als
Schlüsselverlangt, jedoch beliebige Objekte als
Werte enthalten kann. Diese Funktionalität gab es bereits in jadice 4
in Form der Methoden
putUserProperty(key,value)/getUserProperty(key),
allerdings haben wir in der neuen Version einige wesentliche Änderungen vorgenommen:
Statt das API der
PropertiesProvider
implementierenden Klasse mit einer Vielzahl von Methoden zu überfrachten, sind wir wieder den Weg der Komposition gegangen.PropertiesProvider
definiert exakt eine Methode, nämlich Map<String, Object> getProperties().Die Schnittstelle wird nun einheitlich an verschiedenen Stellen in unserem API verwendet, statt mehrfach mit ähnlicher aber teilweise leicht abweichender Funktionalität implementiert zu sein.
Es besteht eine klare Aufgabentrennung zwischen Informationsbereitstellung (entsprechend der ehemaligen InfoProvider-Funktionalität) und der Haltung eher technisch orientierter Zusatzdaten.
PropertiesProvider
ist rein für letzteres zuständig, was aber natürlich nicht heißt, dass Informationen einesPropertiesProvider
einem Benutzer nicht in bestimmten Situationen präsentiert werden können.
Die Beschreibung der in einem PropertiesProvider
geführten Daten als
›integrationsspezifische Zusatzdaten‹ bedeutet allerdings nicht, dass die jadice document
platform nicht selbst Zusatzdaten an PropertiesProvider
anhängt. Vielmehr nutzen wir diese
auch selbst, und zwar in Fällen, in denen eine Anwendung zu speziell ist, als dass eine
API-Erweiterung gerechtfertigt wäre. Generell sollten Sie allerdings
keine Annahmen über die verwendeten Keys machen. Selbst wenn wir für
die Implementierung einer Funktionalität Properties eines PropertiesProvider
zur Speicherung benutzen, werden wir
immer ein API zur Verfügung stellen, das dieses Implementierungsdetail
verbirgt. Darüber hinaus verwenden wir als Keys generell Zeichenfolgen, die mit
com.levigo.
beginnen. Sie haben also ohne Weiteres die Möglichkeit,
Kollisionen zu vermeiden und können leicht erkennen, wo es sich um jadice-eigene Properties
handelt. Wir halten es für eine gute Idee, für die Keys eine Namenskonvention ähnlich der
von Java-Packages zu verwenden, dies ist aber keineswegs verpflichtend.
Als Inspiration hier ein Beispiel, wie sie Properties verwenden könnten:
// Erzeugen eines Dokumentes final Document doc = new BasicDocument(); // Laden des Dokumentes... final File sourceFile = new File("MeineBeispieldatei.txt"); // ... // Anreichern mit Properties doc.getProperties().put("org.example.SourceFile", sourceFile); doc.getProperties().put("org.example.LoadTime", new Date()); doc.getProperties().put("org.example.Weather", Weather.Cloudy); // ... später System.out.println("Eigenschaften des Dokuments"); for (final Map.Entry<String, Object> e : doc.getProperties().entrySet()) System.out.println(" " + e.getKey() + " -> " + e.getValue());
Neben dem Document
sind derzeit noch folgende weitere Klassen
beziehungsweise Interfaces PropertiesProvider
:
sowie darüber hinaus noch einige mehr.