Diese Funktionalität ist nur in bestimmten Ausbaustufen verfügbar.

Bild-Register und Bild-Register-Erweiterung

Die neue Systembibliothek MediaSource ermöglicht die flexible Referenzierung von Bildern durch Bild-Register.

Das Bild-Register ist die Zuordnung von Komponenten zu je einem Bild-Objekt für die Bibliothekskomponente und die Projektkomponente (siehe folgende Abbildung). Diese Eigenschaft wird überall dort implementiert, wo Objekte eine grafische Repräsentation erhalten. Die Zuordnung für ein Bild-Objekt der Projektkomponenten ist optional. Wird kein Bild-Objekt festgelegt, verwendet das Register für Komponenten der Bibliotheken und Projekte dieselben Bild-Objekte.

Ein Beispiel für die Verwendung von Bild-Registern ist das Platzieren von Objekten in Diagrammen. Durch Zuweisung der Objektklasse zu einem bestimmten Bild (und der Konfiguration des Diagramms, um das Bild-Register zu verwenden), können damit alle Elemente desselben Typs einem einheitlichen Bild zugewiesen werden. Diese Zuweisung kann auch an zentraler Stelle im Bild-Register verändert werden und gilt dann für alle Diagramme, die dieses Bild-Register verwenden.

Für den Zugriff auf die Zuordnungstabelle eines Bild-Registers wurden der Formelsprache mehrere Methoden hinzugefügt. Analog zu den Bild-Objekten, bietet auch das Bild-Register die Methoden "image" und "disabledImage". Während bei einem Bild-Objekt jedoch kein Parameter benötigt wird, muss beim Bild-Register ein sogenanntes Key-Objekt angegeben werden. Das Register sucht dann in der Zuordnungstabelle nach einem Eintrag für die Klasse des Key-Objekts bzw. für das Key-Objekt selbst, falls dieses bereits ein Klassen-Objekt ist. Kann das Register keine Zuordnung finden, sucht es für den Supertyp der Klasse nach einer Zuordnung. Das wird wiederholt, bis kein weiterer Supertyp vorhanden ist oder ein Bild gefunden wurde. Wird für den obersten Supertyp auch kein Bild gefunden, gibt die Methode <<null>> zurück.

Wird eine Zuordnung gefunden, unterscheidet das Register zwei Fälle: das Key-Objekt stammt aus der Klassenebene oder es stammt aus der Instanzenebene. Trifft ersteres zu, lädt das Register das Bild des zugeordneten Bild-Objekts für die Klassenebene. Ist das Key-Objekt aus der Instanzenebene, prüft das Register, ob die gefundene Zuordnung ein Bild für die Projektkomponente angibt. Trifft das zu, wird das Bild des dort zugeordneten Bild-Objekts geladen. Andernfalls wird das Bild-Objekt der Bibliothekskomponente verwendet.

Problem:

Da die Bild-Register in Bibliotheken liegen, kann es in komplexeren Modellen vorkommen, dass eine Änderung an einem Bild-Register nicht möglich, nicht erwünscht oder nicht sinnvoll ist. Möglicherweise können einzelne Bilder nicht eindeutig belegt werden, was ein zentrales Bild-Register unmöglich machen würde. Wenn davon aber nur ein Teil der Bilder betroffen ist, müsste der Gleichanteil der zugewiesenen Bilder mehrfach eingegeben und gepflegt werden.

Lösung:

Mit Hilfe von Bild-Register-Erweiterungen können die Zuordnungstabelle von Registern dynamisch erweitert werden (siehe folgende Abbildung).

Um ein Register zu erweitern, wird eine neue Bild-Register-Erweiterung angelegt. Die Erweiterung erlaubt dieselbe Zuweisung von Klassen zu Bild-Objekten, wie auch schon das Bild-Register. Im Editor für die Erweiterung wird das Register ausgewählt, das erweitert werden soll. Damit werden alle Einträge in der Zuordnungstabelle der Register-Erweiterung denen des Registers zugeordnet. Bemerkbar macht sich eine Erweiterung bei der Auswertung einer Bildanfrage für eine Klasse.

