blob: 33729225ad9bc44e22333a66159af1f9f5ca1c7c [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Bookmarks and hyperlinks generation</title>
<link rel="stylesheet" type="text/css" href="userguide.css">
</head>
<body>
<h2>Bookmarks and hyperlinks generation</h2>
<p>The complexity of generating bookmarks and hyperlinks in an output document is the
dynamicity of both bookmarks and hyperlinks.</p>
<p>The idea is to find a generated or not unique ID that will link source (hyperlink)
and target (bookmark) location in the document.</p>
<p>The following example shows how to create dynamic bookmarks and hyperlinks in templates
for a UML model containing classes, with references to other classes inside attributes.</p>
<table width="688" class="sample">
<tbody>
<tr class="heading">
<td colspan="2" width="430">
<p><strong>Template content</strong></p>
</td>
<td width="257">
<p><strong>Output details</strong></p>
</td>
</tr>
<tr>
<td width="16" class="heading">
<p class="vertical" style="height:120px;"><strong>Step1</strong></p>
</td>
<td width="394">
<p><strong>Display classes and their attributes and types :</strong></p>
<p class="code">&lt;context model=&rsquo;${project_loc}/Models/TrafficLightManager.uml&rsquo; element='TrafficLightManager/LogicalView'/&gt;<br/>
&lt;gendoc&gt;&lt;drop/&gt;<br/>
&emsp;[for (c:Class|self.ownedElement-&gt;filter(Class)-&gt;sortedBy(name))]</p>
<p class="blue">[c.name/]</p>
<p class="code">&emsp;&emsp;[for (a:Property|c.ownedAttribute-&gt;filter(NamedElement)-&gt;sortedBy(name))]</p>
<p><strong>-[a.name/]</strong>: [a.type.name/]</p>
<p class="code">&emsp;&emsp;[/for]<br/>
&emsp;[/for]<br/>
&lt;/gendoc&gt;<br/>
</td>
<td width="257">
<p class="blue">TrafficLight</p>
<p>-<strong>green fire</strong>: GreenFire</p>
<p>-<strong>orange fire</strong>: OrangeFire</p>
<p>-<strong>red fire</strong>: RedFire</p>
<p class="blue">GreenFire</p>
<p class="blue">OrangeFire</p>
<p class="blue">RedFire</p>
</td>
</tr>
<tr>
<td width="16" class="heading">
<p class="vertical" style="height:120px;"><strong>Step2</strong></p>
</td>
<td width="394">
<p><strong>Add a (static) bookmark on the class name :</strong></p>
<p class="code">&lt;context model=&rsquo;${project_loc}/Models/TrafficLightManager.uml&rsquo; element='TrafficLightManager/LogicalView'/&gt;<br/>
&lt;gendoc&gt;&lt;drop/&gt;<br/>
&emsp;[for (c:Class|self.ownedElement-&gt;filter(Class)-&gt;sortedBy(name))]</p>
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">[c.name/]</span> Add a bookmark :</p>
<ul class="dashed">
<li>On MS Word: <img src="img/word_bookmark_ico.png"/> Insert &gt; Links &gt; Bookmark</li>
<li>On OpenOffice / LibreOffice Writer : <img src="img/ooffice_bookmark_ico1.png"/> / <img src="img/loffice_bookmark_ico2.png"/> Insert &gt; Bookmark</li>
</ul>
<p>Name of the bookmark (must be unique in document) : <br/>
<span class="code">&emsp;c_name_bookmark</span></p>
</div>
<p class="code">&emsp;&emsp;[for (a:Property|c.ownedAttribute-&gt;filter(NamedElement)-&gt;sortedBy(name))]</p>
<p>-<strong>[a.name/]</strong>: [a.type.name/]</p>
<p class="code">&emsp;&emsp;[/for]<br/>
&emsp;[/for]<br/>
&lt;/gendoc&gt;</p>
</td>
<td width="257">
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">TrafficLight</span><br/>
bookmark <span style="color:black;">c_name_bookmark</span></p>
</div>
<p>-<strong>green fire</strong>: GreenFire</p>
<p>-<strong>orange fire</strong>: OrangeFire</p>
<p>-<strong>red fire</strong>: RedFire</p>
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">GreenFire</span><br/>
bookmark <span style="color:black;">c_name_bookmark</span></p>
</div>
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">OrangeFire</span><br/>
bookmark <span style="color:black;">c_name_bookmark</span></p>
</div>
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">RedFire</span><br/>
bookmark <span style="color:black;">c_name_bookmark</span></p>
</div>
</td>
</tr>
<tr>
<td width="16" class="heading">
<p class="vertical" style="height:120px;"><strong>Step3</strong></p>
</td>
<td width="434">
<p><strong>Add dynamicity on the bookmark :</strong></p>
<p>Indicate in a dedicated tag on top of document how to generate a dynamic ID at bookmark location to make bookmark become dynamic.</p>
<p>What will the bookmark point to : class c</p>
<p>How to generate a unique Id for class c : use <a href="bundles_common.html#_Commons">service getId() from bundle commons</a>.</p>
<p class="code">&lt;context model=&rsquo;${project_loc}/Models/TrafficLightManager.uml&rsquo; element='TrafficLightManager/LogicalView'/&gt;</p>
<p class="code lgbluebk blue">
&lt;bookmarks&gt;<br/>
&emsp;&lt;alias source=&rsquo;c_name_bookmark&rsquo; target=&rsquo;[c.getId()/]&rsquo;/&gt;<br/>
&lt;/bookmarks&gt;
</p>
<p class="code">&lt;gendoc&gt;&lt;drop/&gt;<br/>
&emsp;[for (c:Class|self.ownedElement-&gt;filter(Class)-&gt;sortedBy(name))]</p>
<p class="lgbluebk blue"><strong>[c.name/] Bookmark named :</strong><span class="code">c_name_bookmark</span></p>
<p class="code">&emsp;&emsp;[for (a:Property|c.ownedAttribute-&gt;filter(NamedElement)-&gt;sortedBy(name))]</p>
<p>-<strong>[a.name/]</strong>: [a.type.name/]</p>
<p class="code">
&emsp;&emsp;[/for]<br/>
&emsp;[/for]</br>
&lt;/gendoc&gt;
</p>
</td>
<td width="217">
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">TrafficLight</span><br/>
bookmark TrafficLight class ID</p>
</div>
<p>-<strong>green fire</strong>: GreenFire</p>
<p>-<strong>orange fire</strong>: OrangeFire</p>
<p>-<strong>red fire</strong>: RedFire</p>
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">GreenFire</span><br/>
bookmark GreenFire class ID</p>
</div>
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">OrangeFire</span><br/>
bookmark OrangeFire class ID</p>
</div>
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">RedFire</span><br/>
bookmark RedFire class ID</p>
</div>
</td>
</tr>
<tr>
<td width="16" class="heading">
<p class="vertical" style="height:120px;"><strong>Step4</strong></p>
</td>
<td width="434">
<p><strong>Add hyperlinks to the (future) bookmark location : </strong></p>
<p>The hyperlink must also be dynamic and point to the future bookmark location, here the
generated unique ID for the class.</p>
<p>So the hyperlink must no point on c_name_bookmark (it would be replaced by
<span class="code">c.getId()</span> and point to current class), but to the
id of the property type class: <span class="code">a.type.getId()</span>.</p>
<p class="code">
&lt;context model=&rsquo;${project_loc}/Models/TrafficLightManager.uml&rsquo;
element='TrafficLightManager/LogicalView'/&gt;<br/>
&lt;bookmarks&gt;<br/>
&emsp;&lt;alias source=&rsquo;c_name_bookmark&rsquo; target=&rsquo;[c.getId()/]&rsquo;/&gt;<br/>
&lt;/bookmarks&gt;<br/>
&lt;gendoc&gt;&lt;drop/&gt;<br/>
&emsp;[for (c:Class|self.ownedElement-&gt;filter(Class)-&gt;sortedBy(name))]</p>
<p class="lgbluebk blue">
<strong>&emsp;&emsp;[c.name/] Bookmark named : <span style="color:black;">c_name_bookmark</span></strong><br/>
</p>
<p class="code">
&emsp;&emsp;[for (a:Property|c.ownedAttribute-&gt;filter(NamedElement)-&gt;sortedBy(name))]</p>
<p>
&emsp;&emsp;-<strong>[a.name/]</strong>: [a.type.name/]
</p>
<p class="lgbluebk blue"><strong>&emsp;&emsp;&emsp;&emsp;Add an hyperlink (Insert &gt; Hyperlink &hellip; )<br/>
&emsp;&emsp;&emsp;&emsp;to the ID of the property type : #[<span class="code">a.type.getId()</span>/]</strong></p>
<p class="code">
&emsp;&emsp;[/for]<br/>
&emsp;[/for]<br/>
&lt;/gendoc&gt;
</p>
</td>
<td width="217">
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">TrafficLight</span><br/>
bookmark TrafficLight class ID</p>
<p style="margin-left:0.5cm;">-<strong>green fire</strong>: <span class="turqhl">GreenFire</span><br />
hyperlink <br />
to GreenFire class ID</p>
<p style="margin-left:0.5cm;">-<strong>orange fire</strong>: <span class="turqhl">OrangeFire</span><br />
hyperlink <br />
to GreenFire class ID</p>
<p style="margin-left:0.5cm;">-<strong>red fire</strong>: <span class="turqhl">RedFire</span><br/>
hyperlink <br />
to GreenFire class ID</p>
</div>
<div class="lgbluebk blue">
<p>&emsp;<span class="turqhl">GreenFire</span><br/>
bookmark GreenFire class ID</p>
</div>
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">OrangeFire</span><br/>
bookmark OrangeFire class ID</p>
</div>
<div class="lgbluebk blue">
<p>&emsp;<span class="bluehl">RedFire</span><br/>
bookmark RedFire class ID</p>
</div>
</td>
</tr>
<tr>
<td width="16" class="heading">
<p class="vertical" style="height:120px;"><strong>Final output</strong></p>
</td>
<td colspan="2" width="652">
<p><a name="_QE7VYFI4EeGqaIKQSWhWfA"/><strong>GreenFire</strong></p>
<p><a name="_RNDbEFI4EeGqaIKQSWhWfA"/><strong>OrangeFire</strong></p>
<p><a name="_OTFkUFI4EeGqaIKQSWhWfA"/><strong>RedFire</strong></p>
<p><strong>TrafficLight</strong></p>
<p>- <strong>green fire</strong>: <a href="#_QE7VYFI4EeGqaIKQSWhWfA">GreenFire</a></p>
<p>- <strong>orange fire</strong>: <a href="#_RNDbEFI4EeGqaIKQSWhWfA">OrangeFire</a></p>
<p>- <strong>red fire</strong>: <a href="#_OTFkUFI4EeGqaIKQSWhWfA">RedFire</a></p>
</td>
</tr>
</tbody>
</table>
</body>
</html>