Ist-Zustand:
Über einen StoreListener ist es derzeit möglich auf Änderungen an Stores programmatisch zu reagieren (Element wurde erstellt, gelöscht, verschoben etc.). Dies ist über ein Listener-Mechanismus realisiert, Listener-Implementierungen die an Stores registriert sind werden bei Änderungen mittels spezieller Methode informiert. Diese Methoden bekommen als Übergabeparameter das StoreElement, an welchem die Änderung in einem Store aufgetreten ist, übergeben. Details können der Access-API entnommern werden (http://www.e-spirit.com/odfs42/access/de/espirit/firstspirit/access/store/StoreListener.html).
Idee:
Leider ist die derzeit implementierte Lösung meiner Meinung nach unzureichend, da bei Änderungen zu wenig Metainformationen über die API abgegriffen werden können. Wünschenswert wäre ein richtiger Event Mechanismus, so wie er auch von Swing bekannt ist. Beispielsweise könnte ein StoreChangedEvent folgende Informationen an einen StoreEventListener übertragen:
- wann wurde das Event ausgelöst (Metainformation, fehlt derzeit)
- von welchem Benutzer wurde das Event ausgelöst (Metainformation, fehlt derzeit)
- in welcher Session (für den Fall das ein Benutzer meherer Session offen hat) wurde das Event ausgelöst (Metainformation, fehlt derzeit)
- der Typ des Events (AddedToScope, RemovedFromScope, Moved, Deleted, Changed etc)
Darüber hinaus wäre es gute wenn Events in regelmäßigen Abständen zu den Clients übertragen werden, derzeit geschieht dies nur nach manuellem Refresh eines Stores in der Baumansicht.
z.B. Client A verschiebt ein Element, Client B bekommt die Verschiebe-Aktion nur dann als Event wenn manuell der Baum (in dessen Teil das verschobene Element besteht / bestand) aktualisiert wird. Schön wäre es wenn der Client solche Events im Hintergrund Empfangen würde und so die Aktualisierung im automatisch ablaufen würde, die Baumansicht somit fortlaufen in kleinen Abständen aktualisiert wird.
Beispiel für einen Anwendungsfall:
Bei Verschiebe-Aktionen im Strukturbereich sollen Prüfungen erfolgen, die eine konsistente Strukur im Strukturbereich sicherstellen (z.B. soll die letzte Seitenreferenz / Knoten eines Startordners A, der bereits einmal freigegeben wurde, nicht aus dem Order A herausgeschoben werden können, da sonst die Gefahr besteht das dieser dann leere Ordner beim Generieren aus der Navigation verschwindet). Eine solche Prüfung soll in dem Redaktionsclient erfolgen in dem die Verschiebe-Aktion durchgeführt wurde. Mit den derzeitigen Mittel lässt sich ein solches Szenario nur unzureichen implementieren, es ist zwar möglich auf die Verschiebung zu reagieren, aber da die besagten Metainformationen nicht zur Verfügung stehen sind nur eingeschränkte Aktionen möglich. Derzeit lassen sich die fehlenden Metainformationen nur umständlich und auf unsicheren Wegen, bspw. durch zeitintensives prüfen von Revisionen, ermitteln. Einige Metainformationen (z.B. die Benutzersession) sind nicht ermittelbar (soweit mir bekannt).