Die Auswertung sucht nun nicht mehr nur in dem Bild-Register, sondern prüft zuerst die Zuordnungstabellen der Register-Erweiterungen. Wird beim Durchsuchen der Erweiterungen ein Bild gefunden, wird dieses verwendet. Definiert keine der Erweiterungen ein Bild, wird im Bild-Register selbst gesucht. Aus dieser Reihenfolge ergibt sich die Möglichkeit, mittels Erweiterungen die Zuordnungen des Bild-Registers zu überschreiben.

Diese Funktionalität liegt vollständig im Bild-Register. Auch bei der Verwendung von Register-Erweiterungen werden alle Anfragen an das Register gerichtet. Das Bild-Register durchsucht vorhandene Erweiterungen selbständig. Eine weitere Unterscheidung in den Formeln ist nicht notwendig.

Bei komplexeren Modellen kann es vorkommen, dass ein Register durch mehrere Register-Erweiterungen erweitert wird. Diese Erweiterungen können in unterschiedlichen Bibliotheken liegen. Wird nun in einem Projekt nach einer Zuordnung gesucht, darf das Register nicht jede einzelne Erweiterung durchsuchen. Das Projekt importiert möglicherweise nicht jede der Bibliotheken, in denen eine Erweiterung zum Register enthalten ist. Aus Sicht des Projekts ist die Anfrage also so zu behandeln, als würden die nicht-sichtbaren Erweiterungen nicht existieren.

Das Schlüsselobjekt dient dem Register hierbei als Orientierung. Das Register prüft, welche Bibliotheken vom Schlüsselobjekt aus sichtbar sind. Alle Erweiterungen, welche in Bibliotheken außerhalb dieses Sichtbereichs liegen, werden für die Anfrage ignoriert.

Je nachdem von wo das Schlüssel-Objekt nun stammt, ergibt sich jedoch ein zu stark eingeschränkter Sichtbereich. Stammt das Schlüssel-Objekt aus einer Baukasten-Bibliothek, sind Register-Erweiterungen aus der Projekt-Bibliothek nicht sichtbar. In solchen Fällen kann eine erweiterte image- bzw. disabledImage-Methode verwendet werden. Diese übernimmt zwei Parameter. Der erste Parameter ist dabei ein "Kontext-Objekt", der zweite Parameter das bereits bekannte Schlüssel-Objekt. Stammt der Schlüssel also aus einer importierten Bibliothek, kann ein Kontext-Objekt zur Bestimmung der in sichtbaren Bibliotheken liegenden Erweiterungen übergeben werden.

Sonderfall:

Kommen beim Durchsuchen der Erweiterungen mehrere für eine Zuweisung in Frage, wird die Import-Reihenfolge in der Kontext-Bibliothek / dem Kontext-Projekt verwendet. Liegen zwei Erweiterungen in derselben Bibliothek und definieren für dasselbe Objekt unterschiedliche Bilder, ist es Zufall welcher der Einträge verwendet wird. Die Erweiterungen innerhalb der Bibliothek werden im Datenmodell in unsortierter Reihenfolge gespeichert. Eine solche unscharfe Zuweisung löst bei der Modellvalidierung keinen Fehler aus, kann aber zur Laufzeit nicht unmittelbar nachvollziehbares Verhalten aufweisen.

Bild-Register neu erstellen:

Um ein neues Bild-Register in die Bibliothek einzufügen ist im Kontextmenü Neu > Medienquellen > Bild-Register auszuwählen.

Das neue Bild-Register wird zunächst ohne Daten angelegt. Auf der Seite Bildzuweisung des Editors (siehe folgende Abbildung) sind dann für einen Objekttyp (1) die Bilder für die Bibliothekskomponente (2) und die Projektkomponente (3) auszuwählen:

Bild-Register-Erweiterung neu anlegen:

Mit einer Bild-Register-Erweiterung kann ein Bild-Register erweitert werden. Um eine neue Bild-Register-Erweiterung zu implementieren ist im Kontextmenü Neu > Medienquellen > Bild-Register-Erweiterung (New > Media sources > Image register extension) auszuwählen.

Auf der Seite Attribute (Attributes) ist das Bild-Register zu wählen, welches zu erweitern ist:

Auf der Seite Bildzuweisung (Image assignment) sind dann für einen Objekttyp (1) die Bilder für die Bibliothekskomponente (2) und die Projektkomponente (3) auszuwählen.