| <html xmlns:v="urn:schemas-microsoft-com:vml" |
| xmlns:o="urn:schemas-microsoft-com:office:office" |
| xmlns:w="urn:schemas-microsoft-com:office:word" |
| xmlns:st1="urn:schemas-microsoft-com:office:smarttags" |
| xmlns="http://www.w3.org/TR/REC-html40"> |
| |
| <head> |
| <meta http-equiv="Content-Type" |
| content="text/html; charset=iso-8859-1" /> |
| |
| <!--[if !mso]> |
| <style> |
| v\:* {behavior:url(#default#VML);} |
| o\:* {behavior:url(#default#VML);} |
| w\:* {behavior:url(#default#VML);} |
| .shape {behavior:url(#default#VML);} |
| </style> |
| <![endif]--> |
| <title>Tutorial: Canonical Containers</title> |
| <o:SmartTagType namespaceuri="urn:schemas-microsoft-com:office:smarttags" |
| name="date"/> |
| <!--[if gte mso 9]><xml> |
| <w:WordDocument> |
| <w:Zoom>120</w:Zoom> |
| <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> |
| </w:WordDocument> |
| </xml><![endif]--><!--[if !mso]><object |
| classid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui></object> |
| <style> |
| st1\:*{behavior:url(#ieooui) } |
| </style> |
| <![endif]--> |
| <style> |
| <!-- |
| /* Style Definitions */ |
| p.MsoNormal, li.MsoNormal, div.MsoNormal |
| {mso-style-parent:""; |
| margin:0in; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| font-size:12.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman";} |
| h1 |
| {mso-margin-top-alt:auto; |
| margin-right:0in; |
| mso-margin-bottom-alt:auto; |
| margin-left:0in; |
| mso-pagination:widow-orphan; |
| mso-outline-level:1; |
| font-size:24.0pt; |
| font-family:"Times New Roman"; |
| font-weight:bold;} |
| h2 |
| {mso-margin-top-alt:auto; |
| margin-right:0in; |
| mso-margin-bottom-alt:auto; |
| margin-left:0in; |
| mso-pagination:widow-orphan; |
| mso-outline-level:2; |
| font-size:18.0pt; |
| font-family:"Times New Roman"; |
| font-weight:bold;} |
| h3 |
| {mso-margin-top-alt:auto; |
| margin-right:0in; |
| mso-margin-bottom-alt:auto; |
| margin-left:0in; |
| mso-pagination:widow-orphan; |
| mso-outline-level:3; |
| font-size:13.5pt; |
| font-family:"Times New Roman"; |
| font-weight:bold; |
| font-style:italic;} |
| a:link, span.MsoHyperlink |
| {color:blue; |
| text-decoration:underline; |
| text-underline:single;} |
| a:visited, span.MsoHyperlinkFollowed |
| {color:purple; |
| text-decoration:underline; |
| text-underline:single;} |
| p |
| {mso-margin-top-alt:auto; |
| margin-right:0in; |
| mso-margin-bottom-alt:auto; |
| margin-left:0in; |
| mso-pagination:widow-orphan; |
| font-size:12.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman";} |
| pre |
| {margin-top:0in; |
| margin-right:0in; |
| margin-bottom:0in; |
| margin-left:24.0pt; |
| margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt; |
| font-size:10.0pt; |
| font-family:"Courier New"; |
| mso-fareast-font-family:"Times New Roman";} |
| p.backto, li.backto, div.backto |
| {mso-style-name:backto; |
| mso-margin-top-alt:auto; |
| margin-right:0in; |
| mso-margin-bottom-alt:auto; |
| margin-left:0in; |
| mso-pagination:widow-orphan; |
| font-size:12.0pt; |
| font-family:"Times New Roman"; |
| mso-fareast-font-family:"Times New Roman";} |
| @page Section1 |
| {size:8.5in 11.0in; |
| margin:1.0in 1.25in 1.0in 1.25in; |
| mso-header-margin:.5in; |
| mso-footer-margin:.5in; |
| mso-paper-source:0;} |
| div.Section1 |
| {page:Section1;} |
| /* List Definitions */ |
| @list l0 |
| {mso-list-id:820735517; |
| mso-list-template-ids:1034076076;} |
| @list l0:level1 |
| {mso-level-tab-stop:.5in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| @list l1 |
| {mso-list-id:1570965290; |
| mso-list-template-ids:-145727390;} |
| @list l1:level1 |
| {mso-level-tab-stop:.5in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| @list l1:level2 |
| {mso-level-tab-stop:1.0in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| @list l1:level3 |
| {mso-level-tab-stop:1.5in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| @list l1:level4 |
| {mso-level-tab-stop:2.0in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| @list l1:level5 |
| {mso-level-tab-stop:2.5in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| @list l1:level6 |
| {mso-level-tab-stop:3.0in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| @list l1:level7 |
| {mso-level-tab-stop:3.5in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| @list l1:level8 |
| {mso-level-tab-stop:4.0in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| @list l1:level9 |
| {mso-level-tab-stop:4.5in; |
| mso-level-number-position:left; |
| text-indent:-.25in;} |
| ol |
| {margin-bottom:0in;} |
| ul |
| {margin-bottom:0in;} |
| --> |
| </style> |
| <!--[if gte mso 10]> |
| <style> |
| /* Style Definitions */ |
| table.MsoNormalTable |
| {mso-style-name:"Table Normal"; |
| mso-tstyle-rowband-size:0; |
| mso-tstyle-colband-size:0; |
| mso-style-noshow:yes; |
| mso-style-parent:""; |
| mso-padding-alt:0in 5.4pt 0in 5.4pt; |
| mso-para-margin:0in; |
| mso-para-margin-bottom:.0001pt; |
| mso-pagination:widow-orphan; |
| font-size:10.0pt; |
| font-family:"Times New Roman";} |
| </style> |
| <![endif]--> |
| </head> |
| |
| <body lang=EN-US link=blue vlink=purple style='tab-interval:.5in'> |
| |
| <div class=Section1> |
| |
| <p class=MsoNormal><img id="_x0000_i1025" src="../../logo.gif"></p> |
| |
| <h1 align=center style='text-align:center'>Tutorial: Canonical Containers</h1> |
| |
| <table class=MsoNormalTable border=0 cellspacing=8 cellpadding=0 |
| style='mso-cellspacing:6.0pt;margin-left:24.0pt;mso-padding-alt:0in 0in 0in 0in'> |
| <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes'> |
| <td style='padding:.75pt .75pt .75pt .75pt'> |
| <p class=MsoNormal>Version: 0.1</p> |
| </td> |
| <td style='padding:.75pt .75pt .75pt .75pt'> |
| <p class=MsoNormal>Date: <st1:date Year="2005" Day="16" Month="12">December |
| 16, 2005</st1:date></p> |
| </td> |
| </tr> |
| </table> |
| |
| <h2>Contents</h2> |
| |
| <p class=MsoNormal style='margin-left:48.0pt;text-indent:-.25in'><span |
| style='font-size:10.0pt;font-family:Symbol'>·</span><span style='font-size: |
| 7.0pt'> </span><a |
| href="#_Overview">Overview</a></p> |
| |
| <p class=MsoNormal style='margin-left:48.0pt;text-indent:-.25in'><span |
| style='font-size:10.0pt;font-family:Symbol'>·</span><span style='font-size: |
| 7.0pt'> </span><a |
| href="#_References">References</a></p> |
| |
| <p class=MsoNormal style='margin-left:48.0pt;text-indent:-.25in'><span |
| style='font-size:10.0pt;font-family:Symbol'>·</span><span style='font-size: |
| 7.0pt'> </span><a |
| href="#_Introduction">Introduction</a></p> |
| |
| <p class=MsoNormal style='margin-left:48.0pt;text-indent:-.25in'><span |
| style='font-size:10.0pt;font-family:Symbol'>·</span><span style='font-size: |
| 7.0pt'> </span><a href="#_Installing_canonical_behavior_on_a_">Installing |
| canonical behavior on a container</a></p> |
| |
| <p class=MsoNormal style='margin-left:48.0pt;text-indent:-.25in'><span |
| style='font-size:10.0pt;font-family:Symbol'>·</span><span style='font-size: |
| 7.0pt'> </span><a href="#_Ability_to_toggle_canonical_behavio">Ability to |
| toggle canonical behavior on or off</a></p> |
| |
| <p class=MsoNormal style='margin-left:48.0pt;text-indent:-.25in'><span |
| style='font-size:10.0pt;font-family:Symbol'>·</span><span style='font-size: |
| 7.0pt'> </span><a href="#_Creating_an_EditPart_that_points_di">Creating an EditPart |
| that points directly to a semantic element</a> </p> |
| |
| <p class=MsoNormal style='margin-left:48.0pt;text-indent:-.25in'><span |
| style='font-size:10.0pt;font-family:Symbol'>·</span><span style='font-size: |
| 7.0pt'> </span><a |
| href="#summary">Summary</a></p> |
| |
| <div class=MsoNormal align=center style='text-align:center'> |
| |
| <hr size=2 width="100%" align=center> |
| |
| </div> |
| |
| <h2><a name="_Overview"></a>Overview</h2> |
| |
| <p class=backto><span style='font-size:10.0pt'>[<a href="#top">back to top</a>]</span></p> |
| |
| <p>This tutorial provides the reader with the steps to on how to support |
| canonical behavior with-in a container. Canonical is the terminology we |
| use to describe a container that keeps its view of the semantic data |
| synchronized with the semantic children.<span style='mso-spacerun:yes'> |
| </span>This means there is a complete view of all the semantic data which |
| typically means a 1-1 relationship between the views and the underlying |
| semantic objects.<span style='mso-spacerun:yes'> </span>This behavior is |
| necessary because in GMF there are two model layers, one for describing the |
| notation elements on the diagram and another for the semantic model that the |
| notation elements will reference. Please see the <a |
| href="../../prog-guide/runtime/index.html">Programmers |
| guide</a> for more detailed information regarding GMF runtime |
| architecture. Due to this two tiered model architecture there is need for |
| management between the two layers if the user wants to see a full view of the |
| semantic containment without having to manually create notation views for |
| underlying semantic elements.</p> |
| |
| <p>This behavior is also optionally installable since sometimes it may be |
| desirable to see a partial view of the semantic model. If we consider a |
| UML class diagram, the user will typically only be interested in a subsection |
| of a system rather then the whole system (or even the whole contents of a |
| package). In this case, the user will want to selectively create views to |
| construct their diagram and probably wouldnt want views being automatically |
| created on the diagram when added semantically. </p> |
| |
| <p>On the other hand, if we consider a logic circuit, it doesnt make sense to |
| view the semantics partially. All the elements in the circuit play a |
| critical role in the functionality of the circuit that would be misleading if |
| some semantic element wasnt displayed. In this case, we want to ensure |
| that notation views are synchronized automatically with the semantic elements |
| to display a full view.</p> |
| |
| <div class=MsoNormal align=center style='text-align:center'> |
| |
| <hr size=2 width="100%" align=center> |
| |
| </div> |
| |
| <h2><a name="_References"></a>References</h2> |
| |
| <p class=backto><span style='font-size:10.0pt'>[<a href="#top">back to top</a>]</span></p> |
| |
| <p style='margin:0in;margin-bottom:.0001pt'>This tutorial references the |
| following:<br> |
| <a |
| href="../../prog-guide/runtime/index.html">Programmers |
| Guide</a></p> |
| |
| <p style='margin:0in;margin-bottom:.0001pt'><a |
| href="../../examples-guide/diagram/logicExample.html">Logic |
| Example Guide</a><br> |
| <a |
| href="containmentOfShapes.html">Containment |
| of Shapes</a></p> |
| |
| <p style='margin:0in;margin-bottom:.0001pt'><o:p> </o:p></p> |
| |
| <div class=MsoNormal align=center style='text-align:center'> |
| |
| <hr size=2 width="100%" align=center> |
| |
| </div> |
| |
| <p class=MsoNormal align=center style='text-align:center'> </p> |
| |
| <h2><a name="_Introduction"></a>Introduction</h2> |
| |
| <p class=backto><span style='font-size:10.0pt'>[<a href="#top">back to top</a>]</span></p> |
| |
| <p>In this tutorial, we will use the Logic Diagram Example to illustrate how to |
| install a canonical edit policy on a circuit shape that can contain other logic |
| elements (i.e. LED, And Gate etc.). To gain familiarity with the Logic Diagram |
| Example, refer to the <a |
| href="../../examples-guide/diagram/logicExample.html">Logic |
| Example Guide</a>. </p> |
| |
| <div class=MsoNormal align=center style='text-align:center'> |
| |
| <hr size=2 width="100%" align=center> |
| |
| </div> |
| |
| <p class=MsoNormal align=center style='text-align:center'> </p> |
| |
| <h2><a name="_Step1"></a><a name="_Toc104273255"></a><a |
| name="_Installing_canonical_behavior_on_a_"></a>Installing canonical behavior |
| on a container</h2> |
| |
| <p class=backto><a name="_Toc104273256"><span style='font-size:10.0pt'>[</span></a><a |
| href="#top"><span style='font-size:10.0pt'>back to top</span></a><span |
| style='font-size:10.0pt'>]</span></p> |
| |
| <p>The first way of instrumenting the canonical behavior is to install an |
| EditPolicy that manages the behavior on the EditPart container. There are |
| two main classes in the Canonical EditPolicy hierarchy that can be used as a |
| base class. The CanonicalEditPolicy is the root class, but can be |
| subclassed by clients if they are not interested in synchronizing |
| relationships. If nodes and edges need to be synchronized, then the |
| CanonicalConnectionEditPolicy should be used as a base class.</p> |
| |
| <p class=MsoNormal><i>Canonical EditPolicy usage:</i></p> |
| |
| <p class=MsoNormal><img border=0 width=459 height=537 id="_x0000_i1030" |
| src=canonicalEditPolicy.gif></p> |
| |
| <p class=MsoNormal> </p> |
| |
| <p class=MsoNormal>For the purposes of this tutorial we will consider a |
| container that needs to synchronize both the semantic elements and |
| relationships. In the logic example, the CircuitEditPart has a shape |
| compartment that needs to keep its view contents in sync with the semantic |
| logic elements. Since both logic elements and wires are displayed we will |
| subclass from the CanonicalConnectionEditPolicy to accomplish this.</p> |
| |
| <p class=MsoNormal> </p> |
| |
| <p>Example: Circuit Shape displaying containment<br> |
| <img border=0 width=237 height=275 id="_x0000_i1031" src=circuitContainer.gif></p> |
| |
| <p class=MsoNormal><b>Step 1:</b> Create new CanonicalConnectionEditPolicy |
| subclass. Upon creation of the class youll notice that there are 4 |
| abstract methods that need to be filled in.</p> |
| |
| <p class=MsoNormal><o:p> </o:p></p> |
| |
| <div style='border:solid windowtext 1.0pt;mso-border-alt:solid windowtext .75pt; |
| padding:4.0pt 0in 4.0pt 0in;margin-left:.5in;margin-right:34.0pt'><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><o:p> </o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>protected List getSemanticChildrenList() {<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// return the list of semantic elements that are to be synchronized with the <span style='mso-spacerun:yes'> </span><span style='mso-spacerun:yes'> </span><o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// notation node children of the container.<span |
| style='mso-tab-count:1'> </span><o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>
<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>}<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><o:p> </o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>protected List getSemanticConnectionsList() {<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// return the list of relationships or semantic elements that are to be<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// synchronized with the notation edges associated with the container<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>
<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>}<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><o:p> </o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>protected EObject getTargetElement(EObject relationship) {<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// given a semantic element that is to be represented as a notation edge<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// in the container, return the target element that this semantic element<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// is attached to.<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>
<span style='mso-tab-count:1'> </span><o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>}<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span><o:p></o:p></span></pre><pre style='margin-left: |
| 0in;border:none;mso-border-alt:solid windowtext .75pt;padding:0in;mso-padding-alt: |
| 4.0pt 0in 4.0pt 0in'><span style='color:navy'>protected EObject getSourceElement(EObject relationship) {<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// given a semantic element that is to be represented as a notation edge<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// in the container, return the source element that this semantic element<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// is attached to.<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>
<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>}<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><o:p> </o:p></pre></div> |
| |
| <p class=MsoNormal><o:p> </o:p></p> |
| |
| <p class=MsoNormal>After overriding these 4 methods, the EditPolicy is ready to |
| be installed. For more custom behavior, you may wish to override the |
| CanonicalEditPolicy#shouldDeleteView method which determines if a particular |
| view should be deleted if it has an element that doesnt meet the canonical |
| criteria. This method is called, when the CanonicalEditPolicy determines |
| that the view is an orphan, meaning it has no semantic element, it is a |
| duplicate of another view, or the reference semantic element is not found in |
| the CanonicalEditPolicy#getSemanticChildrenList.</p> |
| |
| <p class=MsoNormal> </p> |
| |
| <p class=MsoNormal><b>Step 2:</b> Add any listeners to your semantic |
| model if needed. By default, the edit policy is listening to the semantic |
| element who owns the view which has the edit policy installed on it. If |
| you container is more complex you may need to add additional listeners to |
| ensure that synchronization occurs at the right time. The listeners |
| should be added in the EditPolicy#activate method, and removed in the |
| corresponding EditPolicy#deactivate method. Refer to the following |
| methods for adding / removing listeners: CanonicalEditPolicy#addListenerFilter |
| and CanonicalEditPolicy#removeListenerFilter</p> |
| |
| <p class=MsoNormal> </p> |
| |
| <p class=MsoNormal><b>Step 3:</b> To activate your EditPolicy you need to |
| install it on your EditPart container against the |
| EditPolicyRoles.CANONICAL_ROLE. </p> |
| |
| <p class=MsoNormal> </p> |
| |
| <p class=MsoNormal><o:p> </o:p></p> |
| |
| <div style='border:solid windowtext 1.0pt;mso-border-alt:solid windowtext .75pt; |
| padding:4.0pt 0in 4.0pt 0in;margin-left:.5in;margin-right:34.0pt'><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// install the custom EditPolicy for the CANONICAL_ROLE<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><o:p> </o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='font-size:9.0pt'>protected void createDefaultEditPolicies() {<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='font-size:9.0pt'><span |
| style='mso-tab-count:2'> </span>super.createDefaultEditPolicies();<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='font-size:9.0pt'><span |
| style='mso-tab-count:2'> </span>installEditPolicy(EditPolicyRoles.CANONICAL_ROLE, new CircuitCompartmentCanonicalEditPolicy());<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='font-size:9.0pt'>}<o:p></o:p></span></pre></div> |
| |
| <p class=MsoNormal><o:p> </o:p></p> |
| |
| <p class=MsoNormal><span style='font-size:8.0pt;font-family:"Courier New"'> </span></p> |
| |
| <div class=MsoNormal align=center style='text-align:center'> |
| |
| <hr size=2 width="100%" align=center> |
| |
| </div> |
| |
| <p class=MsoNormal align=center style='text-align:center'> </p> |
| |
| <h2><a name="_Ability_to_toggle_canonical_behavio"></a>Ability to toggle |
| canonical behavior on or off</h2> |
| |
| <p class=backto><span style='font-size:10.0pt'>[</span><a href="#top"><span |
| style='font-size:10.0pt'>back to top</span></a><span style='font-size:10.0pt'>]</span></p> |
| |
| <p>It could be that the container needs to optionally support the canonical |
| synchronization. In this case the edit policy described above needs to be |
| disabled or deactivated. This capability is built into the |
| infrastructure, but requires the client to install a style that is a trigger |
| for turning on / off the canonical behavior.</p> |
| |
| <p>The CanonicalStyle is a style on a view that indicates whether or not the<br> |
| Canonical editpolicy behavior is active or not. If the style property is<br> |
| turned off, then the CanonicalEditPolicy listens and automatically will no<br> |
| longer synchronize the semantic model and create / delete notation views<br> |
| accordingly.</p> |
| |
| <p>To install the CanonicalStyle on your notation view that is to support the |
| canonical behavior, you need to override the AbstractViewFactory#createStyles |
| method in your View factory class.</p> |
| |
| <p class=MsoNormal><o:p> </o:p></p> |
| |
| <div style='border:solid windowtext 1.0pt;mso-border-alt:solid windowtext .75pt; |
| padding:4.0pt 0in 4.0pt 0in;margin-left:.5in;margin-right:34.0pt'><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// create the canonical style and add it the view on creation<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><o:p> </o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='font-size:9.0pt'>protected List createStyles(View view) {<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='font-size:9.0pt'><span |
| style='mso-tab-count:2'> </span>List styles = super.createStyles(view);<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='font-size:9.0pt'><span |
| style='mso-tab-count:2'> </span>Styles.add(NotationFactory.eINSTANCE.createCanonicalStyle());<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='font-size:9.0pt'><span |
| style='mso-tab-count:2'> </span>Return styles;<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='font-size:9.0pt'>}<o:p></o:p></span></pre></div> |
| |
| <p style='margin:0in;margin-bottom:.0001pt'><o:p> </o:p></p> |
| |
| <p class=MsoNormal>After the style is installed, it is exposed in the UI |
| through the advanced tab where the user can toggle the capability on or off and |
| the CanonicalEditPolicy that is installed on the shape responds accordingly.</p> |
| |
| <p class=MsoNormal> </p> |
| |
| <div class=MsoNormal align=center style='text-align:center'><a |
| name="_Toc104273261"></a> |
| |
| <hr size=2 width="100%" align=center> |
| |
| </div> |
| |
| <h2><a name="_Creating_an_EditPart_that_points_di"></a>Creating an EditPart |
| that points directly to a semantic element</h2> |
| |
| <p class=backto><span style='font-size:10.0pt'>[<a href="#top">back to top</a>]</span></p> |
| |
| <p>Another way to instrument the canonical behavior is less flexible but |
| performs better in terms of memory usage and synchronization time. This |
| method in effect bypasses the synchronization between semantic and notation |
| because there are no notation elements created to display the semantic |
| elements. The EditParts in the container point directly to the underlying |
| semantic elements. This technique is useful if the elements being |
| displayed in the container arent user configurable in terms of display. |
| Or perhaps they inherit their display capabilities from the parent. </p> |
| |
| <p>An ideal usage of this technique is for list compartments that display a |
| list of elements. The list of elements most often have a derived position |
| in the container and are displayed is a consistent manner (i.e. no list item |
| looks different then any other list item except for its contents). This |
| is where the SemanticListCompartment is best utilized.</p> |
| |
| <i><span style='font-size:11.0pt;font-family:Arial;mso-fareast-font-family: |
| "Times New Roman";mso-ansi-language:EN-US;mso-fareast-language:EN-US; |
| mso-bidi-language:AR-SA'><br clear=all style='page-break-before:always'> |
| </span></i> |
| |
| <p><i><span style='font-size:11.0pt'>Semantic List Compartment usage:</span></i></p> |
| |
| <p><i><span style='font-size:11.0pt;font-family:Arial'><img border=0 width=575 |
| height=206 id="_x0000_i1034" src=semanticListCompartment.gif></span></i></p> |
| |
| <p><b style='mso-bidi-font-weight:normal'>Step 1:</b> Create a new |
| ListItemEditPart subclass that overrides the GraphicalEditPart#hasNotationView |
| method to return false. This new EditPart subclass will point to the |
| semantic element directly instead of pointing to a notation view.</p> |
| |
| <p><b style='mso-bidi-font-weight:normal'>Step 2:</b> Create a new subclass |
| from SemanticListCompartmentEditPart and implement the abstract methods.</p> |
| |
| <p class=MsoNormal><o:p> </o:p></p> |
| |
| <div style='border:solid windowtext 1.0pt;mso-border-alt:solid windowtext .75pt; |
| padding:4.0pt 0in 4.0pt 0in;margin-left:.5in;margin-right:34.0pt'><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><o:p> </o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// This method lets clients directly hook in their EditPart instead of <o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// delegating to the EditPartService.<span style='mso-spacerun:yes'> </span>The implementation is expected to <o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// instantiate the ListItemEditPart subclass from step (1.) and insert it <o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// into the list.<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span> <o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>protected void semanticChildAdded(EObject child,int index) {<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>
<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>}<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><o:p> </o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// Returns a list of all semantic children inside this editpart's model<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// Same method signature and client contract of the <o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// CanonicalEditPolicy#getSemanticChildrenList.<span style='mso-spacerun:yes'> </span><o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>// Returns the list of semantic elements that are to be displayed inside the // container.<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><o:p> </o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>protected List getSemanticChildrenList() {<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'><span |
| style='mso-tab-count:1'> </span>
<o:p></o:p></span></pre><pre |
| style='margin-left:0in;border:none;mso-border-alt:solid windowtext .75pt; |
| padding:0in;mso-padding-alt:4.0pt 0in 4.0pt 0in'><span style='color:navy'>}<o:p></o:p></span></pre></div> |
| |
| <p class=MsoNormal><o:p> </o:p></p> |
| |
| <p class=MsoNormal><o:p> </o:p></p> |
| |
| <div class=MsoNormal align=center style='text-align:center'> |
| |
| <hr size=2 width="100%" align=center> |
| |
| </div> |
| |
| <h2><a name=summary><span style='font-size:12.0pt'>Summary</span></a><span |
| style='font-size:12.0pt'><o:p></o:p></span></h2> |
| |
| <p class=backto>[<a href="#top">back to top</a>]</p> |
| |
| <p>In this tutorial, we did the following:</p> |
| |
| <ol style='margin-top:0in' start=1 type=1> |
| <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>Created |
| a container that has its notation views synchronized with the underlying |
| semantic elements by using the CanonicalEditPolicy hierarchy.</li> |
| <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>Learned |
| how to make the canonical behavior installed by the CanonicalEditPolicy as |
| optional </li> |
| <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>Learned |
| how to create a container that contains EditParts that point directly to |
| the semantic elements.</li> |
| </ol> |
| |
| |
| <br/> |
| <br/> |
| <hr/> |
| <P><a href="http://www.eclipse.org/legal/epl-v10.html"> |
| Copyright (c) 2000,2005 IBM Corporation and others. All Rights Reserved.</a></P> |
| |
| <p class=MsoNormal> </p> |
| |
| </div> |
| |
| </body> |
| |
| </html> |