Links in CAMEO und anderen Tools
Annahmen:
Links werden nur auf einer Seite gespeichert und sind zunächst unidirektional.
Links werden in jedem Werkzeug mit unterschiedlichen Mitteln realisiert, nachfolgend als LinkKonstrukt bezeichnet. Bei CAMEO könnte dies ein Kommentar oder ein Hyperlink sein, in einem anderen Werkzeug vielleicht ein dediziertes Element, das explizit für die Verwaltung von Links verwenden wird. Es muss sicher gestellt sein, dass Links mit einem Element mitwandern bei Kopie, Delete, Merge, Branch, etc.
Links sind Branch/Version spezifisch.
Ein Link kann an einem Element X in der Version A existieren, aber auch am Element X in der Version B nicht existieren.Verwendung eines Werkzeug übergreifenenden Linkindex
Es wird ein Linkindex verwendet, der eine Kopie der in einer Modellversion verfügbaren Links darstellt.
Alle Links aller Versionen und Branches eines Modells müssen im LinkIndex verfügbar gemacht werden.
Die Links im Linkindex sind angereichert durch die Infomationen:
Linktyp
Quellelement ( Name, Typ, ElementVersion(Branch) wo nötig , ModellInformation)
Zielelement ( Name, Typ, ElementVersion(Branch),ModellInformation )
Temporärer Link Information ( Wann erzeugt, wer )
Der Linkindex für ein Modell kann jederzeit neu aus einem vorhandenen Modell erzeugt werden.Einzige Quelle der Linkindex.
Die Verwendung eine Linkindex bringt folgende Vorteile:
- Schnelle Verfügbarkeit über Linkinformationen über alle Modell/Versions/Branches
- Alle am System beteiligen Teilnehmer können den Linkindex als alleinige Quelle betrachten, das der Linkindex immer ein Abbild der Links aller Modelle darstellt.
- Zugriff erfolgt für alle Werkzeuge uniform
- Der Inhalt des Linkindex wird über alle im Kontext beteiligten Systeme aus den Modellen abgeleitetet.
- Dadurch muss keinen Unterscheidung getroffen werden, woher ein Link stammt und ggf unterschiedliche Zugriffsmethoden verwendet werden, um Informationen über einen Link zu erhalten.
-Es müssen keine werkzeugspezifischen Anpassungen gemacht werden.Links werden am Dependend Tool idealerweise am am zu verlinkenden Element mit dem für das Werkzeug vorgesehenen Linkkonstrukt gespeichert.
Die Existenz eines Links hängt direkt von der Existenz des Quellelements ab. Wird ein QuellElement gelöscht, werden auch alle die mit dem Element assoziierten Links gelöscht. Können die Links nicht am Element gespeichert werden, muss dafür gesorgt werden, dass die Links entsprechend nachgepflegt (==entfernt ) werden.
Wird das Zielelement der Links gelöscht, wird der Link nicht gelöscht aber der Link ist dann nicht mehr gültig. Dies muss aber berechnet werden.Links sind dann final gültig, wenn sie im jeweiligen Branch/Version im Werkzeug commited sind.
Temporäre Links
Links können temporär erzeugt werden. Temporäre Links sind Links werden in einem gewissen Zeitraum als gültig angesehen, aber noch nicht persistiert worden sind.
Temporäre Links werden durch eine definierte Aktion entweder in einen persistenten Zustand überführt und sind dann in einem Branch commited, oder sie werden mit einer definierten Aktion ( zeitgesteuert, anderes Event ) wieder entfernt. (LinkFinalizer)
Temporäre Links sind nicht im Modell hinterlegt. Sie werden nur im Linkindex verwaltet. Sie verhalten sich aber transparent zu normalen Links, sie können angelegt, oder gelöscht werden und sind für alle anderen System nicht zu unterscheiden.
Erzeugung von Links
Forward Link Szenario ( z.B. CAMEO Links im geöffneten CAMEO Modell )
Ein CAMEO Element wird mit einem anderen Element verlinkt.
Das Linkkonstrukt eines Links wird direkt im CAMEO erzeugt.
Da das Modell noch nicht commited ist, können jederzeit noch weitere Änderung am Modell vorgenommen werden:
Weitere Links können hinzugefügt, vorhandene Links gelöscht werden.
Damit dies auch für andere Teilnehmer des System transparent ist, werden diese Linkinformationen auch im LinkIndex als temporäre Links hinterlegt. Andere Systeme können diesen Link schon auch dann wahrnehmen, auch wenn der Link selbst noch nicht persistiert ist.
Finalisierung der Links
Es können nun folgende zwei Szenarien auftreten:
Modell wird commited:
Das Modell mit seinen Änderungen wird commited. Durch eine Abgleichoperation LinkFinalizer werden die im commit-eden Modellbranch die neu hinzugekommenen oder entfernten Links detektiert. Neu hinzugekommene Links werden im Links Index persistiert ( entweder ein temporärer Link wird zum persistierten Link umgewandelt ) oder ein bereits vorhandener Link wird aus dem Link Index aus der Branch entfernt.
Modell wird nicht commited:
Modell wird geschlossen, ohne dass die Änderungen committed werden.
Wird nach einer zu definierenden Zeitspanne kein Commit der im Linkindex vorhandenen temporären Links detektiert, werden die temporären Links wieder entfernt.Back Link Szenario
Externes Tool veranlasst die Erzeugung eines Links in einem nicht geöffnete CAMEO Mode
( Codebeamer verlinkt gegen CAMEO Modell)
Alternative 1:
Da nicht direkt in das Modell die Links geschrieben werden können, müssen diese über die TWC in das Modell transferiert werden. Dabei werden dieselbe Linkstrukturen verwendet, so dass später, wenn das Modell in CAMEO geöffnet wird, diesselben LinkKonstrukte für den Link vorgefunden werden.
Damit der Link persistent wird, müssen die Änderungen in der TWC committed werden.
Nach erfolgreichem Commit in der TWC wird auch der Link im LinkIndex als persistenter Link hinterlegt.
Da die Links in der TWC und im Linkindex nahezu zeitgleich als nichttemporärer Link angelegt werden, sind diese von anderen System auch erkennbar.
Vorteil: Die Links werden sofort persistiert.
Nachteil: Jeder neu erzeugte, geänderte oder gelöschte Link würde einen Commit und damit eine neue Version des Modells erzeugen.
Kann nur für die TWC angewendet werden.
Alternative 2: ( LinkStream )
Links werden zunächst im Linkindex als temporäre Links angelegt. Es können mehrere Links an verschiedenen Elementen erzeugt oder auch wieder gelöscht werden. Die Links sind sofort für andere Systembeteiligte sichtbar.
Persistierung der Links
Ähnlich wie in Szenario 1 gibt es einen Abgleichjob LinkFinalizer , der entweder manuell oder in gewissen Zeitintervallen aufgerufen wird. Im Unterschied zu Szenario 1 werden jedoch die temporären Links nun als führend betrachtet:
Es werden die jeweiligen Modelle bestimmt und Version geöffnet, für die ein temporärer Link zuvor erzeugt wurde. Diese Modelle werden geöffnet. Die Links werden im Modell mit den vorgesehenen Linkkonstrukt in das Modell geschrieben und dann das Modell commited.
Die Funktionalität wird sowieso benötigt, das ja im Szenarion 1 diese Funktionalität sowieso benötigt wird.
Vorteil: Es existiert nur ein Commit, bei dem eine Reihe von Links erzeugt oder geändert werden. Zwischenschritte erscheinen hier nicht.
Das Verfahren ist für alle anderen Werkzeuge uniform anzuwenden. Es gibt keine Sonderbehandlung für ein Werkzeug.