Abb. 24 (S. 84) illustriert eine mögliche Realisierung. Sie beruht
darauf, daß genau ein referenziertes Datenobjekt sich in einem
ArcView-Projekt befindet. Der Konstruktor erhält dessen Typ und
Projektname. Die begriffliche Unschärfe in der Verwendung von Datenobjekt
war beabsichtigt und soll jetzt erläutert werden: Während Java-seitig
Java-Repräsentationen der MSL-Daten-Objekte verwendet werden, so
müssen sie, um in ArcView gespeichert werden zu können, auf
Avenue-Datenobjekte abgebildet werden. Wird ein ArcView-Projekt importiert, so
ginge die Information, in welchem Projekt die enthaltenen Objekte waren,
verloren. ObjektTags (vgl.[ESR95b], die Avenue-Hilfe zu diesem
Begriff) stellen eine einfache Möglichkeit dar, sie als zu einem Projekt
dazugehörig zu markieren, denn ObjectTags können jedes
Avenue-Objekt enthalten.
Kleinere Avenue-Objekte wie etwa eine Polylinie besitzen jedoch keine
ObjectTags. Zur Speicherung von MSL-Daten-Objekten in ArcView sind
deshalb nur Avenue-Tables und Avenue-Views möglich, da
neben bislang gar nicht zur Konvertierung vorgesehenen Avenue-Objekten wie
Layouts und Script-Editoren nur sie in Avenue mit sogenannten Object-Tags
versehen werden können. Da es in ArcView nur die Möglichkeit des
Importierens von Projekten, nicht aber die des Exportierens gibt, muß
diese Fähigkeit nachgebildet werden. Die zu diesem Zweck bereits
programmierte Methode
Mobile.GIS.ArcView.Session.exportProject()
setzt die Verwendung von ObjectTags voraus.
In den Methoden getCachedValue() und getValue() wird die
Konvertierung des referenzierten Datenobjekts bedingt bzw. unbedingt durch den
Aufruf von
ParameterList parameterList = new ParameterList();
parameterList.add("projectName", projectName);
parameterList.add("Type", Type);
executeScript("MobileReferenceGetValue");[23]
ausgelöst. Das benannte Projekt wird im GIS ArcView importiert und der Typ
wird verwendet, um das speziell für den Typ programmierte Avenue-Script
MobileExtricate... auszuführen, etwa
MobileExtricateRoadNetwork
für ein MSL-Daten-Objekt vom Typ RoadNetwork[24]. In diesem werden dann die Komponenten in Form von
Avenue-Tables, die zur Beschreibung für
Mobile.MSL.RoadNetwork ausreichen, zunächst intriziert und dann
zum MOBILE-Kernsystem transferiert.
Der Vorgang zum Ablegen von MSL-Daten-Objekten verläuft analog mit
setValue().
Das RoadNetwork soll als Parameter an das Kurierdienstmodell
übergeben werden (vgl.[Geh98]). Da im Mobile-System Parameter zur
Instantiierungszeit aus der ObjectBase entnommen werden sollen und
nicht erst berechnet werden dürfen (HILTY, persönliche Mittlg.), kann
eine Übergabe als Parameter nur in Form einer
ArcViewDataReference erfolgen. Wenn das Kurierdienstmodell
ausgeführt wird, muß der Zugriff auf das referenzierte
RoadNetwork mittels getCachedValue() erfolgen. Da die
Konvertierung sehr zeitaufwendig ist, wird das einmal importierte Objekt in der
ArcViewDataReference zwischengespeichert und nur bei expliziter
Anforderung mit getValue() erneut konvertiert. Ansonsten gibt die
ArcViewDataReference ab dem zweiten Aufruf von
getCachedValue() eine Kopie Objekts, das beim ersten Aufruf erhalten
wurde, zurück, auch wenn mittlerweile im GIS Veränderungen
aufgetreten sind. (vgl. Konzept von ArcView-Datenreferenzen S. 83).
Für das das Kurierdienstmodell ist es nicht erforderlich,
getValue() einzusetzen, da das RoadNetwork als während
der Simulationsdauer konstant vorausgesetzt wird. Andere Simulationsmodelle,
wie etwa Verkehrmodelle, die zeitweilige Straßensperren aufgrund von
Unfällen, temporären Baustellen oder Straßenneubauten
berücksichtigen, sollten zur Konsistenzwahrung auf setValue() und
getValue() zurückgreifen, sofern die Daten zwischenzeitlich oder
nach dem Ende des Simulationsmodells im GIS benötigt werden,
gegebenenfalls in Verbindung mit resetCache().
[23] ArcView.executeScript und
Parameterlist.add befinden sich im package
Mobile.GIS.ArcView
[24] Da die Datenstruktur noch nicht
realisiert ist, könnten zur Zeit nur Avenue-Table und und Avenue-Views
referenziert werden.