diff options
author | Kenn Hussey | 2019-01-07 14:20:16 +0000 |
---|---|---|
committer | Kenn Hussey | 2019-01-07 14:20:16 +0000 |
commit | 4a6715383146340a72c9a70a0015e5c74ab61446 (patch) | |
tree | 25e189feaea113dc1ff6d0fa15d6d5349be476df | |
parent | d13e6ce73526166b1da289b15fcd6f398e145d82 (diff) | |
download | mdt-4a6715383146340a72c9a70a0015e5c74ab61446.tar.gz mdt-4a6715383146340a72c9a70a0015e5c74ab61446.tar.xz mdt-4a6715383146340a72c9a70a0015e5c74ab61446.zip |
[543170] Adding redirects in stale articles.
-rw-r--r-- | uml2/docs/articles/Getting_Started_with_UML2/article.html | 592 | ||||
-rw-r--r-- | uml2/docs/articles/Introduction_to_UML2_Profiles/article.html | 848 |
2 files changed, 722 insertions, 718 deletions
diff --git a/uml2/docs/articles/Getting_Started_with_UML2/article.html b/uml2/docs/articles/Getting_Started_with_UML2/article.html index 25c5bd2..26cd33e 100644 --- a/uml2/docs/articles/Getting_Started_with_UML2/article.html +++ b/uml2/docs/articles/Getting_Started_with_UML2/article.html @@ -247,7 +247,7 @@ p.MsoNormal <div class=Section1> <p class=MsoNormal align=right style='text-align:right'><span style='font-size: -10.0pt'>Copyright © 2004, 2008 International Business Machines Corp.</span><span +10.0pt'>Copyright � 2004, 2008 International Business Machines Corp.</span><span style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p> <div align=right> @@ -264,6 +264,8 @@ style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span></p> </div> +<h3><span style='color:red'><b>NOTE that this article is obsolete; please see <a href="http://wiki.eclipse.org/MDT/UML2/Getting_Started_with_UML2">here</a> instead.</b></span></h3> + <h1><img width=120 height=86 id="_x0000_i1025" src="../../../../images/Idea.jpg" align=CENTER></h1> @@ -286,8 +288,8 @@ both programmatically and by using the sample UML editor.<o:p></o:p></span></p> <p><b>By <span class=SpellE>Kenn</span> Hussey, IBM</b><br> <st1:date Year="2006" Day="18" Month="7">July 18, 2006</st1:date> <span -style='mso-spacerun:yes'> </span><span -style='mso-spacerun:yes'> </span>(Updated: <st1:date Year="2008" Day="11" +style='mso-spacerun:yes'>���</span><span +style='mso-spacerun:yes'>�</span>(Updated: <st1:date Year="2008" Day="11" Month="7">July 11, 2008</st1:date> for Eclipse 3.4; James <span class=SpellE>Bruck</span>)</p> </blockquote> @@ -308,29 +310,29 @@ class=MsoHyperlink><a href="http://www.eclipse.org/modeling/emf/downloads/?project=emf">EMF 2.4</a></span>, and <span class=MsoHyperlink><a href="http://www.eclipse.org/modeling/mdt/downloads/?project=uml2">UML2 2.2</a></span> -installed.<span style='mso-spacerun:yes'> </span></p> +installed.<span style='mso-spacerun:yes'>� </span></p> <p>You can either download the zips individually and expand them out or follow the -steps below: <span style='mso-spacerun:yes'> </span></p> +steps below: <span style='mso-spacerun:yes'>�</span></p> <p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1; tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>1)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Download and run Eclipse 3.4</span></p> +style='mso-spacerun:yes'>�</span>Download and run Eclipse 3.4</span></p> <p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1; tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>2)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Select the <b>Help</b> > <b>Software -Updates … </b>menu</span></p> +style='mso-spacerun:yes'>�</span>Select the <b>Help</b> > <b>Software +Updates � </b>menu</span></p> <p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1; tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>3)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Select the <b>Available Software</b> tab and expand +style='mso-spacerun:yes'>�</span>Select the <b>Available Software</b> tab and expand the <b>Ganymede\Model and Model Development</b> tree item.</span></p> <p style='margin-left:.25in'><!--[if gte vml 1]><v:shapetype id="_x0000_t75" @@ -363,15 +365,15 @@ src="article_files/image022.jpg" v:shapes="_x0000_i1087"><![endif]></p> tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>4)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Select <b>UML2 End-User Features</b> and <b>UML2 -Extender SDK</b>.<span style='mso-spacerun:yes'> </span>The version should +style='mso-spacerun:yes'>�</span>Select <b>UML2 End-User Features</b> and <b>UML2 +Extender SDK</b>.<span style='mso-spacerun:yes'>� </span>The version should indicate 2.2.0 (or later).</span></p> <p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1; tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>5)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Click <b>Install<span class=GramE>… <span +style='mso-spacerun:yes'>�</span>Click <b>Install<span class=GramE>� <span style='font-weight:normal'>.</span></span></b></span></p> <p>At this stage, UML2 2.2 and all dependencies should be installed.</p> @@ -381,9 +383,9 @@ style='font-weight:normal'>.</span></span></b></span></p> <h2>Introduction</h2> <p>This article will walk you through the basics of creating models using UML2. -Using a simple model (the ExtendedPO2 model, shamelessly “borrowed” from the EMF -“bible” [1]) as an example, we’ll look at what’s involved in creating some of -the more common elements that make up a model. For each type of element, we’ll +Using a simple model (the ExtendedPO2 model, shamelessly �borrowed� from the EMF +�bible� [1]) as an example, we�ll look at what�s involved in creating some of +the more common elements that make up a model. For each type of element, we�ll first explain the creation process using the sample UML editor and then explore how to accomplish the same thing using Java code. The ExtendedPO2 model is shown below.</p> @@ -396,13 +398,13 @@ src="article_files/image002.gif" v:shapes="_x0000_i1027"><![endif]></p> <h2>Getting Started</h2> -<p>Before getting started, you’ll need to create a simple project in your -workspace. This project will serve as the container for the model that we’ll +<p>Before getting started, you�ll need to create a simple project in your +workspace. This project will serve as the container for the model that we�ll create using the UML editor. To create a simple project for this article, follow these steps:</p> <p style='margin-left:27.5pt'>1) Select the <b>Window > Open Perspective -> <span class=GramE>Other</span>…</b> menu item.</p> +> <span class=GramE>Other</span>�</b> menu item.</p> <p style='margin-left:27.5pt'>2) Select the <b>Resource</b> perspective and press the <b>OK</b> button.</p> @@ -413,8 +415,8 @@ menu item.</p> <p style='margin-left:27.5pt'>4) Select the <b>Project</b> wizard from the <b>General</b> category and press the <b>Next ></b> button.</p> -<p style='margin-left:27.5pt'>5) Enter a project name (i.e. “Getting Started -with UML2”) and press the <b>Finish</b> button.</p> +<p style='margin-left:27.5pt'>5) Enter a project name (i.e. �Getting Started +with UML2�) and press the <b>Finish</b> button.</p> <p>At this point your workspace should look something like this:</p> @@ -425,47 +427,47 @@ with UML2”) and press the <b>Finish</b> button.</p> src="article_files/image024.jpg" v:shapes="_x0000_i1088"><![endif]></p> <p>OK, that should be enough to get us going with the UML editor. Now, to -follow along with the programmatic approach to creating models, we’ll assume -that you’ve created a class (named, say, “GettingStartedWithUML2”) in which you -can write some code to construct our sample model. The code snippets we’ll show -assume you’ve defined the following utility methods to give the user -information on the program’s status:</p> +follow along with the programmatic approach to creating models, we�ll assume +that you�ve created a class (named, say, �GettingStartedWithUML2�) in which you +can write some code to construct our sample model. The code snippets we�ll show +assume you�ve defined the following utility methods to give the user +information on the program�s status:</p> <pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1028" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-tab-count:1'> </span><span class=GramE>public</span> static <span +style='mso-tab-count:1'>� </span><span class=GramE>public</span> static <span class=SpellE>boolean</span> DEBUG = true;</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static void out(String output) {</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>if</span> (DEBUG) {</pre><pre +style='mso-tab-count:2'>����������� </span><span class=GramE>if</span> (DEBUG) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1029" src="../../../../images/tag_2.gif" align=CENTER><span style='mso-tab-count: -3'> </span><span class=SpellE><span class=GramE>System.out.println</span></span><span +3'>���������������� </span><span class=SpellE><span class=GramE>System.out.println</span></span><span class=GramE>(</span>output);</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span>}</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +style='mso-tab-count:2'>����������� </span>}</pre><pre style='margin-left:9.0pt'><span +style='mso-tab-count:1'>���� </span>}</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static void err(String error) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1030" src="../../../../images/tag_3.gif" align=CENTER><span style='mso-tab-count: -2'> </span><span class=SpellE><span class=GramE>System.err.println</span></span><span +2'>�������� </span><span class=SpellE><span class=GramE>System.err.println</span></span><span class=GramE>(</span>error);</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>A static debug flag <img border=0 width=24 height=14 id="_x0000_i1031" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>can be used to enable or disable verbose -information printed to the system’s output <span class=GramE>stream </span><img +style='mso-spacerun:yes'>�</span>can be used to enable or disable verbose +information printed to the system�s output <span class=GramE>stream </span><img border=0 width=24 height=14 id="_x0000_i1032" src="../../../../images/tag_2.gif" -align=CENTER>. Errors will always be printed to the system’s error <span +align=CENTER>. Errors will always be printed to the system�s error <span class=GramE>stream </span><img border=0 width=24 height=14 id="_x0000_i1033" src="../../../../images/tag_3.gif" align=CENTER>.</p> <p style='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'>All <span class=SpellE>righty</span> then! In each of the following subsections, -we’ll look at how to create a different kind of UML element, starting with +we�ll look at how to create a different kind of UML element, starting with models.</p> <h3 style='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'>Creating @@ -486,7 +488,7 @@ Select the <b>UML Model</b> wizard from the <b>Example EMF Model Creation Wizards</b> category and press the <b>Next ></b> button.</p> <p style='margin-left:27.5pt;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'>3) -Enter a file name (i.e. “ExtendedPO2.uml”) and press the <b>Next ></b> +Enter a file name (i.e. �ExtendedPO2.uml�) and press the <b>Next ></b> button.</p> <p style='margin-left:27.5pt;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'>4) @@ -500,7 +502,7 @@ Select the <b>Window > Show View > Properties</b> menu item.</p> editor.</p> <p style='margin-left:27.5pt;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'>7) -Enter a value (i.e. “epo2”) for the <b>Name</b> property in the <b>Properties</b> +Enter a value (i.e. �epo2�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='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'>At @@ -512,59 +514,59 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=874 height=597 src="article_files/image026.jpg" v:shapes="_x0000_i1089"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns a model with a specified name.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Model <span class=SpellE>createModel</span>(String name) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1034" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Model <span class=SpellE>model</span> = <span class=SpellE><span +2'>�������� </span>Model <span class=SpellE>model</span> = <span class=SpellE><span class=GramE>UMLFactory.eINSTANCE.createModel</span></span><span class=GramE>(</span>);</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1035" src="../../../../images/tag_2.gif" align=CENTER><span style='mso-tab-count: -2'> </span><span class=SpellE><span class=GramE>model.setName</span></span><span +2'>�������� </span><span class=SpellE><span class=GramE>model.setName</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1036" src="../../../../images/tag_3.gif" align=CENTER><span style='mso-tab-count: -2'> </span><span class=GramE>out(</span>"Model '" + <span +2'>�������� </span><span class=GramE>out(</span>"Model '" + <span class=SpellE>model.getQualifiedName</span>() + "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1037" src="../../../../images/tag_4.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=GramE>return</span> model;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +align=CENTER><span style='mso-tab-count:2'>�������� </span><span class=GramE>return</span> model;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>First, we ask the UML factory singleton <img border=0 width=24 height=14 id="_x0000_i1038" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to create a model, and we set its <span +style='mso-spacerun:yes'>�</span>to create a model, and we set its <span class=GramE>name </span><img border=0 width=24 height=14 id="_x0000_i1039" src="../../../../images/tag_2.gif" align=CENTER>. Then, we output information <img border=0 width=24 height=14 id="_x0000_i1040" src="../../../../images/tag_3.gif" -align=CENTER><span style='mso-spacerun:yes'> </span>to the user to let them +align=CENTER><span style='mso-spacerun:yes'>�</span>to the user to let them know that the model has been successfully created. Finally, we return <img border=0 width=24 height=14 id="_x0000_i1041" src="../../../../images/tag_4.gif" -align=CENTER><span style='mso-spacerun:yes'> </span>the model. You’ll notice +align=CENTER><span style='mso-spacerun:yes'>�</span>the model. You�ll notice most, if not all, of the code snippets in this article will follow this pattern -– create the element (and set some properties on it), inform the user, and +� create the element (and set some properties on it), inform the user, and return it.</p> <p style='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'><img border=0 width=63 height=14 id="_x0000_i1042" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>All named elements (a model is a type of named -element) have a “simple” name and a qualified name. The qualified name is the -“simple” name prefixed with the “simple” names of <span class=GramE>all of the</span> -named element’s containing namespaces. Note that the qualified name of a named +style='mso-spacerun:yes'>�</span>All named elements (a model is a type of named +element) have a �simple� name and a qualified name. The qualified name is the +�simple� name prefixed with the �simple� names of <span class=GramE>all of the</span> +named element�s containing namespaces. Note that the qualified name of a named element is only defined if all of its containing namespaces have non-empty -“simple” names.</p> +�simple� names.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create a model named -‘epo2’ as follows:</p> +let�s see this method in action. For example, we could create a model named +�epo2� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>Model epo2Model = <span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>Model epo2Model = <span class=SpellE><span class=GramE>createModel</span></span><span class=GramE>(</span>"epo2");</pre> <h3 style='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'>Creating @@ -586,45 +588,45 @@ Right-click and select the <b>New Child > Packaged Element Package</b> option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (e.g. “bar”) for the <b>Name</b> property in the <b>Properties</b> +Enter a value (e.g. �bar�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='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'>We -don’t actually need to create a package because our sample model doesn’t -contain any… except of course for the root package (i.e. the model). That’s -right – a model is a type of package.</p> +don�t actually need to create a package because our sample model doesn�t +contain any� except of course for the root package (i.e. the model). That�s +right � a model is a type of package.</p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns a package with a specified name in a specified nesting package.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static org.eclipse.uml2.uml.Package <span class=SpellE>createPackage</span>(</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span><span class=GramE>org.eclipse.uml2.uml.Package</span> <span +style='mso-tab-count:3'>������������������� </span><span class=GramE>org.eclipse.uml2.uml.Package</span> <span class=SpellE>nestingPackage</span>, String name) {</pre><pre style='margin-left: 9.0pt'><img border=0 width=24 height=14 id="_x0000_i1043" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>org.eclipse.uml2.uml.Package package_ = <span class=SpellE>nestingPackage</span></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>.<span +2'>�������� </span>org.eclipse.uml2.uml.Package package_ = <span class=SpellE>nestingPackage</span></pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>createNestedPackage</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Package '" + <span class=SpellE>package_.getQualifiedName</span>() + "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> package_;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> package_;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here, -instead of asking the factory to create the package for us, we’re making use of +instead of asking the factory to create the package for us, we�re making use of one of the factory methods <img border=0 width=24 height=14 id="_x0000_i1044" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>in the UML2 API.</p> +style='mso-spacerun:yes'>�</span>in the UML2 API.</p> <p style='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'><img border=0 width=63 height=14 id="_x0000_i1045" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>In UML2, a factory method exists for every feature +style='mso-spacerun:yes'>�</span>In UML2, a factory method exists for every feature that can contain other elements (i.e. every containment feature). In addition, more convenient factory methods exist for commonly created types (like packages). In this case, the package has a feature (<span class=SpellE><code>packagedElement</code></span>) @@ -641,10 +643,10 @@ package name as an argument. Behind the scenes, the package will create a nested package, set its name, and add the package to its list of packaged elements.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create a package named -‘bar’ in nesting package ‘<span class=SpellE>foo</span>’ as follows:</p> +let�s see this method in action. For example, we could create a package named +�bar� in nesting package �<span class=SpellE>foo</span>� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>org.eclipse.uml2.uml.Package</span> <span class=SpellE>barPackage</span> = <span class=SpellE>createPackage</span>(<span class=SpellE>fooPackage</span>, "bar");</pre> @@ -653,7 +655,7 @@ Primitive Types</h3> <p style='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'>A primitive type defines a predefined data type, without any relevant -substructure. Primitive types used in UML™ itself include <code>Boolean</code>, +substructure. Primitive types used in UML� itself include <code>Boolean</code>, <code>Integer</code>, <span class=SpellE><code>UnlimitedNatural</code></span>, and <code>String</code>. To create a primitive type using the UML editor, follow these steps:</p> @@ -666,12 +668,12 @@ Right-click and select the <b>New Child > Packaged Element > Primitive Type</b> option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (i.e. “<span class=SpellE>int</span>”) for the <b>Name</b> +Enter a value (i.e. �<span class=SpellE>int</span>�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1046" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the remaining primitive types from the +style='mso-spacerun:yes'>�</span>Create the remaining primitive types from the ExtendedPO2 model using the UML editor.</p> <p style='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'>At @@ -683,50 +685,50 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=874 height=597 src="article_files/image004.jpg" v:shapes="_x0000_i1090"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns a primitive type with a specified name in a specified package.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static <span class=SpellE>PrimitiveType</span> <span class=SpellE>createPrimitiveType</span>(</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span>org.eclipse.uml2.uml.Package package_, String name) {</pre><pre +style='mso-tab-count:3'>������������������� </span>org.eclipse.uml2.uml.Package package_, String name) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1047" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span><span class=SpellE>PrimitiveType</span> <span class=SpellE>primitiveType</span> = (<span +2'>�������� </span><span class=SpellE>PrimitiveType</span> <span class=SpellE>primitiveType</span> = (<span class=SpellE>PrimitiveType</span>) package_</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span>.<span class=SpellE><span +style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>createOwnedPrimitiveType</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Primitive type '" + <span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Primitive type '" + <span class=SpellE>primitiveType.getQualifiedName</span>()</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>+ "' created.");</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>+ "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> <span +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> <span class=SpellE>primitiveType</span>;</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call the <span class=SpellE><span class=GramE><code>createOwnedPrimitiveType</code></span></span><span class=GramE><code>(</code></span><code>String)</code> convenience factory method <img border=0 width=24 height=13 id="_x0000_i1048" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to ask the package to create a primitive type +style='mso-spacerun:yes'>�</span>to ask the package to create a primitive type with the specified name as one of its packaged elements.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create a primitive type -named ‘<span class=SpellE>int</span>’ in model ‘epo2’ as follows:</p> +let�s see this method in action. For example, we could create a primitive type +named �<span class=SpellE>int</span>� in model �epo2� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE>PrimitiveType</span> <span class=SpellE>intPrimitiveType</span> = <span class=SpellE><span class=GramE>createPrimitiveType</span></span><span class=GramE>(</span>epo2Model, "<span class=SpellE>int</span>");</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1049" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the +style='mso-spacerun:yes'>�</span>Write code to programmatically create the remaining primitive types from the ExtendedPO2 model.</p> <h3 style='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'>Creating @@ -745,7 +747,7 @@ Right-click and select the <b>New Child > Packaged Element > Enumeration</ option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (i.e. “<span class=SpellE>OrderStatus</span>”) for the <b>Name</b> +Enter a value (i.e. �<span class=SpellE>OrderStatus</span>�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='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'>At @@ -757,42 +759,42 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=874 height=597 src="article_files/image006.jpg" v:shapes="_x0000_i1091"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns an enumeration with a specified name in a specified package.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Enumeration <span class=SpellE>createEnumeration</span>(</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>org.eclipse.uml2.uml.Package package_, String name) {</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>org.eclipse.uml2.uml.Package package_, String name) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1050" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Enumeration <span class=SpellE>enumeration</span> = (Enumeration) package_</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>.<span +2'>�������� </span>Enumeration <span class=SpellE>enumeration</span> = (Enumeration) package_</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>createOwnedEnumeraton</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Enumeration '" + <span class=SpellE>enumeration.getQualifiedName</span>() + "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> enumeration;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> enumeration;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call the <span class=SpellE><span class=GramE><code>createOwnedEnumeration</code></span></span><span class=GramE><code>(</code></span><code>String)</code> convenience factory method <img border=0 width=24 height=13 id="_x0000_i1051" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to ask the package to create a primitive type +style='mso-spacerun:yes'>�</span>to ask the package to create a primitive type with the specified name as one of its packaged elements.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create an enumeration -named ‘<span class=SpellE>OrderStatus</span>’ in model ‘epo2’ as follows:</p> +let�s see this method in action. For example, we could create an enumeration +named �<span class=SpellE>OrderStatus</span>� in model �epo2� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>Enumeration <span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>Enumeration <span class=SpellE>orderStatusEnumeration</span> = <span class=SpellE><span class=GramE>createEnumeration</span></span><span class=GramE>(</span>epo2Model,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>"<span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>"<span class=SpellE>OrderStatus</span>");</pre> <h3 style='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'>Creating @@ -811,12 +813,12 @@ Right-click and select the <b>New Child > Owned Literal > Enumeration Literal</b> option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (i.e. “Pending”) for the <b>Name</b> property in the <b>Properties</b> +Enter a value (i.e. �Pending�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1052" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the remaining enumeration literals from +style='mso-spacerun:yes'>�</span>Create the remaining enumeration literals from the ExtendedPO2 model using the UML editor.</p> <p style='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'>At @@ -828,51 +830,51 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=874 height=597 src="article_files/image008.jpg" v:shapes="_x0000_i1092"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns an enumeration literal with a specified name in a specified enumeration.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static <span class=SpellE>EnumerationLiteral</span> <span class=SpellE>createEnumerationLiteral</span>(</pre><pre style='margin-left: -9.0pt'><span style='mso-tab-count:3'> </span>Enumeration <span +9.0pt'><span style='mso-tab-count:3'>������������������� </span>Enumeration <span class=SpellE>enumeration</span>, String name) {</pre><pre style='margin-left: 9.0pt'><img border=0 width=24 height=13 id="_x0000_i1053" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span><span class=SpellE>EnumerationLiteral</span> <span +2'>�������� </span><span class=SpellE>EnumerationLiteral</span> <span class=SpellE>enumerationLiteral</span> = enumeration</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>.<span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>createOwnedLiteral</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Enumeration literal '" + <span class=SpellE>enumerationLiteral.getQualifiedName</span>()</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>+ "' created.");</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>+ "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> <span +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> <span class=SpellE>enumerationLiteral</span>;</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call a <span class=SpellE><span class=GramE><code>createOwnedLiteral</code></span></span><span class=GramE><code>(</code></span><code>String)</code> convenience factory method <img border=0 width=24 height=13 id="_x0000_i1054" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to ask the enumeration to create an +style='mso-spacerun:yes'>�</span>to ask the enumeration to create an enumeration literal with the specified name as one of its owned literals.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create an enumeration -literal named ‘Pending’ in enumeration ‘<span class=SpellE>OrderStatus</span>’ +let�s see this method in action. For example, we could create an enumeration +literal named �Pending� in enumeration �<span class=SpellE>OrderStatus</span>� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>createEnumerationLiteral</span></span><span class=GramE>(</span><span class=SpellE>orderStatusEnumeration</span>, "Pending");</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1055" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the +style='mso-spacerun:yes'>�</span>Write code to programmatically create the remaining enumeration literals from the ExtendedPO2 model.</p> <h3 style='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'>Creating @@ -891,12 +893,12 @@ Right-click and select the <b>New Child > Packaged Element > Class</b> option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (i.e. “Supplier”) for the <b>Name</b> property in the <b>Properties</b> +Enter a value (i.e. �Supplier�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1056" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the remaining classes from the +style='mso-spacerun:yes'>�</span>Create the remaining classes from the ExtendedPO2 model using the UML editor.</p> <p style='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'>At @@ -908,59 +910,59 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=874 height=679 src="article_files/image010.jpg" v:shapes="_x0000_i1093"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns <span class=GramE>a(</span>n) (abstract) class with a specified name in a specified package.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static org.eclipse.uml2.uml.Class <span class=SpellE>createClass</span>(</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span>org.eclipse.uml2.uml.Package package_, String name, <span +style='mso-tab-count:3'>������������������� </span>org.eclipse.uml2.uml.Package package_, String name, <span class=SpellE><span class=GramE>boolean</span></span> <span class=SpellE>isAbstract</span>) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1057" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>org.eclipse.uml2.uml.Class class_ = <span class=SpellE>package_.<span +2'>�������� </span>org.eclipse.uml2.uml.Class class_ = <span class=SpellE>package_.<span class=GramE>createOwnedClass</span></span><span class=GramE>(</span>name,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>isAbstract</span></span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Class '" + <span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Class '" + <span class=SpellE>class_.getQualifiedName</span>() + "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> class_;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> class_;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call the <span class=SpellE><span class=GramE><code>createOwnedClass</code></span></span><span class=GramE><code>(</code></span><code>String, <span class=SpellE>boolean</span>)</code> convenience factory method <img border=0 width=24 height=13 id="_x0000_i1058" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to ask the package to create a class with the +style='mso-spacerun:yes'>�</span>to ask the package to create a class with the specified name as one of its packaged elements, and set the <span class=SpellE><code>isAbstract</code></span> attribute of the class based on the specified <span class=SpellE><code>boolean</code></span> argument.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1059" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>You may have noticed that we have been fully +style='mso-spacerun:yes'>�</span>You may have noticed that we have been fully qualifying references to the <code>Package</code> and <code>Class</code> interfaces. This is recommended so that these types are not confused with <span class=SpellE><code>java.lang.Class</code></span> and <span class=SpellE><code>java.lang.Package</code></span>, which are imported implicitly in Java.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create a non-abstract -class named ‘Supplier’ in model ‘epo2’ as follows:</p> +let�s see this method in action. For example, we could create a non-abstract +class named �Supplier� in model �epo2� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>org.eclipse.uml2.uml.Class</span> <span class=SpellE>supplierClass</span> = <span class=SpellE>createClass</span>(epo2Model,</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span>"Supplier", false);</pre> +style='mso-tab-count:3'>������������������� </span>"Supplier", false);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1060" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the +style='mso-spacerun:yes'>�</span>Write code to programmatically create the remaining classes from the ExtendedPO2 model.</p> <h3 style='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'>Creating @@ -987,7 +989,7 @@ the <b>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1061" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the remaining generalizations from the +style='mso-spacerun:yes'>�</span>Create the remaining generalizations from the ExtendedPO2 model using the UML editor.</p> <p style='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'>At @@ -999,51 +1001,51 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=874 height=679 src="article_files/image012.jpg" v:shapes="_x0000_i1094"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns a generalization between specified specific and general classifiers.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Generalization <span class=SpellE>createGeneralization</span>(</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>Classifier <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>Classifier <span class=SpellE>specificClassifier</span>, Classifier <span class=SpellE>generalClassifier</span>) {</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>Generalization <span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>Generalization <span class=SpellE>generalization</span> = <span class=SpellE>specificClassifier</span></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1062" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -3'> </span>.<span class=SpellE><span class=GramE>createGeneralization</span></span><span +3'>���������������� </span>.<span class=SpellE><span class=GramE>createGeneralization</span></span><span class=GramE>(</span><span class=SpellE>generalClassifier</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Generalization " + <span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Generalization " + <span class=SpellE>specificClassifier.getQualifiedName</span>() + " ->> "</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>+ <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>+ <span class=SpellE><span class=GramE>generalClassifier.getQualifiedName</span></span><span class=GramE>(</span>) + " created.");</pre><pre style='margin-left: 9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> generalization;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> generalization;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call a convenience factory method on the specific classifier that creates a generalization <img border=0 width=24 height=13 id="_x0000_i1063" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>as one of its children and sets the general +style='mso-spacerun:yes'>�</span>as one of its children and sets the general classifier to the specified argument.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create a generalization -between specific class ‘<span class=SpellE>USAddress</span>’ and general class -‘Address’ as follows:</p> +let�s see this method in action. For example, we could create a generalization +between specific class �<span class=SpellE>USAddress</span>� and general class +�Address� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>createGeneralization</span></span><span class=GramE>(</span><span class=SpellE>usAddressClass</span>, <span class=SpellE>addressClass</span>);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1064" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the +style='mso-spacerun:yes'>�</span>Write code to programmatically create the remaining generalizations from the ExtendedPO2 model.</p> <h3 style='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'>Creating @@ -1056,7 +1058,7 @@ of the attribute.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1065" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The types of <code>Classifier</code> that can +style='mso-spacerun:yes'>�</span>The types of <code>Classifier</code> that can own attributes in UML2 include <code>Artifact</code>, <span class=SpellE><code>DataType</code></span>, <code>Interface</code>, <code>Signal</code>, and <span class=SpellE><code>StructuredClassifier</code></span> (and their subtypes).</p> @@ -1072,7 +1074,7 @@ Right-click and select the <b>New Child > Owned Attribute > Property</b> option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (i.e. "name”) for the <b>Name</b> property in the <b>Properties</b> +Enter a value (i.e. "name�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='margin-left:27.5pt;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'>4) @@ -1085,9 +1087,9 @@ property in the <b style='mso-bidi-font-weight:normal'>Properties</b> view.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1066" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>Lower and upper values for multiplicity +style='mso-spacerun:yes'>�</span>Lower and upper values for multiplicity elements (like properties) are represented as value specifications (first-class -objects) in UML™ 2.x. The default value for lower and upper bounds is 1, unless +objects) in UML� 2.x. The default value for lower and upper bounds is 1, unless a child value specification exists, in which case its value is used. Specifying a value for the lower or upper property will create a child value specification if none exists, or update its value if one does. Note that, to be treated as a @@ -1096,7 +1098,7 @@ unlimited natural. </p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1067" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the remaining attributes from the +style='mso-spacerun:yes'>�</span>Create the remaining attributes from the ExtendedPO2 model using the UML editor.</p> <p style='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'>At @@ -1108,72 +1110,72 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=932 height=858 src="article_files/image014.jpg" v:shapes="_x0000_i1095"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns an attribute with a specified upper bound, lower bound, type, and name in a specified class.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Property <span class=SpellE>createAttribute</span>(org.eclipse.uml2.uml.Class class_,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>String name, Type <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>String name, Type <span class=SpellE>type</span>, <span class=SpellE>int</span> <span class=SpellE>lowerBound</span>, <span class=SpellE>int</span> <span class=SpellE>upperBound</span>) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1068" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Property attribute = <span class=SpellE>class_.<span +2'>�������� </span>Property attribute = <span class=SpellE>class_.<span class=GramE>createOwnedAttribute</span></span><span class=GramE>(</span>name, type,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>lowerBound</span></span>, <span class=SpellE>upperBound</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE>StringBuffer</span> <span +style='mso-tab-count:2'>����������� </span><span class=SpellE>StringBuffer</span> <span class=SpellE>sb</span> = new <span class=SpellE><span class=GramE>StringBuffer</span></span><span class=GramE>(</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"Attribute '");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>attribute.getQualifiedName</span>());</pre><pre style='margin-left: 9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"' : ");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>type.getQualifiedName</span>());</pre><pre style='margin-left: 9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>" [");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>lowerBound</span>);</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"..");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>LiteralUnlimitedNatural.UNLIMITED</span> == <span class=SpellE>upperBound</span></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>? "*"</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>: <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>? "*"</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>: <span class=SpellE><span class=GramE>String.valueOf</span></span><span class=GramE>(</span><span class=SpellE>upperBound</span>));</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"]");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>" created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span><span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span><span class=SpellE>sb.toString</span>());</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> attribute;</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call a <span class=SpellE><code>createOwnedAttribute</code></span><code>(String, Type, <span class=SpellE>int</span>, <span class=SpellE>int</span>)</code> convenience factory method <img border=0 width=24 height=13 id="_x0000_i1069" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to ask the class to create a property as one +style='mso-spacerun:yes'>�</span>to ask the class to create a property as one of its owned attributes, set the type of the attribute to the specified type, and set the lower and upper bounds of the attribute (the factory method indirectly creates a literal integer and literal unlimited natural, @@ -1181,23 +1183,23 @@ respectively, and sets their values to the specified integer values).</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1070" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The <span class=SpellE><code>LiteralUnlimitedNatural.UNLIMITED</code></span> +style='mso-spacerun:yes'>�</span>The <span class=SpellE><code>LiteralUnlimitedNatural.UNLIMITED</code></span> constant represents the unlimited value for upper bounds (-1), as it does in EMF; when setting this value in the <b style='mso-bidi-font-weight:normal'>Properties</b> -view, an asterisk (‘*’) can alternatively be specified.</p> +view, an asterisk (�*�) can alternatively be specified.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create an attribute with -multiplicity 0<span class=GramE>..1</span> of type ‘String’ named ‘name’ in -class ‘Supplier’ as follows:</p> +let�s see this method in action. For example, we could create an attribute with +multiplicity 0<span class=GramE>..1</span> of type �String� named �name� in +class �Supplier� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>createAttribute</span></span><span class=GramE>(</span><span class=SpellE>supplierClass</span>, "name", <span class=SpellE>stringPrimitiveType</span>, 0, 1);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1071" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the +style='mso-spacerun:yes'>�</span>Write code to programmatically create the remaining attributes from the ExtendedPO2 model.</p> <h3 style='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'>Creating @@ -1212,9 +1214,9 @@ the property is the type of the association end.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1072" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The notion of association end navigability was -separated from that of ownership in the UML™ 2.0 <span class=GramE>specification</span>, -so a property that is owned by an association isn’t necessarily non-navigable +style='mso-spacerun:yes'>�</span>The notion of association end navigability was +separated from that of ownership in the UML� 2.0 <span class=GramE>specification</span>, +so a property that is owned by an association isn�t necessarily non-navigable as of UML2 2.0.</p> <p style='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'>To @@ -1228,7 +1230,7 @@ Right-click and select the <b>New Child > Packaged Element > Association</ option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (e.g. “<span class=SpellE>A_orders_supplier</span>”) for the <b>Name</b> +Enter a value (e.g. �<span class=SpellE>A_orders_supplier</span>�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='margin-left:27.5pt;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'>4) @@ -1277,7 +1279,7 @@ property in the <b style='mso-bidi-font-weight:normal'>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1073" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the remaining associations from the +style='mso-spacerun:yes'>�</span>Create the remaining associations from the ExtendedPO2 model using the UML editor.</p> <p style='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'>At @@ -1289,177 +1291,177 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=932 height=858 src="article_files/image016.jpg" v:shapes="_x0000_i1096"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns an association between two specified types, with ends that have the specified upper bounds, lower bounds, role names, aggregation kinds, and <span class=SpellE>navigabilities</span>.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Association <span class=SpellE>createAssociation</span>(Type type1,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>boolean</span></span> end1IsNavigable, <span class=SpellE>AggregationKind</span> end1Aggregation,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>String end1Name, <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>String end1Name, <span class=SpellE>int</span> end1LowerBound, <span class=SpellE>int</span> end1UpperBound,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>Type type2, <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>Type type2, <span class=SpellE><span class=GramE>boolean</span></span> end2IsNavigable,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE>AggregationKind</span> end2Aggregation, String end2Name,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>int</span></span> end2LowerBound, <span class=SpellE>int</span> end2UpperBound) {</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1074" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Association <span class=SpellE>association</span> = <span +2'>�������� </span>Association <span class=SpellE>association</span> = <span class=GramE>type1.createAssociation(</span>end1IsNavigable,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>end1Aggregation, end1Name, end1LowerBound, end1UpperBound, type2,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>end2IsNavigable, end2Aggregation, end2Name, end2LowerBound,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>end2UpperBound);</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>end1Aggregation, end1Name, end1LowerBound, end1UpperBound, type2,</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>end2IsNavigable, end2Aggregation, end2Name, end2LowerBound,</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>end2UpperBound);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE>StringBuffer</span> <span +style='mso-tab-count:2'>����������� </span><span class=SpellE>StringBuffer</span> <span class=SpellE>sb</span> = new <span class=SpellE><span class=GramE>StringBuffer</span></span><span class=GramE>(</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"Association ");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>if</span> (null == end1Name || 0 == end1Name.length()) {</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='mso-tab-count:2'>����������� </span><span class=GramE>if</span> (null == end1Name || 0 == end1Name.length()) {</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>'{');</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>type1.getQualifiedName());</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>'}');</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>} else {</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>} else {</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"'");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>type1.getQualifiedName());</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>NamedElement.SEPARATOR</span>);</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span><span class=SpellE><span +style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>end1Name);</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"'");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>}</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>}</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>" [");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>end1LowerBound);</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"..");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>LiteralUnlimitedNatural.UNLIMITED</span> == end1UpperBound</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>? "*"</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>: <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>? "*"</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>: <span class=SpellE><span class=GramE>String.valueOf</span></span><span class=GramE>(</span>end1UpperBound));</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"] ");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>end2IsNavigable</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>? '<'</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>: '-');</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>? '<'</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>: '-');</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>'-');</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>end1IsNavigable</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>? '>'</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>: '-');</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>? '>'</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>: '-');</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>' <span class=SpellE>'</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>if</span> (null == end2Name || 0 == end2Name.length()) {</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>'{');</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>type2.getQualifiedName());</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>'}');</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>} else {</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>} else {</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"'");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>type2.getQualifiedName());</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>NamedElement.SEPARATOR</span>);</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span><span class=SpellE><span +style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>end2Name);</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"'");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>}</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>}</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>" [");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>end2LowerBound);</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"..");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>LiteralUnlimitedNatural.UNLIMITED</span> == end2UpperBound</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>? "*"</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>: <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>? "*"</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>: <span class=SpellE><span class=GramE>String.valueOf</span></span><span class=GramE>(</span>end2UpperBound));</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"]");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>" created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span><span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span><span class=SpellE>sb.toString</span>());</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> association;</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call a convenience factory method on the first end type that creates an association (and its ends) between it and another type <img border=0 width=24 height=13 id="_x0000_i1075" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>as one of its siblings (i.e. as a child of its +style='mso-spacerun:yes'>�</span>as one of its siblings (i.e. as a child of its package namespace) and with the specified upper bounds, lower bounds, role names, aggregation kinds, and <span class=SpellE>navigabilities</span>. The owners of the association ends (properties) are based on the specified <span -class=SpellE>navigabilities</span> – navigable ends are owned by the end type +class=SpellE>navigabilities</span> � navigable ends are owned by the end type if allowed, otherwise they are owned by the association; non-navigable ends are owned by the association.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1076" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The <span class=SpellE><code>NamedElement.SEPARATOR</code></span> +style='mso-spacerun:yes'>�</span>The <span class=SpellE><code>NamedElement.SEPARATOR</code></span> constant represents the standard separator (<b>::</b>) used in qualified names.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create a unidirectional -composition (composite association) between classes ‘Supplier’ and ‘<span -class=SpellE>PurchaseOrder</span>’ in model ‘epo2’ as follows:</p> +let�s see this method in action. For example, we could create a unidirectional +composition (composite association) between classes �Supplier� and �<span +class=SpellE>PurchaseOrder</span>� in model �epo2� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>createAssociation</span></span><span class=GramE>(</span><span class=SpellE>supplierClass</span>, true,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE>AggregationKind.COMPOSITE_LITERAL</span>, "orders", 0,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE>LiteralUnlimitedNatural.UNLIMITED</span>, <span class=SpellE>purchaseOrderClass</span>,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>false, <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>false, <span class=SpellE>AggregationKind.NONE_LITERAL</span>, "", 1, 1);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1077" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the +style='mso-spacerun:yes'>�</span>Write code to programmatically create the remaining associations from the ExtendedPO2 model.</p> <h3 style='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'>Saving Models</h3> <p style='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'>Now -that we’ve spent all this time creating a model, we’d better save our work. +that we�ve spent all this time creating a model, we�d better save our work. When we created our model using the UML model wizard, a UML resource was created for us, so now all that needs to be done is to serialize the contents of our model as XMI to our file on disk (i.e. <code>ExtendedPO2.uml</code>). To @@ -1468,66 +1470,66 @@ save a model using the UML editor, follow these steps:</p> <p style='margin-left:27.5pt;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'>1) Select the <b>File > Save</b> menu item.</p> -<p style='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'>It’s +<p style='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'>It�s that simple. Programmatically, we have a bit more work to do because so far, -we’ve been creating our model in a vacuum, i.e. without a containing resource. +we�ve been creating our model in a vacuum, i.e. without a containing resource. The code snippet below shows a method that saves a specified package to a resource with a specified URI.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static void save(org.eclipse.uml2.uml.Package package_, URI <span class=SpellE>uri</span>) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1078" src="../../../../images/tag_1.gif" -align=CENTER><span style='mso-tab-count:2'> </span>Resource <span +align=CENTER><span style='mso-tab-count:2'>�������� </span>Resource <span class=SpellE>resource</span> = new <span class=SpellE><span class=GramE>ResourceSetImpl</span></span><span class=GramE>(</span>).<span class=SpellE>createResource</span>(<span class=SpellE>uri</span>);</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1079" src="../../../../images/tag_2.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=SpellE><span +align=CENTER><span style='mso-tab-count:2'>�������� </span><span class=SpellE><span class=GramE>resource.getContents</span></span><span class=GramE>(</span>).add(package_);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>try</span> {</pre><pre +style='mso-tab-count:2'>����������� </span><span class=GramE>try</span> {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1080" src="../../../../images/tag_3.gif" align=CENTER><span style='mso-tab-count: -3'> </span><span class=SpellE><span class=GramE>resource.save</span></span><span +3'>���������������� </span><span class=SpellE><span class=GramE>resource.save</span></span><span class=GramE>(</span>null);</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span><span class=GramE>out(</span>"Done.");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>} catch (<span +style='mso-tab-count:3'>������������������� </span><span class=GramE>out(</span>"Done.");</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>} catch (<span class=SpellE>IOException</span> <span class=SpellE>ioe</span>) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1081" src="../../../../images/tag_4.gif" align=CENTER><span style='mso-tab-count: -3'> </span><span class=GramE>err(</span><span class=SpellE>ioe.getMessage</span>());</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>}</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +3'>���������������� </span><span class=GramE>err(</span><span class=SpellE>ioe.getMessage</span>());</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>}</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we create a resource set <img border=0 width=24 height=13 id="_x0000_i1082" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>and a resource with the specified URI, add the -package to the resource’s contents <img border=0 width=24 height=13 +style='mso-spacerun:yes'>�</span>and a resource with the specified URI, add the +package to the resource�s contents <img border=0 width=24 height=13 id="_x0000_i1083" src="../../../../images/tag_2.gif" align=CENTER>, and ask the resource to save itself <img border=0 width=24 height=13 id="_x0000_i1084" src="../../../../images/tag_3.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>using the default options. If an exception +style='mso-spacerun:yes'>�</span>using the default options. If an exception occurs, we notify the user <img border=0 width=24 height=13 id="_x0000_i1085" src="../../../../images/tag_4.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>via our handy utility method.</p> +style='mso-spacerun:yes'>�</span>via our handy utility method.</p> <p style='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'>OK, -let’s see this method in action. For example, we could save the ‘epo2’ model to -a resource with URI ‘ExtendedPO2.uml’ (relative to a URI passed in as an +let�s see this method in action. For example, we could save the �epo2� model to +a resource with URI �ExtendedPO2.uml� (relative to a URI passed in as an argument) as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>save(</span>epo2Model, <span class=SpellE>URI.createURI</span>(<span class=SpellE>args</span>[0]).<span class=SpellE>appendSegment</span>("ExtendedPO2")</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>.<span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>appendFileExtension</span></span><span class=GramE>(</span><span class=SpellE>UMLResource.FILE_EXTENSION</span>));</pre> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1086" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The <span class=SpellE><code>UMLResource.FILE_EXTENSION</code></span> +style='mso-spacerun:yes'>�</span>The <span class=SpellE><code>UMLResource.FILE_EXTENSION</code></span> constant represents the file extension for UML resources (<code>.<span class=SpellE>uml</span></code>). Note that the <span class=SpellE><code>UMLResource</code></span> interface contains a number of constants that you will find useful when working @@ -1536,8 +1538,8 @@ with UML resources.</p> <h2 style='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'>Conclusion</h2> <p style='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'>Congratulations! -If you’ve made it this far, you’ve successfully created a simple model -programmatically and/or using the UML editor. There’s a whole lot more that +If you�ve made it this far, you�ve successfully created a simple model +programmatically and/or using the UML editor. There�s a whole lot more that could be said, but the purpose of this article was just to get you started. Stay tuned for more articles on how to develop tools with UML2.</p> @@ -1562,9 +1564,9 @@ run the example or view the source code for this article, unzip <a href="http://download.eclipse.org/modeling/mdt/uml2/downloads/articles/uml2.articles_200607181325.zip">uml2.articles_200607181325.zip</a> into your Eclipse home directory and import the <code>com.ibm.uml2.articles</code> plug-in into your workspace as a binary project with linked content (<b>File -> Import… > External Plug-ins and Fragments</b>). You can run the <code>GettingStartedWithUML2</code> -class as a Java application with a file URI (e.g. “file:/C:/Getting <span -class=GramE>Started</span> with UML2”) as a program argument.</p> +> Import� > External Plug-ins and Fragments</b>). You can run the <code>GettingStartedWithUML2</code> +class as a Java application with a file URI (e.g. �file:/C:/Getting <span +class=GramE>Started</span> with UML2�) as a program argument.</p> <p style='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'><span style='font-size:7.5pt'>Java and all Java-based trademarks and logos are diff --git a/uml2/docs/articles/Introduction_to_UML2_Profiles/article.html b/uml2/docs/articles/Introduction_to_UML2_Profiles/article.html index 42f5017..1b327bb 100644 --- a/uml2/docs/articles/Introduction_to_UML2_Profiles/article.html +++ b/uml2/docs/articles/Introduction_to_UML2_Profiles/article.html @@ -288,7 +288,7 @@ p.MsoNormal <p class=MsoNormal align=right style='text-align:right'><span style='font-size: 10.0pt;font-family:Arial'> </span><span style='font-size:10.0pt'>Copyright -© 2004, 2008 International Business Machines Corp.</span><span +� 2004, 2008 International Business Machines Corp.</span><span style='font-size:10.0pt;font-family:Arial'> <o:p></o:p></span></p> <div align=right> @@ -304,6 +304,8 @@ style='font-size:10.0pt;font-family:Arial'> <o:p></o:p></span></p> </div> +<h3><span style='color:red'><b>NOTE that this article is obsolete; please see <a href="http://wiki.eclipse.org/MDT/UML2/Introduction_to_UML2_Profiles">here</a> instead.</b></span></h3> + <h1><img width=120 height=86 id="_x0000_i1025" src="../../../../images/Idea.jpg" align=CENTER></h1> @@ -343,29 +345,29 @@ class=MsoHyperlink><a href="http://www.eclipse.org/modeling/emf/downloads/?project=emf">EMF 2.4</a></span>, and <span class=MsoHyperlink><a href="http://www.eclipse.org/modeling/mdt/downloads/?project=uml2">UML2 2.2</a></span> -installed.<span style='mso-spacerun:yes'> </span></p> +installed.<span style='mso-spacerun:yes'>� </span></p> <p>You can either download the zips individually and expand them out or follow -the steps below:<span style='mso-spacerun:yes'> </span></p> +the steps below:<span style='mso-spacerun:yes'>� </span></p> <p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1; tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>1)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Download and run Eclipse 3.4</span></p> +style='mso-spacerun:yes'>�</span>Download and run Eclipse 3.4</span></p> <p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1; tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>2)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Select the <b>Help</b> > <b>Software -Updates … </b>menu</span></p> +style='mso-spacerun:yes'>�</span>Select the <b>Help</b> > <b>Software +Updates � </b>menu</span></p> <p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1; tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>3)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Select the <b>Available Software</b> tab and +style='mso-spacerun:yes'>�</span>Select the <b>Available Software</b> tab and expand the <b>Ganymede\Model and Model Development</b> tree item.</span></p> <p style='margin-left:.25in'><!--[if gte vml 1]><v:shapetype id="_x0000_t75" @@ -398,15 +400,15 @@ src="article_files/image038.jpg" v:shapes="_x0000_i1128"><![endif]></p> tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>4)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Select <b>UML2 End-User Features</b> and <b>UML2 -Extender SDK</b>.<span style='mso-spacerun:yes'> </span>The version should +style='mso-spacerun:yes'>�</span>Select <b>UML2 End-User Features</b> and <b>UML2 +Extender SDK</b>.<span style='mso-spacerun:yes'>� </span>The version should indicate 2.2.0 (or later).</span></p> <p style='margin-left:.5in;text-indent:-.25in;mso-list:l0 level1 lfo1; tab-stops:list .5in'><![if !supportLists]><span style='mso-fareast-font-family: Arial'><span style='mso-list:Ignore'>5)<span style='font:7.0pt "Times New Roman"'> </span></span></span><![endif]><span dir=LTR><span -style='mso-spacerun:yes'> </span>Click <b>Install<span class=GramE>… <span +style='mso-spacerun:yes'>�</span>Click <b>Install<span class=GramE>� <span style='font-weight:normal'>.</span></span></b></span></p> <p>At this stage, UML2 2.2 and all dependencies should be installed.</p> @@ -415,13 +417,13 @@ style='font-weight:normal'>.</span></span></b></span></p> <p>This article will walk you through the basics of creating and applying profiles using UML2. Using a subset of the <span class=SpellE>Ecore</span> -profile (see below) and the model we described in the “Getting Started with -UML2” article [1] (the ExtendedPO2 model, shamelessly “borrowed” from the EMF -“bible” [2]) as an example, we’ll look at what’s involved in creating some of +profile (see below) and the model we described in the �Getting Started with +UML2� article [1] (the ExtendedPO2 model, shamelessly �borrowed� from the EMF +�bible� [2]) as an example, we�ll look at what�s involved in creating some of the more common elements that make up a profile. For each type of element, -we’ll first explain the creation process using the sample UML editor and -explore how to accomplish the same thing using Java code. Then we’ll look at -what’s involved in applying profiles and stereotypes to models. The ExtendedPO2 +we�ll first explain the creation process using the sample UML editor and +explore how to accomplish the same thing using Java code. Then we�ll look at +what�s involved in applying profiles and stereotypes to models. The ExtendedPO2 model is shown below.</p> <p><!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:581.25pt; @@ -431,9 +433,9 @@ model is shown below.</p> src="article_files/image002.gif" v:shapes="_x0000_i1027"><![endif]></p> <p>As described in the EMF book, some of the attributes of certain <span -class=SpellE>Ecore</span> elements cannot be expressed directly in UML™. EMF +class=SpellE>Ecore</span> elements cannot be expressed directly in UML�. EMF provides a Rose property file (<span class=SpellE><span style='font-family: -"Courier New"'>ecore.pty</span></span>) that defines all the non- UML™ +"Courier New"'>ecore.pty</span></span>) that defines all the non- UML� properties needed to completely express an EMF model using Rational Rose. The same thing can be achieved for a UML2 model using a profile.</p> @@ -461,13 +463,13 @@ src="article_files/image006.jpg" v:shapes="_x0000_i1029"><![endif]></p> <h2>Getting Started</h2> -<p>Before getting started, you’ll need to create a simple project in your -workspace. This project will serve as the container for the profile that we’ll +<p>Before getting started, you�ll need to create a simple project in your +workspace. This project will serve as the container for the profile that we�ll create using the UML editor. To create a simple project for this article, follow these steps:</p> <p style='margin-left:27.5pt'>1) Select the <b>Window > Open Perspective -> <span class=GramE>Other</span>…</b> menu item.</p> +> <span class=GramE>Other</span>�</b> menu item.</p> <p style='margin-left:27.5pt'>2) Select the <b>Resource</b> perspective and press the <b>OK</b> button.</p> @@ -478,8 +480,8 @@ menu item.</p> <p style='margin-left:27.5pt'>4) Select the <b>Project</b> wizard from the <b>General</b> category and press the <b>Next ></b> button.</p> -<p style='margin-left:27.5pt'>5) Enter a project name (i.e. “Introduction to -UML2 Profiles”), and press the <b>Finish</b> button.</p> +<p style='margin-left:27.5pt'>5) Enter a project name (i.e. �Introduction to +UML2 Profiles�), and press the <b>Finish</b> button.</p> <p>At this point your workspace should look something like this:</p> @@ -490,47 +492,47 @@ UML2 Profiles”), and press the <b>Finish</b> button.</p> src="article_files/image040.jpg" v:shapes="_x0000_i1129"><![endif]></p> <p>OK, that should be enough to get us going with the UML editor. Now, to -follow along with the programmatic approach to creating profiles, we’ll assume -that you’ve created a Java class (named, say, “IntroductionToUML2Profiles”) in +follow along with the programmatic approach to creating profiles, we�ll assume +that you�ve created a Java class (named, say, �IntroductionToUML2Profiles�) in which you can write some code to construct our sample profile. The code -snippets we’ll show assume you’ve defined the following utility methods to give -the user information on the program’s status:</p> +snippets we�ll show assume you�ve defined the following utility methods to give +the user information on the program�s status:</p> <pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1030" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-tab-count:1'> </span><span class=GramE>public</span> static <span +style='mso-tab-count:1'>� </span><span class=GramE>public</span> static <span class=SpellE>boolean</span> DEBUG = true;</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static void out(String output) {</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>if</span> (DEBUG) {</pre><pre +style='mso-tab-count:2'>����������� </span><span class=GramE>if</span> (DEBUG) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1031" src="../../../../images/tag_2.gif" align=CENTER><span style='mso-tab-count: -3'> </span><span class=SpellE><span class=GramE>System.out.println</span></span><span +3'>���������������� </span><span class=SpellE><span class=GramE>System.out.println</span></span><span class=GramE>(</span>output);</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span>}</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +style='mso-tab-count:2'>����������� </span>}</pre><pre style='margin-left:9.0pt'><span +style='mso-tab-count:1'>���� </span>}</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static void err(String error) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1032" src="../../../../images/tag_3.gif" align=CENTER><span style='mso-tab-count: -2'> </span><span class=SpellE><span class=GramE>System.err.println</span></span><span +2'>�������� </span><span class=SpellE><span class=GramE>System.err.println</span></span><span class=GramE>(</span>error);</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>A static debug flag <img border=0 width=24 height=14 id="_x0000_i1033" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>can be used to enable or disable verbose information -printed to the system’s output <span class=GramE>stream </span><img border=0 +style='mso-spacerun:yes'>�</span>can be used to enable or disable verbose information +printed to the system�s output <span class=GramE>stream </span><img border=0 width=24 height=14 id="_x0000_i1034" src="../../../../images/tag_2.gif" -align=CENTER>. Errors will always be printed to the system’s error <span +align=CENTER>. Errors will always be printed to the system�s error <span class=GramE>stream </span><img border=0 width=24 height=14 id="_x0000_i1035" src="../../../../images/tag_3.gif" align=CENTER>.</p> <p style='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'>All <span class=SpellE>righty</span> then! In each of the following subsections, -we’ll look at how to create or manipulate a different kind of UML element, +we�ll look at how to create or manipulate a different kind of UML element, starting with profiles.</p> <h3 style='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'>Creating @@ -555,7 +557,7 @@ Select the <b>UML Model</b> wizard from the <b>Example EMF Model Creation Wizards</b> category and press the <b>Next ></b> button.</p> <p style='margin-left:27.5pt;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'>3) -Enter a file name (i.e. “<span class=SpellE>Ecore.profile.uml</span>”) and +Enter a file name (i.e. �<span class=SpellE>Ecore.profile.uml</span>�) and press the <b>Next ></b> button.</p> <p style='margin-left:27.5pt;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'>4) @@ -568,12 +570,12 @@ Select the <b>Window > Show View > Properties</b> menu item.</p> Select the <b>Profile</b> element in the UML editor.</p> <p style='margin-left:27.5pt;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'>7) -Enter a value (i.e. “<span class=SpellE>ecore</span>”) for the <b>Name</b> +Enter a value (i.e. �<span class=SpellE>ecore</span>�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1036" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>By convention, resources that contain profiles +style='mso-spacerun:yes'>�</span>By convention, resources that contain profiles end with a <code>.<span class=SpellE>profile.uml</span></code> file extension in UML2. </p> @@ -586,52 +588,52 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=832 height=541 src="article_files/image042.jpg" v:shapes="_x0000_i1130"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns a profile with a specified name.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Profile <span class=SpellE>createProfile</span>(String name) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1037" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Profile <span class=SpellE>profile</span> = <span +2'>�������� </span>Profile <span class=SpellE>profile</span> = <span class=SpellE><span class=GramE>UMLFactory.eINSTANCE.createProfile</span></span><span class=GramE>(</span>);</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1038" src="../../../../images/tag_2.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=SpellE><span +align=CENTER><span style='mso-tab-count:2'>�������� </span><span class=SpellE><span class=GramE>profile.setName</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1039" src="../../../../images/tag_3.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Profile '" + <span +align=CENTER><span style='mso-tab-count:2'>�������� </span><span class=GramE>out(</span>"Profile '" + <span class=SpellE>profile.getQualifiedName</span>() + "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1040" src="../../../../images/tag_4.gif" -align=CENTER><span style='mso-tab-count:1'> </span><span style='mso-tab-count: -1'> </span><span class=GramE>return</span> profile;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +align=CENTER><span style='mso-tab-count:1'>� </span><span style='mso-tab-count: +1'>������� </span><span class=GramE>return</span> profile;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>First, we ask the UML factory singleton <img border=0 width=24 height=14 id="_x0000_i1041" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to create a profile, and we set its <span +style='mso-spacerun:yes'>�</span>to create a profile, and we set its <span class=GramE>name </span><img border=0 width=24 height=14 id="_x0000_i1042" src="../../../../images/tag_2.gif" align=CENTER>. Then, we output information <img border=0 width=24 height=14 id="_x0000_i1043" src="../../../../images/tag_3.gif" -align=CENTER><span style='mso-spacerun:yes'> </span>to the user to let them +align=CENTER><span style='mso-spacerun:yes'>�</span>to the user to let them know that the profile has been successfully created. Finally, we return <img border=0 width=24 height=14 id="_x0000_i1044" src="../../../../images/tag_4.gif" -align=CENTER><span style='mso-spacerun:yes'> </span>the profile. You’ll notice +align=CENTER><span style='mso-spacerun:yes'>�</span>the profile. You�ll notice most, if not all, of the code snippets in this article will follow this pattern -– create the element (and set some properties on it), inform the user, and +� create the element (and set some properties on it), inform the user, and return it.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create a profile named ‘<span -class=SpellE>ecore</span>’ as follows:</p> +let�s see this method in action. For example, we could create a profile named �<span +class=SpellE>ecore</span>� as follows:</p> <p style='margin-left:9.0pt;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'><span -style='mso-tab-count:2'> </span>Profile <span +style='mso-tab-count:2'>������������������������ </span>Profile <span class=SpellE>ecoreProfile</span> = <span class=SpellE><span class=GramE>createProfile</span></span><span class=GramE>(</span>"<span class=SpellE>ecore</span>");</p> @@ -655,7 +657,7 @@ in the UML editor.</p> <p style='margin-left:27.5pt;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'>2) Select the <b style='mso-bidi-font-weight:normal'>UML Editor > Package > -Import Type…</b> menu item.</p> +Import Type�</b> menu item.</p> <p style='margin-left:27.5pt;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'>3) Choose a primitive type (i.e. <span class=SpellE><b style='mso-bidi-font-weight: @@ -665,7 +667,7 @@ style='mso-bidi-font-weight:normal'>OK</b> button.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1045" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Import the other required primitive type (<span +style='mso-spacerun:yes'>�</span>Import the other required primitive type (<span class=SpellE><b style='mso-bidi-font-weight:normal'>UMLPrimitiveTypes::String</b></span>) into the <span class=SpellE>Ecore</span> profile using the UML editor.</p> @@ -678,47 +680,47 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=832 height=541 src="article_files/image008.jpg" v:shapes="_x0000_i1131"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically imports the primitive type with a specified name from the UML primitive <span class=GramE>types</span> library into a specified package and returns it.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static <span class=SpellE>PrimitiveType</span> <span class=SpellE>importPrimitiveType</span>(</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span>org.eclipse.uml2.uml.Package package_, String name) {</pre><pre +style='mso-tab-count:3'>������������������� </span>org.eclipse.uml2.uml.Package package_, String name) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1046" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Model <span class=SpellE>umlLibrary</span> = (Model) <span +2'>�������� </span>Model <span class=SpellE>umlLibrary</span> = (Model) <span class=GramE>load(</span>URI</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span>.<span class=SpellE><span +style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>createURI</span></span><span class=GramE>(</span><span class=SpellE>UMLResource.UML_PRIMITIVE_TYPES_LIBRARY_URI</span>));</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1047" src="../../../../images/tag_2.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=SpellE>PrimitiveType</span> <span +align=CENTER><span style='mso-tab-count:2'>�������� </span><span class=SpellE>PrimitiveType</span> <span class=SpellE>primitiveType</span> = (<span class=SpellE>PrimitiveType</span>) <span class=SpellE>umlLibrary</span></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span>.<span class=SpellE><span +style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>getOwnedType</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1048" src="../../../../images/tag_3.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=SpellE>package_.<span +align=CENTER><span style='mso-tab-count:2'>�������� </span><span class=SpellE>package_.<span class=GramE>createElementImport</span></span><span class=GramE>(</span><span class=SpellE>primitiveType</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Primitive type '" + <span class=SpellE>primitiveType.getQualifiedName</span>()</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>+ "' imported.");</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>+ "' imported.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> <span +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> <span class=SpellE>primitiveType</span>;</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we load the model library <img border=0 width=24 height=14 id="_x0000_i1049" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>containing the UML primitive types (<span +style='mso-spacerun:yes'>�</span>containing the UML primitive types (<span style='font-family:"Courier New"'>Boolean</span>, <span style='font-family: "Courier New"'>Integer</span>, <span style='font-family:"Courier New"'>String</span>, and <span class=SpellE><span style='font-family:"Courier New"'>UnlimitedNatural</span></span>) @@ -727,28 +729,28 @@ class=SpellE><span style='font-family:"Courier New"'>UMLResource</span></span> interface. Next, we retrieve the desired (owned) primitive type from the model by name <img border=0 width=24 height=14 id="_x0000_i1050" src="../../../../images/tag_2.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>using one of the convenience methods defined +style='mso-spacerun:yes'>�</span>using one of the convenience methods defined in the UML2 API. Finally, we invoke another convenience method <img border=0 width=24 height=14 id="_x0000_i1051" src="../../../../images/tag_3.gif" -align=CENTER><span style='mso-spacerun:yes'> </span>to create the element +align=CENTER><span style='mso-spacerun:yes'>�</span>to create the element import relationship between the package and the element (with default public visibility), notify the user, and return the primitive type.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1052" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The UML resources plug-in (<span +style='mso-spacerun:yes'>�</span>The UML resources plug-in (<span style='font-family:"Courier New"'>org.eclipse.uml2.uml.resources</span>) provides several model libraries (which by convention have a <code>.<span class=SpellE>library.uml</span></code> file extension) that contain commonly used primitive types, such as those defined by Java and <span class=SpellE>Ecore</span> -(in addition to those defined by UML™ itself). These libraries can be accessed +(in addition to those defined by UML� itself). These libraries can be accessed using <span class=SpellE>URIs</span> defined on the <span class=SpellE><span style='font-family:"Courier New"'>UMLResource</span></span> interface, as shown above.</p> <p style='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'><img border=0 width=63 height=14 id="_x0000_i1053" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>In UML2, a method of the form <code>get<feature +style='mso-spacerun:yes'>�</span>In UML2, a method of the form <code>get<feature name<span class=GramE>>(</span>String)</code> exists for every feature that can contain or reference named elements. In this case, the package has a feature (<span class=SpellE><code>ownedType</code></span>) that can contain @@ -759,19 +761,19 @@ Behind the scenes, the package will iterate over all of its owned types and return the first one that it finds that has the specified (unqualified) name.</p> <p style='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'>OK, -let’s see this method in action. For example, we could import the primitive -type named ‘Boolean’ into profile ‘<span class=SpellE>ecore</span>’ as follows:</p> +let�s see this method in action. For example, we could import the primitive +type named �Boolean� into profile �<span class=SpellE>ecore</span>� as follows:</p> -<pre style='margin-left:8.5pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:8.5pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE>PrimitiveType</span> <span class=SpellE>booleanPrimitiveType</span> = <span class=SpellE><span class=GramE>importPrimitiveType</span></span><span class=GramE>(</span><span class=SpellE>ecoreProfile</span>,</pre><pre -style='margin-left:8.5pt'><span style='mso-tab-count:3'> </span>"Boolean");</pre> +style='margin-left:8.5pt'><span style='mso-tab-count:3'>������������������� </span>"Boolean");</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1054" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically import the -other required primitive type (i.e. ‘String’) into the <span class=SpellE>Ecore</span> +style='mso-spacerun:yes'>�</span>Write code to programmatically import the +other required primitive type (i.e. �String�) into the <span class=SpellE>Ecore</span> profile.</p> <h3 style='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'>Creating @@ -792,13 +794,13 @@ Right-click and select the <b>New Child > Packaged Element > Enumeration</ option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (i.e. “<span class=SpellE>VisibilityKind</span>”) for the <b>Name</b> +Enter a value (i.e. �<span class=SpellE>VisibilityKind</span>�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1055" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the other enumeration (i.e. “<span -class=SpellE>FeatureKind</span>”) for the <span class=SpellE>Ecore</span> +style='mso-spacerun:yes'>�</span>Create the other enumeration (i.e. �<span +class=SpellE>FeatureKind</span>�) for the <span class=SpellE>Ecore</span> profile using the UML editor.</p> <p style='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'>At @@ -810,51 +812,51 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=832 height=541 src="article_files/image010.jpg" v:shapes="_x0000_i1132"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below (from the <span style='font-family:"Courier New"'>GettingStartedWithUML2</span> class) shows a method that programmatically creates and returns an enumeration with a specified name in a specified package.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Enumeration <span class=SpellE>createEnumeration</span>(</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>org.eclipse.uml2.uml.Package package_, String name) {</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>org.eclipse.uml2.uml.Package package_, String name) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1056" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Enumeration <span class=SpellE>enumeration</span> = (Enumeration) package_</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>.<span +2'>�������� </span>Enumeration <span class=SpellE>enumeration</span> = (Enumeration) package_</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>createOwnedEnumeraton</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Enumeration '" + <span class=SpellE>enumeration.getQualifiedName</span>() + "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> enumeration;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> enumeration;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call the <span class=SpellE><span class=GramE><code>createOwnedEnumeration</code></span></span><span class=GramE><code>(</code></span><code>String)</code> convenience factory method <img border=0 width=24 height=13 id="_x0000_i1057" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to ask the package to create a primitive type with +style='mso-spacerun:yes'>�</span>to ask the package to create a primitive type with the specified name as one of its packaged elements.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create an enumeration -named ‘<span class=SpellE>VisibilityKind</span>’ in profile ‘<span -class=SpellE>ecore</span>’ as follows:</p> +let�s see this method in action. For example, we could create an enumeration +named �<span class=SpellE>VisibilityKind</span>� in profile �<span +class=SpellE>ecore</span>� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>Enumeration <span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>Enumeration <span class=SpellE>visibilityKindEnumeration</span> = GettingStartedWithUML2</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>.<span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>createEnumeration</span></span><span class=GramE>(</span><span class=SpellE>ecoreProfile</span>, "<span class=SpellE>VisibilityKind</span>");</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1058" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the -other enumeration (i.e. ‘<span class=SpellE>FeatureKind</span>’) for the <span +style='mso-spacerun:yes'>�</span>Write code to programmatically create the +other enumeration (i.e. �<span class=SpellE>FeatureKind</span>�) for the <span class=SpellE>Ecore</span> profile.</p> <h3 style='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'>Creating @@ -874,19 +876,19 @@ Right-click and select the <b>New Child > Owned Literal > Enumeration Literal</b> option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (i.e. “Unspecified”) for the <b>Name</b> property in the <b>Properties</b> +Enter a value (i.e. �Unspecified�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1059" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the remaining enumeration literals for -the <span class=SpellE>Ecore</span> profile (i.e. “None”, “<span class=SpellE>ReadOnly</span>”, -“<span class=SpellE>ReadWrite</span>”, “<span class=SpellE>ReadOnlyUnsettable</span>”, -and “<span class=SpellE>ReadWriteUnsettable</span>” for <b style='mso-bidi-font-weight: +style='mso-spacerun:yes'>�</span>Create the remaining enumeration literals for +the <span class=SpellE>Ecore</span> profile (i.e. �None�, �<span class=SpellE>ReadOnly</span>�, +�<span class=SpellE>ReadWrite</span>�, �<span class=SpellE>ReadOnlyUnsettable</span>�, +and �<span class=SpellE>ReadWriteUnsettable</span>� for <b style='mso-bidi-font-weight: normal'><<span style='mso-bidi-font-weight:bold'>Enumeration> <span -class=SpellE>VisibilityKind</span></span></b>; “Unspecified”, “Simple”, -“Attribute”, “Element”, “<span class=SpellE>AttributeWildcard</span>”, “<span -class=SpellE>ElementWildcard</span>”, and “Group” for <b style='mso-bidi-font-weight: +class=SpellE>VisibilityKind</span></span></b>; �Unspecified�, �Simple�, +�Attribute�, �Element�, �<span class=SpellE>AttributeWildcard</span>�, �<span +class=SpellE>ElementWildcard</span>�, and �Group� for <b style='mso-bidi-font-weight: normal'><<span style='mso-bidi-font-weight:bold'>Enumeration <span class=SpellE>FeatureKind</span>></span></b>) using the UML editor.</p> @@ -899,60 +901,60 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=928 height=810 src="article_files/image012.jpg" v:shapes="_x0000_i1133"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below (from the <span style='font-family:"Courier New"'>GettingStartedWithUML2</span> class) shows a method that programmatically creates and returns an enumeration literal with a specified name in a specified enumeration.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static <span class=SpellE>EnumerationLiteral</span> <span class=SpellE>createEnumerationLiteral</span>(</pre><pre style='margin-left: -9.0pt'><span style='mso-tab-count:3'> </span>Enumeration <span +9.0pt'><span style='mso-tab-count:3'>������������������� </span>Enumeration <span class=SpellE>enumeration</span>, String name) {</pre><pre style='margin-left: 9.0pt'><img border=0 width=24 height=13 id="_x0000_i1060" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span><span class=SpellE>EnumerationLiteral</span> <span +2'>�������� </span><span class=SpellE>EnumerationLiteral</span> <span class=SpellE>enumerationLiteral</span> = enumeration</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>.<span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>createOwnedLiteral</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Enumeration literal '" + <span class=SpellE>enumerationLiteral.getQualifiedName</span>()</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>+ "' created.");</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>+ "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> <span +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> <span class=SpellE>enumerationLiteral</span>;</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call the <span class=SpellE><span class=GramE><code>createOwnedLiteral</code></span></span><span class=GramE><code>(</code></span><code>String)</code> convenience factory method <img border=0 width=24 height=13 id="_x0000_i1061" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to ask the enumeration to create an +style='mso-spacerun:yes'>�</span>to ask the enumeration to create an enumeration literal with the specified name as one of its owned literals.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create an enumeration -literal named ‘Unspecified’ in enumeration ‘<span class=SpellE>VisibilityKind</span>’ +let�s see this method in action. For example, we could create an enumeration +literal named �Unspecified� in enumeration �<span class=SpellE>VisibilityKind</span>� as follows:</p> -<pre style='margin-left:8.5pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:8.5pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>GettingStartedWithUML2.createEnumerationLiteral(</span></pre><pre -style='margin-left:8.5pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:8.5pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>visibilityKindEnumeration</span></span>, "Unspecified");<span -style='mso-tab-count:2'> </span></pre> +style='mso-tab-count:2'>����������� </span></pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1062" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the -remaining enumeration literals (i.e. ‘None’, ‘<span class=SpellE>ReadOnly</span>’, -‘<span class=SpellE>ReadWrite</span>’, ‘<span class=SpellE>ReadOnlyUnsettable</span>’, -and ‘<span class=SpellE>ReadWriteUnsettable</span>’ in enumeration ‘<span -class=SpellE>VisibilityKind</span>’; ‘Unspecified’, ‘Simple’, ‘Attribute’, -‘Element’, ‘<span class=SpellE>AttributeWildcard</span>’, ‘<span class=SpellE>ElementWildcard</span>’, -and ‘Group’ in enumeration ‘<span class=SpellE>FeatureKind</span>’) for the <span +style='mso-spacerun:yes'>�</span>Write code to programmatically create the +remaining enumeration literals (i.e. �None�, �<span class=SpellE>ReadOnly</span>�, +�<span class=SpellE>ReadWrite</span>�, �<span class=SpellE>ReadOnlyUnsettable</span>�, +and �<span class=SpellE>ReadWriteUnsettable</span>� in enumeration �<span +class=SpellE>VisibilityKind</span>�; �Unspecified�, �Simple�, �Attribute�, +�Element�, �<span class=SpellE>AttributeWildcard</span>�, �<span class=SpellE>ElementWildcard</span>�, +and �Group� in enumeration �<span class=SpellE>FeatureKind</span>�) for the <span class=SpellE>Ecore</span> profile.</p> <h3 style='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'>Creating @@ -976,7 +978,7 @@ Right-click and select the <b>New Child > Packaged Element > Stereotype</b option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (i.e. “<span class=SpellE>EStructuralFeature</span>”) for the <b>Name</b> +Enter a value (i.e. �<span class=SpellE>EStructuralFeature</span>�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='margin-left:27.5pt;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'>4) @@ -986,9 +988,9 @@ property in the <b style='mso-bidi-font-weight:normal'>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1063" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the remaining stereotypes for the <span -class=SpellE>Ecore</span> profile (i.e. “<span class=SpellE>EAttribute</span>” -and “<span class=SpellE>EReference</span>”) using the UML editor.</p> +style='mso-spacerun:yes'>�</span>Create the remaining stereotypes for the <span +class=SpellE>Ecore</span> profile (i.e. �<span class=SpellE>EAttribute</span>� +and �<span class=SpellE>EReference</span>�) using the UML editor.</p> <p style='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'>At this point your workspace should look something like this:</p> @@ -999,55 +1001,55 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=928 height=810 src="article_files/image014.jpg" v:shapes="_x0000_i1134"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns <span class=GramE>a(</span>n) (abstract) stereotype with a specified name in a specified profile.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Stereotype <span class=SpellE>createStereotype</span>(Profile <span class=SpellE>profile</span>, String name,</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span><span class=SpellE><span +style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>boolean</span></span> <span class=SpellE>isAbstract</span>) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=14 id="_x0000_i1064" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Stereotype <span class=SpellE>stereotype</span> = <span +2'>�������� </span>Stereotype <span class=SpellE>stereotype</span> = <span class=SpellE><span class=GramE>profile.createOwnedStereotype</span></span><span class=GramE>(</span>name, <span class=SpellE>isAbstract</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Stereotype '" + <span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Stereotype '" + <span class=SpellE>stereotype.getQualifiedName</span>() + "' created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> stereotype;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> stereotype;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call the <span class=SpellE><span class=GramE><code>createOwnedStereotype</code></span></span><span class=GramE><code>(</code></span><code>String, <span class=SpellE>boolean</span>)</code> convenience factory method <img border=0 width=24 height=13 id="_x0000_i1065" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to ask the profile to create a stereotype with +style='mso-spacerun:yes'>�</span>to ask the profile to create a stereotype with the specified name as one of its owned members, and set the <span class=SpellE><code>isAbstract</code></span> attribute of the stereotype based on the specified <span class=SpellE><code>boolean</code></span> argument.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create an abstract -stereotype named ‘<span class=SpellE>EStructuralFeature</span>’ in profile ‘<span -class=SpellE>ecore</span>’ as follows:</p> +let�s see this method in action. For example, we could create an abstract +stereotype named �<span class=SpellE>EStructuralFeature</span>� in profile �<span +class=SpellE>ecore</span>� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>Stereotype <span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>Stereotype <span class=SpellE>eStructuralFeatureStereotype</span> = <span class=SpellE><span class=GramE>createStereotype</span></span><span class=GramE>(</span></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>ecoreProfile</span></span>, "<span class=SpellE>EStructuralFeature</span>", true);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1066" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the -remaining (non-abstract) stereotypes (i.e. ‘<span class=SpellE>EAttribute</span>’ -and ‘<span class=SpellE>EReference</span>’) for the <span class=SpellE>Ecore</span> +style='mso-spacerun:yes'>�</span>Write code to programmatically create the +remaining (non-abstract) stereotypes (i.e. �<span class=SpellE>EAttribute</span>� +and �<span class=SpellE>EReference</span>�) for the <span class=SpellE>Ecore</span> profile.</p> <h3 style='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'>Creating @@ -1075,14 +1077,14 @@ for the <b>General</b> property in the <b>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1067" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the other generalization (i.e. between <span +style='mso-spacerun:yes'>�</span>Create the other generalization (i.e. between <span class=SpellE><b style='mso-bidi-font-weight:normal'>EReference</b></span> and <span class=SpellE><b style='mso-bidi-font-weight:normal'>EStructuralFeature</b></span>) for the <span class=SpellE>Ecore</span> profile using the UML editor.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1068" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>Be sure to pick the stereotype (the first <span +style='mso-spacerun:yes'>�</span>Be sure to pick the stereotype (the first <span class=SpellE><b style='mso-bidi-font-weight:normal'>ecore::EStructuralFeature</b></span> item) and not the class (it should show up in <b style='mso-bidi-font-weight: normal'>Properties</b> view as <b style='mso-bidi-font-weight:normal'><Stereotype> @@ -1099,55 +1101,55 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=928 height=810 src="article_files/image016.jpg" v:shapes="_x0000_i1135"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below (from the <span style='font-family:"Courier New"'>GettingStartedWithUML2</span> class) shows a method that programmatically creates and returns generalization between specified specific and general classifiers.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Generalization <span class=SpellE>createGeneralization</span>(</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>Classifier <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>Classifier <span class=SpellE>specificClassifier</span>, Classifier <span class=SpellE>generalClassifier</span>) {</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>Generalization <span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>Generalization <span class=SpellE>generalization</span> = <span class=SpellE>specificClassifier</span></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1069" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -3'> </span>.<span class=SpellE><span class=GramE>createGeneralization</span></span><span +3'>���������������� </span>.<span class=SpellE><span class=GramE>createGeneralization</span></span><span class=GramE>(</span><span class=SpellE>generalClassifier</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Generalization " + <span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Generalization " + <span class=SpellE>specificClassifier.getQualifiedName</span>() + " ->> "</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>+ <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>+ <span class=SpellE><span class=GramE>generalClassifier.getQualifiedName</span></span><span class=GramE>(</span>) + " created.");</pre><pre style='margin-left: 9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> generalization;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> generalization;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call a convenience factory method on the specific classifier that creates a generalization <img border=0 width=24 height=13 id="_x0000_i1070" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>as one of its children and sets the general +style='mso-spacerun:yes'>�</span>as one of its children and sets the general classifier to the specified argument.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create a generalization -between specific stereotype ‘<span class=SpellE>EAttribute</span>’ and general -stereotype ‘<span class=SpellE>EStructuralFeature</span>’ as follows:</p> +let�s see this method in action. For example, we could create a generalization +between specific stereotype �<span class=SpellE>EAttribute</span>� and general +stereotype �<span class=SpellE>EStructuralFeature</span>� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>GettingStartedWithUML2.createGeneralization(</span><span class=SpellE>eAttributeStereotype</span>,</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span><span class=SpellE><span +style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>eStructuralFeatureStereotype</span></span>);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1071" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the -other generalization (i.e. between ‘<span class=SpellE>EReference</span>’ and ‘<span -class=SpellE>EStructuralFeature</span>’) for the <span class=SpellE>Ecore</span> +style='mso-spacerun:yes'>�</span>Write code to programmatically create the +other generalization (i.e. between �<span class=SpellE>EReference</span>� and �<span +class=SpellE>EStructuralFeature</span>�) for the <span class=SpellE>Ecore</span> profile.</p> <h3 style='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'>Creating @@ -1169,7 +1171,7 @@ Right-click and select the <b>New Child > Owned Attribute > Property</b> option from the context menu.</p> <p style='margin-left:27.5pt;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'>3) -Enter a value (i.e. "<span class=SpellE>isTransient</span>”) for the <b>Name</b> +Enter a value (i.e. "<span class=SpellE>isTransient</span>�) for the <b>Name</b> property in the <b>Properties</b> view.</p> <p style='margin-left:27.5pt;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'>4) @@ -1191,40 +1193,40 @@ Right-click and select the <b style='mso-bidi-font-weight:normal'>New Child <p style='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'><img border=0 width=62 height=13 id="_x0000_i1072" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>Default values for properties (and parameters) -are represented as value specifications (first-class objects) in UML™ 2.0. Here +style='mso-spacerun:yes'>�</span>Default values for properties (and parameters) +are represented as value specifications (first-class objects) in UML� 2.0. Here we have selected a literal Boolean (whose default value is <span style='font-family:"Courier New"'>false</span>) as the default value of our property since its type is <b style='mso-bidi-font-weight:normal'>Boolean</b>. If the type of the property were <b style='mso-bidi-font-weight:normal'>String</b>, -we’d have used a literal string instead. Once a default value specification has +we�d have used a literal string instead. Once a default value specification has been created, its value can alternatively be set with the owning property selected via the <b style='mso-bidi-font-weight:normal'>Default</b> property in the <b style='mso-bidi-font-weight:normal'>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1073" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the remaining stereotype properties for -the <span class=SpellE>Ecore</span> profile (i.e. “<span class=SpellE>isUnsettable</span>”, -“<span class=SpellE>isVolatile</span>”, “visibility”, “<span class=SpellE>xmlName</span>”, -“<span class=SpellE>xmlNamespace</span>”, and “<span class=SpellE>xmlFeatureKind</span>” +style='mso-spacerun:yes'>�</span>Create the remaining stereotype properties for +the <span class=SpellE>Ecore</span> profile (i.e. �<span class=SpellE>isUnsettable</span>�, +�<span class=SpellE>isVolatile</span>�, �visibility�, �<span class=SpellE>xmlName</span>�, +�<span class=SpellE>xmlNamespace</span>�, and �<span class=SpellE>xmlFeatureKind</span>� for <b style='mso-bidi-font-weight:normal'><Stereotype> <span -class=SpellE>EStructuralFeature</span></b>; “<span class=SpellE>attributeName</span>” -and “<span class=SpellE>isID</span>” for <b style='mso-bidi-font-weight:normal'><Stereotype> -<span class=SpellE>EAttribute</span></b>; “<span class=SpellE>referenceName</span>” -and “<span class=SpellE>isResolveProxies</span>” for <b style='mso-bidi-font-weight: +class=SpellE>EStructuralFeature</span></b>; �<span class=SpellE>attributeName</span>� +and �<span class=SpellE>isID</span>� for <b style='mso-bidi-font-weight:normal'><Stereotype> +<span class=SpellE>EAttribute</span></b>; �<span class=SpellE>referenceName</span>� +and �<span class=SpellE>isResolveProxies</span>� for <b style='mso-bidi-font-weight: normal'><Stereotype> <span class=SpellE>EReference</span></b>) using the UML editor.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1074" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>Be sure to set the appropriate default value +style='mso-spacerun:yes'>�</span>Be sure to set the appropriate default value for each stereotype property so that it is consistent with the corresponding <span class=SpellE>Ecore</span> property for Rose. In particular, the default value -for the “<span class=SpellE>isResolveProxies</span>” should be a literal +for the �<span class=SpellE>isResolveProxies</span>� should be a literal Boolean with a value of <b style='mso-bidi-font-weight:normal'>true</b> instead of the default (!) default value of <b style='mso-bidi-font-weight:normal'>false</b>. -Note also that the types of the “visibility” and “<span class=SpellE>xmlFeatureKind</span>” +Note also that the types of the �visibility� and �<span class=SpellE>xmlFeatureKind</span>� properties should be the enumerations we created earlier (i.e. <span class=SpellE><b style='mso-bidi-font-weight:normal'>ecore::<span style='mso-bidi-font-weight:bold'>Visibility</span></b></span> and <span @@ -1240,73 +1242,73 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=928 height=810 src="article_files/image018.jpg" v:shapes="_x0000_i1136"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below (from the <span style='font-family:"Courier New"'>GettingStartedWithUML2</span> class) shows a method that programmatically creates and returns an attribute with a specified upper bound, lower bound, type, and name in a specified class.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Property <span class=SpellE>createAttribute</span>(org.eclipse.uml2.uml.Class class_,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>String name, Type <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>String name, Type <span class=SpellE>type</span>, <span class=SpellE>int</span> <span class=SpellE>lowerBound</span>, <span class=SpellE>int</span> <span class=SpellE>upperBound</span>) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1075" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Property attribute = <span class=SpellE>class_.<span +2'>�������� </span>Property attribute = <span class=SpellE>class_.<span class=GramE>createOwnedAttribute</span></span><span class=GramE>(</span>name, type,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>lowerBound</span></span>, <span class=SpellE>upperBound</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE>StringBuffer</span> <span +style='mso-tab-count:2'>����������� </span><span class=SpellE>StringBuffer</span> <span class=SpellE>sb</span> = new <span class=SpellE><span class=GramE>StringBuffer</span></span><span class=GramE>(</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"Attribute '");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>attribute.getQualifiedName</span>());</pre><pre style='margin-left: 9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"' : ");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>type.getQualifiedName</span>());</pre><pre style='margin-left: 9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>" [");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>lowerBound</span>);</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"..");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span><span class=SpellE>LiteralUnlimitedNatural.UNLIMITED</span> == <span class=SpellE>upperBound</span></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>? "*"</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>: <span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>? "*"</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>: <span class=SpellE><span class=GramE>String.valueOf</span></span><span class=GramE>(</span><span class=SpellE>upperBound</span>));</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>"]");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=SpellE><span +style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>sb.append</span></span><span class=GramE>(</span>" created.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span><span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span><span class=SpellE>sb.toString</span>());</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> attribute;</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call the <span class=SpellE><code>createOwnedAttribute</code></span><code>(String, Type, <span class=SpellE>int</span>, <span class=SpellE>int</span>)</code> convenience factory method <img border=0 width=24 height=13 id="_x0000_i1076" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to ask the class to create a property as one +style='mso-spacerun:yes'>�</span>to ask the class to create a property as one of its owned attributes, set the type of the attribute to the specified type, and set the lower and upper bounds of the attribute (the factory method creates a literal integer and literal unlimited natural, respectively, and sets its @@ -1314,34 +1316,34 @@ value to the specified integer value).</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1077" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The <span class=SpellE><code>LiteralUnlimitedNatural.UNLIMITED</code></span> +style='mso-spacerun:yes'>�</span>The <span class=SpellE><code>LiteralUnlimitedNatural.UNLIMITED</code></span> constant represents the unlimited value for upper bounds (-1), as it does in EMF.</p> <p style='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'>OK, -let’s see this method in action. For example, we could create an attribute with -multiplicity 0<span class=GramE>..1</span> of type ‘<span class=SpellE>UMLPrimitiveTypes::Boolean</span>’ -named ‘<span class=SpellE>isTransient</span>’ in stereotype ‘<span -class=SpellE>EStructuralFeature</span>’ as follows:</p> +let�s see this method in action. For example, we could create an attribute with +multiplicity 0<span class=GramE>..1</span> of type �<span class=SpellE>UMLPrimitiveTypes::Boolean</span>� +named �<span class=SpellE>isTransient</span>� in stereotype �<span +class=SpellE>EStructuralFeature</span>� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>Property <span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>Property <span class=SpellE>isTransientProperty</span> = <span class=GramE>GettingStartedWithUML2.createAttribute(</span></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>eStructuralFeatureStereotype</span></span>, "<span class=SpellE>isTransient</span>", <span class=SpellE>booleanPrimitiveType</span>,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>0, 1);</pre> +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>0, 1);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1078" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the -remaining stereotype properties (i.e. ‘<span class=SpellE>isUnsettable</span>’, -‘<span class=SpellE>isVolatile</span>’, ‘visibility’, ‘<span class=SpellE>xmlName</span>’, -‘<span class=SpellE>xmlNamespace</span>’, and ‘<span class=SpellE>xmlFeatureKind</span>’ -in stereotype ‘<span class=SpellE>EStructuralFeature</span>’; ‘<span -class=SpellE>attributeName</span>’ and ‘<span class=SpellE>isID</span>’ in -stereotype ‘<span class=SpellE>EAttribute</span>’; ‘<span class=SpellE>referenceName</span>’ -and ‘<span class=SpellE>isResolveProxies</span>’ in stereotype ‘<span -class=SpellE>EReference</span>’) for the <span class=SpellE>Ecore</span> +style='mso-spacerun:yes'>�</span>Write code to programmatically create the +remaining stereotype properties (i.e. �<span class=SpellE>isUnsettable</span>�, +�<span class=SpellE>isVolatile</span>�, �visibility�, �<span class=SpellE>xmlName</span>�, +�<span class=SpellE>xmlNamespace</span>�, and �<span class=SpellE>xmlFeatureKind</span>� +in stereotype �<span class=SpellE>EStructuralFeature</span>�; �<span +class=SpellE>attributeName</span>� and �<span class=SpellE>isID</span>� in +stereotype �<span class=SpellE>EAttribute</span>�; �<span class=SpellE>referenceName</span>� +and �<span class=SpellE>isResolveProxies</span>� in stereotype �<span +class=SpellE>EReference</span>�) for the <span class=SpellE>Ecore</span> profile.</p> <h3 style='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'>Referencing @@ -1365,7 +1367,7 @@ in the UML editor.</p> <p style='margin-left:27.5pt;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'>2) Select the <b style='mso-bidi-font-weight:normal'>UML Editor > Profile > -Reference <span class=SpellE>Metaclass</span>…</b> menu item.</p> +Reference <span class=SpellE>Metaclass</span>�</b> menu item.</p> <p style='margin-left:27.5pt;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'>3) Choose a <span class=SpellE>metaclass</span> (i.e. <span class=SpellE><b @@ -1382,61 +1384,61 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=928 height=810 src="article_files/image020.jpg" v:shapes="_x0000_i1137"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically references the <span class=SpellE>metaclass</span> with a specified name in the UML <span class=SpellE>metamodel</span> from a specified profile and returns it.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static org.eclipse.uml2.uml.Class <span class=SpellE>referenceMetaclass</span>(Profile <span class=SpellE>profile</span>,</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span lang=IT style='mso-ansi-language:IT'>String name) {<o:p></o:p></span></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1079" src="../../../../images/tag_1.gif" align=CENTER><span lang=IT style='mso-ansi-language: -IT'><span style='mso-tab-count:2'> </span>Model umlMetamodel = (Model) load(URI<o:p></o:p></span></pre><pre +IT'><span style='mso-tab-count:2'>�������� </span>Model umlMetamodel = (Model) load(URI<o:p></o:p></span></pre><pre style='margin-left:9.0pt'><span lang=IT style='mso-ansi-language:IT'><span -style='mso-tab-count:3'> </span>.createURI(UML2Resource.UML2_METAMODEL_URI));<o:p></o:p></span></pre><pre +style='mso-tab-count:3'>������������������� </span>.createURI(UML2Resource.UML2_METAMODEL_URI));<o:p></o:p></span></pre><pre style='margin-left:9.0pt'><span lang=IT style='mso-ansi-language:IT'><o:p> </o:p></span></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1080" src="../../../../images/tag_2.gif" align=CENTER><span lang=IT style='mso-ansi-language: -IT'><span style='mso-tab-count:2'> </span>org.eclipse.uml2.Class metaclass = (org.eclipse.uml2.uml.Class) umlMetamodel<o:p></o:p></span></pre><pre +IT'><span style='mso-tab-count:2'>�������� </span>org.eclipse.uml2.Class metaclass = (org.eclipse.uml2.uml.Class) umlMetamodel<o:p></o:p></span></pre><pre style='margin-left:9.0pt'><span lang=IT style='mso-ansi-language:IT'><span -style='mso-tab-count:3'> </span></span>.<span class=SpellE><span +style='mso-tab-count:3'>������������������� </span></span>.<span class=SpellE><span class=GramE>getOwnedType</span></span><span class=GramE>(</span>name);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1081" src="../../../../images/tag_3.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=SpellE><span +align=CENTER><span style='mso-tab-count:2'>�������� </span><span class=SpellE><span class=GramE>profile.createMetaclassReference</span></span><span class=GramE>(</span><span class=SpellE>metaclass</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"<span class=SpellE>Metaclass</span> '" + <span class=SpellE>metaclass.getQualifiedName</span>() + "' referenced.");</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> <span +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> <span class=SpellE>metaclass</span>;</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we load the <span class=SpellE>metamodel</span> <img border=0 width=24 height=14 id="_x0000_i1082" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>containing the UML <span class=SpellE>metaclasses</span> +style='mso-spacerun:yes'>�</span>containing the UML <span class=SpellE>metaclasses</span> using a utility method (described later) and a URI defined on the <span class=SpellE><span style='font-family:"Courier New"'>UMLResource</span></span> interface. Next, we retrieve the desired (owned) <span class=SpellE>metaclass</span> from the (meta<span class=GramE>)model</span> by name <img border=0 width=24 height=14 id="_x0000_i1083" src="../../../../images/tag_2.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>using the convenience method. Finally, we +style='mso-spacerun:yes'>�</span>using the convenience method. Finally, we invoke another convenience method <img border=0 width=24 height=14 id="_x0000_i1084" src="../../../../images/tag_3.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to create the element import relationship +style='mso-spacerun:yes'>�</span>to create the element import relationship between the profile and the <span class=SpellE>metaclass</span>, notify the user, and return the <span class=SpellE>metaclass</span>.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1085" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The UML resources plug-in (<span +style='mso-spacerun:yes'>�</span>The UML resources plug-in (<span style='font-family:"Courier New"'>org.eclipse.uml2.uml.resources</span>) provides two <span class=SpellE>metamodels</span> (which by convention have a <code>.<span class=SpellE>metamodel.uml</span></code> file extension), UML2 and <span @@ -1446,14 +1448,14 @@ class=SpellE><span style='font-family:"Courier New"'>UMLResource</span></span> interface, as shown above.</p> <p style='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'>OK, -let’s see this method in action. For example, we could reference the <span -class=SpellE>metaclass</span> named ‘Property’ from profile ‘<span -class=SpellE>ecore</span>’ as follows:</p> +let�s see this method in action. For example, we could reference the <span +class=SpellE>metaclass</span> named �Property� from profile �<span +class=SpellE>ecore</span>� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>org.eclipse.uml2.uml.Class</span> <span class=SpellE>propertyMetaclass</span> = <span class=SpellE>referenceMetaclass</span>(</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span><span class=SpellE><span +style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>ecoreProfile</span></span>, <span class=SpellE>UMLPackage.Literals.PROPERTY.getName</span>());</pre> <h3 style='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'>Creating @@ -1477,7 +1479,7 @@ in the UML editor.</p> <p style='margin-left:27.5pt;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'>2) Select the <b style='mso-bidi-font-weight:normal'>UML Editor > Stereotype -> Create Extension…</b> menu item.</p> +> Create Extension�</b> menu item.</p> <p style='margin-left:27.5pt;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'>3) Choose a <span class=SpellE>metaclass</span> (i.e. <span class=SpellE><b>uml::</b><b @@ -1487,7 +1489,7 @@ press the <b style='mso-bidi-font-weight:normal'>Add</b> button, then press the <p style='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'><img border=0 width=61 height=13 id="_x0000_i1086" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Create the other extension (i.e. between <span +style='mso-spacerun:yes'>�</span>Create the other extension (i.e. between <span class=SpellE><b>uml::</b><b style='mso-bidi-font-weight:normal'>Property</b></span> and <b style='mso-bidi-font-weight:normal'><Stereotype> <span class=SpellE>EReference</span></b>) for the <span class=SpellE>Ecore</span> @@ -1504,83 +1506,83 @@ src="article_files/image022.jpg" v:shapes="_x0000_i1138"><![endif]></p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1087" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>You’ll notice that a number of new elements -have appeared in the UML editor. In particular, you’ll see a new stereotype +style='mso-spacerun:yes'>�</span>You�ll notice that a number of new elements +have appeared in the UML editor. In particular, you�ll see a new stereotype property with a name of the form <span style='font-family:"Courier New"'>base_<<span class=SpellE>metaclass</span> name></span>, an extension with a name of the form <span style='font-family:"Courier New"'><<span class=SpellE>metaclass</span> name>_<stereotype name></span>, and an extension end with a name of the form <span style='font-family:"Courier New"'>extension_<stereotype -name></span>. It’s important that these elements <b style='mso-bidi-font-weight: +name></span>. It�s important that these elements <b style='mso-bidi-font-weight: normal'>not</b> be modified, since the UML2 profile mechanism depends on these constructs.</p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically creates and returns <span class=GramE>a(</span>n) (required) extension between a specified <span class=SpellE>metaclass</span> and a specified stereotype.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static Extension <span class=SpellE>createExtension</span>(</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=GramE>org.eclipse.uml2.uml.Class</span> <span class=SpellE>metaclass</span>, Stereotype <span class=SpellE>stereotype</span>,</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:3'> </span><span class=SpellE><span +style='mso-tab-count:3'>������������������� </span><span class=SpellE><span class=GramE>boolean</span></span> required) {</pre><pre style='margin-left: 9.0pt'><img border=0 width=24 height=13 id="_x0000_i1088" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Extension <span class=SpellE>extension</span> = <span +2'>�������� </span>Extension <span class=SpellE>extension</span> = <span class=SpellE><span class=GramE>stereotype.createExtension</span></span><span class=GramE>(</span><span class=SpellE>metaclass</span>, required);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>(required</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>? "Required extension '"</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>: "Extension '") + <span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>(required</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>? "Required extension '"</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>: "Extension '") + <span class=SpellE><span class=GramE>extension.getQualifiedName</span></span><span class=GramE>(</span>) + "' created.");</pre><pre style='margin-left: 9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> extension;</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:2'>����������� </span><span class=GramE>return</span> extension;</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call a convenience method on the stereotype that creates an extension (and its ends) between it and a <span class=SpellE>metaclass</span> <img border=0 width=24 height=13 id="_x0000_i1089" src="../../../../images/tag_1.gif" -align=CENTER><span style='mso-spacerun:yes'> </span>as one of its siblings +align=CENTER><span style='mso-spacerun:yes'>�</span>as one of its siblings (i.e. as a child of its profile namespace). Behind the scenes, the stereotype also creates the ends of the extension, resulting in a new property on the stereotype (with a special name) and an extension end owned by the extension (again, with a special name).</p> <p style='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'>OK, -let’s see this method in action. For example, we could create a non-required -extension between <span class=SpellE>metaclass</span> ‘Property’ and stereotype -‘<span class=SpellE>EAttribute</span>’ in profile ‘<span class=SpellE>ecore</span>’ +let�s see this method in action. For example, we could create a non-required +extension between <span class=SpellE>metaclass</span> �Property� and stereotype +�<span class=SpellE>EAttribute</span>� in profile �<span class=SpellE>ecore</span>� as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>createExtension</span></span><span class=GramE>(</span><span class=SpellE>propertyMetaclass</span>, <span class=SpellE>eAttributeStereotype</span>, false);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1090" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically create the -other extension (i.e. between <span class=SpellE>metaclass</span> ‘Property’ -and stereotype ‘<span class=SpellE>EReference</span>’) for the <span +style='mso-spacerun:yes'>�</span>Write code to programmatically create the +other extension (i.e. between <span class=SpellE>metaclass</span> �Property� +and stereotype �<span class=SpellE>EReference</span>�) for the <span class=SpellE>Ecore</span> profile.</p> <h3 style='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'>Defining Profiles</h3> <p style='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'>There. -We’re done creating (a scaled down version of) the <span class=SpellE>Ecore</span> -<span class=GramE>profile,</span> and we’re ready to start using it. But before -we can, there’s one final thing we need to do – <i style='mso-bidi-font-style: +We�re done creating (a scaled down version of) the <span class=SpellE>Ecore</span> +<span class=GramE>profile,</span> and we�re ready to start using it. But before +we can, there�s one final thing we need to do � <i style='mso-bidi-font-style: normal'>define</i> it. Since a profile effectively represents an augmentation of a reference <span class=SpellE>metamodel</span> (UML), in order for the -extensions we’ve defined to appear as though they’re part of the UML <span -class=SpellE>metamodel</span>, they need to be “defined” at the meta-<span +extensions we�ve defined to appear as though they�re part of the UML <span +class=SpellE>metamodel</span>, they need to be �defined� at the meta-<span class=SpellE>metamodel</span> (i.e. <span class=SpellE>Ecore</span>) level. The implementation of profile support in UML2 does this by converting the contents of the profile to an equivalent <span class=SpellE>Ecore</span> representation @@ -1611,41 +1613,41 @@ src="article_files/image024.jpg" v:shapes="_x0000_i1139"><![endif]></p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1091" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>You’ll notice that an annotation with source <b +style='mso-spacerun:yes'>�</span>You�ll notice that an annotation with source <b style='mso-bidi-font-weight:normal'>http://www.eclipse.org/uml2/2.0.0/UML</b> has been attached to the profile. It contains the generated <span class=SpellE>Ecore</span> representation (an <span class=SpellE>Ecore</span> package with classes, attributes, <span class=SpellE>enums</span>, etc.) of the profile. As with -extensions, it’s important that this annotation (and its contents) <b +extensions, it�s important that this annotation (and its contents) <b style='mso-bidi-font-weight:normal'>not</b> be modified, since the UML2 profile mechanism depends on these constructs.</p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically defines a specified profile.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static void <span class=SpellE>defineProfile</span>(Profile <span class=SpellE>profile</span>) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1092" src="../../../../images/tag_1.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=SpellE><span +align=CENTER><span style='mso-tab-count:2'>�������� </span><span class=SpellE><span class=GramE>profile.define</span></span><span class=GramE>(</span>);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Profile '" + <span +style='mso-tab-count:2'>����������� </span><span class=GramE>out(</span>"Profile '" + <span class=SpellE>profile.getQualifiedName</span>() + "' defined.");</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call a convenience method on the profile <img border=0 width=24 height=13 id="_x0000_i1093" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>that generates the <span class=SpellE>Ecore</span> +style='mso-spacerun:yes'>�</span>that generates the <span class=SpellE>Ecore</span> representation of the profile and increments its version.</p> <p style='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'>OK, -let’s see this method in action. For example, we could define the ‘<span -class=SpellE>ecore</span>’ profile as follows:</p> +let�s see this method in action. For example, we could define the �<span +class=SpellE>ecore</span>� profile as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=SpellE><span class=GramE>defineProfile</span></span><span class=GramE>(</span><span class=SpellE>ecoreProfile</span>);</pre> @@ -1653,7 +1655,7 @@ class=SpellE>ecoreProfile</span>);</pre> Profiles</h3> <p style='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'>Now -that we’ve spent all this time creating and defining a profile, we’d better +that we�ve spent all this time creating and defining a profile, we�d better save our work. When we created our profile using the UML model wizard, a UML resource was created for us, so now all that needs to be done is to serialize the contents of our profile as XMI to a file on disk (i.e. <span class=SpellE><code>Ecore.profile.uml</code></span>). @@ -1662,67 +1664,67 @@ To save a profile using the UML editor, follow these steps:</p> <p style='margin-left:27.5pt;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'>1) Select the <b>File > Save</b> menu item.</p> -<p style='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'>It’s +<p style='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'>It�s that simple. Programmatically, we have a bit more work to do because so far, -we’ve been creating our profile in a vacuum, i.e. without a containing +we�ve been creating our profile in a vacuum, i.e. without a containing resource. The code snippet below shows a method that saves a specified package to a resource with a specified URI.</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static void save(org.eclipse.uml2.uml.Package package_, URI <span class=SpellE>uri</span>) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1094" src="../../../../images/tag_1.gif" -align=CENTER><span style='mso-tab-count:2'> </span>Resource <span +align=CENTER><span style='mso-tab-count:2'>�������� </span>Resource <span class=SpellE>resource</span> = <span class=SpellE>RESOURCE_<span class=GramE>SET.createResource</span></span><span class=GramE>(</span><span class=SpellE>uri</span>);</pre><pre style='margin-left: 9.0pt'><img border=0 width=24 height=13 id="_x0000_i1095" src="../../../../images/tag_2.gif" align=CENTER><span style='mso-tab-count: -2'> </span><span class=SpellE><span class=GramE>resource.getContents</span></span><span +2'>�������� </span><span class=SpellE><span class=GramE>resource.getContents</span></span><span class=GramE>(</span>).add(package_);</pre><pre style='margin-left:9.0pt'><o:p> </o:p></pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>try</span> {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1096" src="../../../../images/tag_3.gif" -align=CENTER><span style='mso-tab-count:3'> </span><span +align=CENTER><span style='mso-tab-count:3'>���������������� </span><span class=SpellE><span class=GramE>resource.save</span></span><span class=GramE>(</span>null);</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span><span class=GramE>out(</span>"Done.");</pre><pre style='margin-left:9.0pt'><span -style='mso-tab-count:2'> </span>} catch (<span class=SpellE>IOException</span> <span +style='mso-tab-count:2'>����������� </span>} catch (<span class=SpellE>IOException</span> <span class=SpellE>ioe</span>) {</pre><pre style='margin-left:9.0pt'><img border=0 width=24 height=13 id="_x0000_i1097" src="../../../../images/tag_4.gif" -align=CENTER><span style='mso-tab-count:3'> </span><span +align=CENTER><span style='mso-tab-count:3'>���������������� </span><span class=GramE>err(</span><span class=SpellE>ioe.getMessage</span>());</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span>}</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:1'> </span>}</pre> +style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span>}</pre><pre +style='margin-left:9.0pt'><span style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we use a statically initialized resource set <img border=0 width=24 height=13 id="_x0000_i1098" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>to create a resource with the specified URI, -add the package to the resource’s contents <img border=0 width=24 height=13 +style='mso-spacerun:yes'>�</span>to create a resource with the specified URI, +add the package to the resource�s contents <img border=0 width=24 height=13 id="_x0000_i1099" src="../../../../images/tag_2.gif" align=CENTER>, and ask the resource to save itself <img border=0 width=24 height=13 id="_x0000_i1100" src="../../../../images/tag_3.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>using the default options. If an exception +style='mso-spacerun:yes'>�</span>using the default options. If an exception occurs, we notify the user <img border=0 width=24 height=13 id="_x0000_i1101" src="../../../../images/tag_4.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>via our handy utility method.</p> +style='mso-spacerun:yes'>�</span>via our handy utility method.</p> <p style='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'>OK, -let’s see this method in action. For example, we could save the ‘<span -class=SpellE>ecore</span>’ profile to a resource with URI ‘<span class=SpellE>Ecore.profile.uml</span>’ +let�s see this method in action. For example, we could save the �<span +class=SpellE>ecore</span>� profile to a resource with URI �<span class=SpellE>Ecore.profile.uml</span>� (relative to a URI passed in as an argument) as follows:</p> -<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:9.0pt'><span style='mso-tab-count:2'>����������� </span><span class=GramE>save(</span><span class=SpellE>ecoreProfile</span>, <span class=SpellE>URI.createURI</span>(<span class=SpellE>args</span>[0]).<span class=SpellE>appendSegment</span>("<span class=SpellE>Ecore</span>")</pre><pre -style='margin-left:9.0pt'><span style='mso-tab-count:3'> </span>.<span +style='margin-left:9.0pt'><span style='mso-tab-count:3'>������������������� </span>.<span class=SpellE><span class=GramE>appendFileExtension</span></span><span class=GramE>(</span><span class=SpellE>UMLResource.PROFILE_FILE_EXTENSION</span>));</pre> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1102" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The <span class=SpellE><code>UMLResource.PROFILE_FILE_EXTENSION</code></span> +style='mso-spacerun:yes'>�</span>The <span class=SpellE><code>UMLResource.PROFILE_FILE_EXTENSION</code></span> constant represents the file extension for UML2 profiles (<code>.<span class=SpellE>profile.uml</span></code>).</p> @@ -1730,9 +1732,9 @@ class=SpellE>profile.uml</span></code>).</p> Models</h3> <p style='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'>In -order to make use of our profile, we’ll need to open a model and load the -profile. We’ll use the ExtendedPO2 model that was created in the “Getting -Started with UML2” article (you’ll need to copy it into your project and +order to make use of our profile, we�ll need to open a model and load the +profile. We�ll use the ExtendedPO2 model that was created in the �Getting +Started with UML2� article (you�ll need to copy it into your project and refresh the workspace first).</p> <p style='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'>To @@ -1744,19 +1746,19 @@ in the <b style='mso-bidi-font-weight:normal'>Navigator</b> view.</p> <p style='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'>Behind the scenes, a resource is obtained from the right kind resource factory (based -on the extension ‘<b style='mso-bidi-font-weight:normal'>.<span class=SpellE>uml</span></b>’) +on the extension �<b style='mso-bidi-font-weight:normal'>.<span class=SpellE>uml</span></b>�) and loaded, and then a new UML editor is opened and populated with the -resource’s contents.</p> +resource�s contents.</p> <p style='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'>To load a profile (or any resource, actually) using the UML editor, follow these steps:</p> <p style='margin-left:27.5pt;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'>1) -Select the <b>UML Editor > Load Resource…</b> menu item.</p> +Select the <b>UML Editor > Load Resource�</b> menu item.</p> <p style='margin-left:27.5pt;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'>2) -Press the <b>Browse Workspace…</b> button.</p> +Press the <b>Browse Workspace�</b> button.</p> <p style='margin-left:27.5pt;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'>3) Select a resource (i.e. <b>Introduction to UML2 Profiles/<span class=SpellE>Ecore.profile.uml</span></b>) @@ -1778,37 +1780,37 @@ src="article_files/image026.jpg" v:shapes="_x0000_i1140"><![endif]></p> we have a bit more work to do. The code snippet below shows a method that loads a package from a resource with a specified URI.</p> -<pre style='margin-left:.25in'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:.25in'><span style='mso-tab-count:1'>�� </span><span class=GramE>protected</span> static org.eclipse.uml2.uml.Package load(URI <span class=SpellE>uri</span>) {</pre><pre style='margin-left:.25in'><span -style='mso-tab-count:2'> </span>org.eclipse.uml2.uml.Package package_ = null;</pre><pre +style='mso-tab-count:2'>���������� </span>org.eclipse.uml2.uml.Package package_ = null;</pre><pre style='margin-left:.25in'><o:p> </o:p></pre><pre style='margin-left:.25in'><span -style='mso-tab-count:2'> </span><span class=GramE>try</span> {</pre><pre +style='mso-tab-count:2'>���������� </span><span class=GramE>try</span> {</pre><pre style='margin-left:.25in'><img border=0 width=24 height=13 id="_x0000_i1103" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -3'> </span>Resource <span class=SpellE>resource</span> = <span +3'>��������������� </span>Resource <span class=SpellE>resource</span> = <span class=SpellE>RESOURCE_<span class=GramE>SET.getResource</span></span><span class=GramE>(</span><span class=SpellE>uri</span>, true);</pre><pre style='margin-left:.25in'><o:p> </o:p></pre><pre style='margin-left:.25in'><img border=0 width=24 height=13 id="_x0000_i1104" src="../../../../images/tag_2.gif" -align=CENTER><span style='mso-tab-count:3'> </span>package_ = (org.eclipse.uml2.uml.Package) <span +align=CENTER><span style='mso-tab-count:3'>��������������� </span>package_ = (org.eclipse.uml2.uml.Package) <span class=SpellE><span class=GramE>EcoreUtil.getObjectByType</span></span><span class=GramE>(</span></pre><pre style='margin-left:.25in'><span -style='mso-tab-count:4'> </span><span class=SpellE><span +style='mso-tab-count:4'>������������������������� </span><span class=SpellE><span class=GramE>resource.getContents</span></span><span class=GramE>(</span>), <span class=SpellE>UMLPackage.Literals.PACKAGE</span>);</pre><pre style='margin-left: -.25in'><span style='mso-tab-count:2'> </span>} catch (<span +.25in'><span style='mso-tab-count:2'>���������� </span>} catch (<span class=SpellE>WrappedException</span> we) {</pre><pre style='margin-left:.25in'><img border=0 width=24 height=13 id="_x0000_i1105" src="../../../../images/tag_3.gif" -align=CENTER><span style='mso-tab-count:3'> </span><span +align=CENTER><span style='mso-tab-count:3'>��������������� </span><span class=GramE>err(</span><span class=SpellE>we.getMessage</span>());</pre><pre -style='margin-left:.25in'><span style='mso-tab-count:3'> </span><span +style='margin-left:.25in'><span style='mso-tab-count:3'>������������������ </span><span class=SpellE><span class=GramE>System.exit</span></span><span class=GramE>(</span>1);</pre><pre -style='margin-left:.25in'><span style='mso-tab-count:2'> </span>}</pre><pre +style='margin-left:.25in'><span style='mso-tab-count:2'>���������� </span>}</pre><pre style='margin-left:.25in'><o:p> </o:p></pre><pre style='margin-left:.25in'><img border=0 width=24 height=13 id="_x0000_i1106" src="../../../../images/tag_4.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=GramE>return</span> package_;</pre><pre -style='margin-left:.25in'><span style='mso-tab-count:1'> </span>}</pre> +align=CENTER><span style='mso-tab-count:2'>������� </span><span class=GramE>return</span> package_;</pre><pre +style='margin-left:.25in'><span style='mso-tab-count:1'>�� </span>}</pre> <p style='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'>Here we obtain a resource with the specified URI from our statically initialized @@ -1816,30 +1818,30 @@ resource <span class=GramE>set </span><img border=0 width=24 height=13 id="_x0000_i1107" src="../../../../images/tag_1.gif" align=CENTER>, asking that it be loaded on demand. Next, we use an EMF utility method <img border=0 width=24 height=13 id="_x0000_i1108" src="../../../../images/tag_2.gif" -align=CENTER><span style='mso-spacerun:yes'> </span>to obtain the first object +align=CENTER><span style='mso-spacerun:yes'>�</span>to obtain the first object of type <span style='font-family:"Courier New"'>Package</span> from the -resource’s contents. If an exception occurs, we notify the user <img border=0 +resource�s contents. If an exception occurs, we notify the user <img border=0 width=24 height=13 id="_x0000_i1109" src="../../../../images/tag_3.gif" -align=CENTER><span style='mso-spacerun:yes'> </span>via our handy utility +align=CENTER><span style='mso-spacerun:yes'>�</span>via our handy utility method. Finally, if all is well, we return <img border=0 width=24 height=13 id="_x0000_i1110" src="../../../../images/tag_4.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>the package.</p> +style='mso-spacerun:yes'>�</span>the package.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1111" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>The <span class=SpellE><code>EcoreUtil</code></span> +style='mso-spacerun:yes'>�</span>The <span class=SpellE><code>EcoreUtil</code></span> class (provided by EMF) defines a number of utilities that you may find quite useful when working with EMF-based resources.</p> <p style='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'>OK, -let’s see this method in action. For example, we could load the ‘epo2’ model -from a resource with URI ‘ExtendedPO2.uml’ (relative to a URI passed in as an +let�s see this method in action. For example, we could load the �epo2� model +from a resource with URI �ExtendedPO2.uml� (relative to a URI passed in as an argument) as follows:</p> -<pre style='margin-left:.25in'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:.25in'><span style='mso-tab-count:2'>���������� </span><span lang=IT style='mso-ansi-language:IT'>Model epo2Model = (Model) load(URI.createURI(args[0]).appendSegment(<o:p></o:p></span></pre><pre style='margin-left:.25in'><span lang=IT style='mso-ansi-language:IT'><span -style='mso-tab-count:3'> </span></span>"ExtendedPO2").<span +style='mso-tab-count:3'>������������������ </span></span>"ExtendedPO2").<span class=SpellE><span class=GramE>appendFileExtension</span></span><span class=GramE>(</span><span class=SpellE>UMLResource.FILE_EXTENSION</span>));</pre> @@ -1847,7 +1849,7 @@ class=GramE>(</span><span class=SpellE>UMLResource.FILE_EXTENSION</span>));</pre Profiles</h3> <p style='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'>OK, -our profile has been created, defined, and saved, and we’re ready to apply it to +our profile has been created, defined, and saved, and we�re ready to apply it to our model. Applying a profile means that it is allowed (but not necessarily required) to apply the stereotypes that are defined in the profile to elements in the package. A profile application is a special type of package import that @@ -1860,7 +1862,7 @@ epo2</b>) in the UML editor.</p> <p style='margin-left:27.5pt;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'>2) Select the <b style='mso-bidi-font-weight:normal'>UML Editor > Package > -Apply Profile…</b> menu item.</p> +Apply Profile�</b> menu item.</p> <p style='margin-left:27.5pt;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'>3) Choose a profile (i.e. <span class=SpellE><b style='mso-bidi-font-weight:normal'>ecore</b></span>)<span @@ -1869,7 +1871,7 @@ button, then press the <b style='mso-bidi-font-weight:normal'>OK</b> button.</p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1112" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>Be sure to pick the profile we’ve created instead +style='mso-spacerun:yes'>�</span>Be sure to pick the profile we�ve created instead of the built-in profile provided by the UML resources plug-in (i.e. <span class=SpellE><b style='mso-bidi-font-weight:normal'>ecore</b></span>, not <span class=SpellE><b style='mso-bidi-font-weight:normal'>Ecore</b></span>).</p> @@ -1885,57 +1887,57 @@ src="article_files/image028.jpg" v:shapes="_x0000_i1141"><![endif]></p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1113" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>You’ll notice another annotation (with source <b +style='mso-spacerun:yes'>�</span>You�ll notice another annotation (with source <b style='mso-bidi-font-weight:normal'>http://www.eclipse.org/uml2/2.0.0/UML</b>) has been attached, in this case to keep track of the <span class=SpellE>Ecore</span> representation for the definition of the profile that is currently applied to -the package. Again, it’s important that this annotation <b style='mso-bidi-font-weight: +the package. Again, it�s important that this annotation <b style='mso-bidi-font-weight: normal'>not</b> be modified, since the UML2 profile mechanism depends on this construct. Note that a newer definition of the profile can be applied using the same menu item, and a profile (along with all of its stereotypes) can be unapplied using the <b style='mso-bidi-font-weight:normal'>UML Editor > -Package > <span class=SpellE>Unapply</span> Profile…</b> menu item.</p> +Package > <span class=SpellE>Unapply</span> Profile�</b> menu item.</p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically applies a specified profile to a specified package.</p> -<pre style='margin-left:8.5pt'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:8.5pt'><span style='mso-tab-count:1'>���� </span><span class=GramE>protected</span> static void <span class=SpellE>applyProfile</span>(org.eclipse.uml2.uml.Package package_,</pre><pre -style='margin-left:8.5pt'><span style='mso-tab-count:3'> </span><span +style='margin-left:8.5pt'><span style='mso-tab-count:3'>������������������� </span><span lang=IT style='mso-ansi-language:IT'>Profile profile) {<o:p></o:p></span></pre><pre style='margin-left:8.5pt'><img border=0 width=24 height=13 id="_x0000_i1114" src="../../../../images/tag_1.gif" align=CENTER><span lang=IT style='mso-ansi-language: -IT'><span style='mso-tab-count:2'> </span>package_.applyProfile(profile);<o:p></o:p></span></pre><pre +IT'><span style='mso-tab-count:2'>�������� </span>package_.applyProfile(profile);<o:p></o:p></span></pre><pre style='margin-left:8.5pt'><span lang=IT style='mso-ansi-language:IT'><o:p> </o:p></span></pre><pre style='margin-left:8.5pt'><span lang=IT style='mso-ansi-language:IT'><span -style='mso-tab-count:2'> </span></span><span class=GramE>out(</span>"Profile '" + <span +style='mso-tab-count:2'>����������� </span></span><span class=GramE>out(</span>"Profile '" + <span class=SpellE>profile.getQualifiedName</span>() + "' applied to package '"</pre><pre -style='margin-left:8.5pt'><span style='mso-tab-count:3'> </span>+ <span +style='margin-left:8.5pt'><span style='mso-tab-count:3'>������������������� </span>+ <span class=SpellE>package_.<span class=GramE>getQualifiedName</span></span><span class=GramE>(</span>) + "'.");</pre><pre style='margin-left:8.5pt'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>���� </span>}</pre> <p style='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'>Here we call a convenience method on the package <img border=0 width=24 height=13 id="_x0000_i1115" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>that creates a profile application on the +style='mso-spacerun:yes'>�</span>that creates a profile application on the package and sets the profile as the imported profile.</p> <p style='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'>OK, -let’s see this method in action. For example, we could apply the ‘<span -class=SpellE>ecore</span>’ profile to the ‘epo2’ model as follows:</p> +let�s see this method in action. For example, we could apply the �<span +class=SpellE>ecore</span>� profile to the �epo2� model as follows:</p> -<pre><span style='mso-tab-count:2'> </span><span class=SpellE><span +<pre><span style='mso-tab-count:2'>������������� </span><span class=SpellE><span class=GramE>applyProfile</span></span><span class=GramE>(</span>epo2Model, <span class=SpellE>ecoreProfile</span>);</pre> <h3 style='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'>Applying Stereotypes</h3> -<p style='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'>We’re -on the home stretch now… Once a profile has been applied to a package, +<p style='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'>We�re +on the home stretch now� Once a profile has been applied to a package, stereotypes defined in the profile can be applied to instances of the appropriate <span class=SpellE>metaclasses</span> (as per the defined extensions). When a stereotype is applied to an element, that element is @@ -1952,7 +1954,7 @@ editor.</p> <p style='margin-left:27.5pt;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'>2) Select the <b style='mso-bidi-font-weight:normal'>UML Editor > Element > -Apply Stereotype…</b> menu item.</p> +Apply Stereotype�</b> menu item.</p> <p style='margin-left:27.5pt;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'>3) Choose a stereotype (i.e. <span class=SpellE><b style='mso-bidi-font-weight: @@ -1962,7 +1964,7 @@ style='mso-bidi-font-weight:normal'>OK</b> button.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1116" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Apply the appropriate stereotypes to other +style='mso-spacerun:yes'>�</span>Apply the appropriate stereotypes to other properties (<b style='mso-bidi-font-weight:normal'><Property> <span class=SpellE>shippedOrders</span> : <span class=SpellE>PurchaseOrder</span> [0..*]</b> in <b style='mso-bidi-font-weight:normal'><Class> Supplier</b>; @@ -1988,70 +1990,70 @@ src="article_files/image030.jpg" v:shapes="_x0000_i1142"><![endif]></p> <p style='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'><img border=0 width=62 height=13 id="_x0000_i1117" src="../../../../images/tip.gif"><span -style='mso-spacerun:yes'> </span>A stereotype (and its tagged values) can be +style='mso-spacerun:yes'>�</span>A stereotype (and its tagged values) can be unapplied using the <b style='mso-bidi-font-weight:normal'>UML Editor > -Element > <span class=SpellE>Unapply</span> Stereotype…</b> menu item.</p> +Element > <span class=SpellE>Unapply</span> Stereotype�</b> menu item.</p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically applies a specified stereotype to a specified (named) element.</p> -<pre style='margin-left:.25in'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:.25in'><span style='mso-tab-count:1'>�� </span><span class=GramE>protected</span> static void <span class=SpellE>applyStereotype</span>(<span class=SpellE>NamedElement</span> <span class=SpellE>namedElement</span>,</pre><pre -style='margin-left:.25in'><span style='mso-tab-count:3'> </span>Stereotype <span +style='margin-left:.25in'><span style='mso-tab-count:3'>������������������ </span>Stereotype <span class=SpellE>stereotype</span>) {</pre><pre style='margin-left:.25in'><img border=0 width=24 height=13 id="_x0000_i1118" src="../../../../images/tag_1.gif" -align=CENTER><span style='mso-tab-count:2'> </span><span class=SpellE><span +align=CENTER><span style='mso-tab-count:2'>������� </span><span class=SpellE><span class=GramE>namedElement.applyStereotype</span></span><span class=GramE>(</span>stereotype);</pre><pre style='margin-left:.25in'><o:p> </o:p></pre><pre style='margin-left:.25in'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Stereotype '" + <span +style='mso-tab-count:2'>���������� </span><span class=GramE>out(</span>"Stereotype '" + <span class=SpellE>stereotype.getQualifiedName</span>()</pre><pre style='margin-left: -.25in'><span style='mso-tab-count:3'> </span>+ "' applied to element '" + <span +.25in'><span style='mso-tab-count:3'>������������������ </span>+ "' applied to element '" + <span class=SpellE><span class=GramE>namedElement.getQualifiedName</span></span><span class=GramE>(</span>) + "'.");</pre><pre style='margin-left:.25in'><span -style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:1'>�� </span>}</pre> <p style='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'>Here we call a convenience method on the element <img border=0 width=24 height=13 id="_x0000_i1119" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>that creates an instance of the <span +style='mso-spacerun:yes'>�</span>that creates an instance of the <span class=SpellE>Ecore</span> class representing the specified stereotype (using dynamic EMF) and attaches it to the element using an annotation.</p> <p style='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'>OK, -let’s see this method in action. For example, we could apply the ‘<span -class=SpellE>EReference</span>’ stereotype to the ‘<span class=SpellE>pendingOrders</span>’ -property of the ‘Supplier’ class in the ‘epo2’ model as follows:</p> +let�s see this method in action. For example, we could apply the �<span +class=SpellE>EReference</span>� stereotype to the �<span class=SpellE>pendingOrders</span>� +property of the �Supplier� class in the �epo2� model as follows:</p> -<pre style='margin-left:.25in'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:.25in'><span style='mso-tab-count:2'>���������� </span><span class=GramE>org.eclipse.uml2.uml.Class</span> <span class=SpellE>supplierClass</span> = (org.eclipse.uml2.uml.Class) epo2Model</pre><pre -style='margin-left:.25in'><span style='mso-tab-count:3'> </span>.<span +style='margin-left:.25in'><span style='mso-tab-count:3'>������������������ </span>.<span class=SpellE><span class=GramE>getOwnedType</span></span><span class=GramE>(</span>"Supplier");</pre><pre style='margin-left:.25in'><o:p> </o:p></pre><pre style='margin-left:.25in'><span -style='mso-tab-count:2'> </span>Property <span class=SpellE>pendingOrdersProperty</span> = <span +style='mso-tab-count:2'>���������� </span>Property <span class=SpellE>pendingOrdersProperty</span> = <span class=SpellE>supplierClass</span></pre><pre style='margin-left:.25in'><span -style='mso-tab-count:3'> </span>.<span class=SpellE><span +style='mso-tab-count:3'>������������������ </span>.<span class=SpellE><span class=GramE>getOwnedAttribute</span></span><span class=GramE>(</span>"<span class=SpellE>pendingOrders</span>", null);</pre><pre style='margin-left: -.25in'><span style='mso-tab-count:2'> </span><span class=SpellE><span +.25in'><span style='mso-tab-count:2'>���������� </span><span class=SpellE><span class=GramE>applyStereotype</span></span><span class=GramE>(</span><span class=SpellE>pendingOrdersProperty</span>, <span class=SpellE>eReferenceStereotype</span>);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1120" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically apply the +style='mso-spacerun:yes'>�</span>Write code to programmatically apply the appropriate stereotypes to other properties (i.e. -‘epo2::Supplier::shippedOrders’, ‘epo2::PurchaseOrder::totalAmount’, -‘epo2::PurchaseOrder::previousOrder’, ‘epo2::PurchaseOrder::customer’, and -‘epo2::Customer::orders’) in the ExtendedPO2 model.</p> +�epo2::Supplier::shippedOrders�, �epo2::PurchaseOrder::totalAmount�, +�epo2::PurchaseOrder::previousOrder�, �epo2::PurchaseOrder::customer�, and +�epo2::Customer::orders�) in the ExtendedPO2 model.</p> <h3 style='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'>Accessing Stereotype Property Values</h3> <p style='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'>At -long last, we’re ready to get and set values for the properties (tagged values) +long last, we�re ready to get and set values for the properties (tagged values) defined in our extensions. To get and set the value for a stereotype property using the UML editor, follow these steps:</p> @@ -2071,7 +2073,7 @@ normal'>EReference</b></span>) in the <b>Properties</b> view.</p> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1121" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Get and set values for other stereotype +style='mso-spacerun:yes'>�</span>Get and set values for other stereotype properties (i.e. <b style='mso-bidi-font-weight:normal'>Is Transient</b> and <b style='mso-bidi-font-weight:normal'>Is Resolve Proxies</b> under <span class=SpellE><b style='mso-bidi-font-weight:normal'>EReference</b></span> for <b @@ -2116,56 +2118,56 @@ this point your workspace should look something like this:</p> </v:shape><![endif]--><![if !vml]><img border=0 width=928 height=946 src="article_files/image032.jpg" v:shapes="_x0000_i1143"><![endif]></p> -<p style='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'>Let’s +<p style='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'>Let�s look at how to perform the same task using Java code. The code snippet below shows a method that programmatically gets and returns the value of a specified property of a specified stereotype for a specified element.</p> -<pre style='margin-left:.25in'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:.25in'><span style='mso-tab-count:1'>�� </span><span class=GramE>protected</span> static Object <span class=SpellE>getStereotypePropertyValue</span>(</pre><pre -style='margin-left:.25in'><span style='mso-tab-count:3'> </span><span +style='margin-left:.25in'><span style='mso-tab-count:3'>������������������ </span><span class=SpellE>NamedElement</span> <span class=SpellE>namedElement</span>, Stereotype <span class=SpellE>stereotype</span>, Property <span class=SpellE>property</span>) {</pre><pre style='margin-left:.25in'><img border=0 width=24 height=13 id="_x0000_i1122" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span>Object value = <span class=SpellE><span class=GramE>namedElement.getValue</span></span><span +2'>������� </span>Object value = <span class=SpellE><span class=GramE>namedElement.getValue</span></span><span class=GramE>(</span>stereotype, <span class=SpellE>property.getName</span>());</pre><pre style='margin-left:.25in'><o:p> </o:p></pre><pre style='margin-left:.25in'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Value of stereotype property '" + <span +style='mso-tab-count:2'>���������� </span><span class=GramE>out(</span>"Value of stereotype property '" + <span class=SpellE>property.getQualifiedName</span>()</pre><pre style='margin-left: -.25in'><span style='mso-tab-count:3'> </span>+ "' on element '" + <span +.25in'><span style='mso-tab-count:3'>������������������ </span>+ "' on element '" + <span class=SpellE><span class=GramE>namedElement.getQualifiedName</span></span><span class=GramE>(</span>) + "' is "</pre><pre style='margin-left:.25in'><span -style='mso-tab-count:3'> </span>+ <span class=SpellE><span +style='mso-tab-count:3'>������������������ </span>+ <span class=SpellE><span class=GramE>String.valueOf</span></span><span class=GramE>(</span>value) + ".");</pre><pre style='margin-left:.25in'><o:p> </o:p></pre><pre style='margin-left:.25in'><span -style='mso-tab-count:2'> </span><span class=GramE>return</span> value;</pre><pre -style='margin-left:.25in'><span style='mso-tab-count:1'> </span>}</pre> +style='mso-tab-count:2'>���������� </span><span class=GramE>return</span> value;</pre><pre +style='margin-left:.25in'><span style='mso-tab-count:1'>�� </span>}</pre> <p style='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'>Here we call a convenience method on the (named) element <img border=0 width=24 height=13 id="_x0000_i1123" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>that retrieves the value of a property with a +style='mso-spacerun:yes'>�</span>that retrieves the value of a property with a specified name from the dynamically created <span class=SpellE>Ecore</span> object instance corresponding to the specified applied stereotype, notifies the user, and returns it.</p> <p style='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'>OK, -let’s see this method in action. For example, we could get the value of the ‘<span -class=SpellE>isVolatile</span>’ property of the ‘<span class=SpellE>EReference</span>’ -stereotype for the ‘<span class=SpellE>pendingOrders</span>’ property of the -‘Supplier’ class in the ‘epo2’ model as follows:</p> +let�s see this method in action. For example, we could get the value of the �<span +class=SpellE>isVolatile</span>� property of the �<span class=SpellE>EReference</span>� +stereotype for the �<span class=SpellE>pendingOrders</span>� property of the +�Supplier� class in the �epo2� model as follows:</p> -<pre style='margin-left:.25in'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:.25in'><span style='mso-tab-count:2'>���������� </span><span class=SpellE><span class=GramE>getStereotypePropertyValue</span></span><span class=GramE>(</span><span class=SpellE>pendingOrdersProperty</span>, <span class=SpellE>eReferenceStereotype</span>,</pre><pre style='margin-left:.25in'><span -style='mso-tab-count:3'> </span><span class=SpellE><span +style='mso-tab-count:3'>������������������ </span><span class=SpellE><span class=GramE>isVolatileProperty</span></span>);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1124" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically get the values +style='mso-spacerun:yes'>�</span>Write code to programmatically get the values of the other stereotype properties for elements in the ExtendedPO2 model.</p> <p style='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'>The @@ -2173,57 +2175,57 @@ code snippet below shows a method that programmatically sets the value of a specified property of a specified stereotype for a specified element to a specified value.</p> -<pre style='margin-left:.25in'><span style='mso-tab-count:1'> </span><span +<pre style='margin-left:.25in'><span style='mso-tab-count:1'>�� </span><span class=GramE>protected</span> static void <span class=SpellE>setStereotypePropertyValue</span>(<span class=SpellE>NamedElement</span> <span class=SpellE>namedElement</span>,</pre><pre -style='margin-left:.25in'><span style='mso-tab-count:3'> </span>Stereotype <span +style='margin-left:.25in'><span style='mso-tab-count:3'>������������������ </span>Stereotype <span class=SpellE>stereotype</span>, Property <span class=SpellE>property</span>, Object value) {</pre><pre style='margin-left:.25in'><img border=0 width=24 height=13 id="_x0000_i1125" src="../../../../images/tag_1.gif" align=CENTER><span style='mso-tab-count: -2'> </span><span class=SpellE><span class=GramE>namedElement.setValue</span></span><span +2'>������� </span><span class=SpellE><span class=GramE>namedElement.setValue</span></span><span class=GramE>(</span>stereotype, <span class=SpellE>property.getName</span>(), value);</pre><pre style='margin-left:.25in'><o:p> </o:p></pre><pre style='margin-left:.25in'><span -style='mso-tab-count:2'> </span><span class=GramE>out(</span>"Value of stereotype property '" + <span +style='mso-tab-count:2'>���������� </span><span class=GramE>out(</span>"Value of stereotype property '" + <span class=SpellE>property.getQualifiedName</span>()</pre><pre style='margin-left: -.25in'><span style='mso-tab-count:3'> </span>+ "' on element '" + <span +.25in'><span style='mso-tab-count:3'>������������������ </span>+ "' on element '" + <span class=SpellE><span class=GramE>namedElement.getQualifiedName</span></span><span class=GramE>(</span>) + "' set to "</pre><pre style='margin-left: -.25in'><span style='mso-tab-count:3'> </span>+ <span +.25in'><span style='mso-tab-count:3'>������������������ </span>+ <span class=SpellE><span class=GramE>String.valueOf</span></span><span class=GramE>(</span>value) + ".");</pre><pre -style='margin-left:.25in'><span style='mso-tab-count:1'> </span>}</pre> +style='margin-left:.25in'><span style='mso-tab-count:1'>�� </span>}</pre> <p style='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'>Here we call a convenience method on the (named) element <img border=0 width=24 height=13 id="_x0000_i1126" src="../../../../images/tag_1.gif" align=CENTER><span -style='mso-spacerun:yes'> </span>that sets the value of a property with a +style='mso-spacerun:yes'>�</span>that sets the value of a property with a specified name in the dynamically created <span class=SpellE>Ecore</span> object instance corresponding to the specified applied stereotype and notifies the user.</p> <p style='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'>OK, -let’s see this method in action. For example, we could set the value of the ‘<span -class=SpellE>isVolatile</span>’ property of the ‘<span class=SpellE>EReference</span>’ -stereotype for the ‘<span class=SpellE>pendingOrders</span>’ property of the -‘Supplier’ class in the ‘epo2’ model to <span class=SpellE><span +let�s see this method in action. For example, we could set the value of the �<span +class=SpellE>isVolatile</span>� property of the �<span class=SpellE>EReference</span>� +stereotype for the �<span class=SpellE>pendingOrders</span>� property of the +�Supplier� class in the �epo2� model to <span class=SpellE><span style='font-family:"Courier New"'>Boolean.TRUE</span></span> as follows:</p> -<pre style='margin-left:.25in'><span style='mso-tab-count:2'> </span><span +<pre style='margin-left:.25in'><span style='mso-tab-count:2'>���������� </span><span class=SpellE><span class=GramE>setStereotypePropertyValue</span></span><span class=GramE>(</span><span class=SpellE>pendingOrdersProperty</span>, <span class=SpellE>eReferenceStereotype</span>,</pre><pre style='margin-left:.25in'><span -style='mso-tab-count:3'> </span><span class=SpellE><span +style='mso-tab-count:3'>������������������ </span><span class=SpellE><span class=GramE>isVolatileProperty</span></span>, <span class=SpellE>Boolean.TRUE</span>);</pre> <p style='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'><img border=0 width=61 height=13 id="_x0000_i1127" src="../../../../images/tryit.gif"><span -style='mso-spacerun:yes'> </span>Write code to programmatically set the values +style='mso-spacerun:yes'>�</span>Write code to programmatically set the values of the other stereotype properties for elements in the ExtendedPO2 model.</p> <h2 style='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'>Conclusion</h2> <p style='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'>Congratulations! -If you’ve made it this far, you’ve successfully created and applied a simple -profile programmatically and/or using the UML editor. There’s a whole lot more +If you�ve made it this far, you�ve successfully created and applied a simple +profile programmatically and/or using the UML editor. There�s a whole lot more that could be said, but the purpose of this article was just to introduce you to the concepts. Stay tuned for more articles on how to develop tools with UML2.</p> @@ -2236,7 +2238,7 @@ join the <a href="news://news.eclipse.org/eclipse.modeling.mdt.uml2">newsgroup</ <h2 style='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'>References</h2> <p style='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'>[1] -K. Hussey. <span class=GramE>“Getting Started with UML2”.</span> International +K. Hussey. <span class=GramE>�Getting Started with UML2�.</span> International Business Machines Corp., 2004, 2006.</p> <p style='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'><span @@ -2254,17 +2256,17 @@ run the example or view the source code for this article, unzip <a href="http://download.eclipse.org/modeling/mdt/uml2/downloads/articles/uml2.articles_200607181325.zip">uml2.articles_200607181325.zip</a> into your Eclipse home directory and import the <code>com.ibm.uml2.articles</code> plug-in into your workspace as a binary project with linked content (<b>File -> Import… > External Plug-ins and Fragments</b>). You can run the <code>IntroductionToUML2Profiles</code> +> Import� > External Plug-ins and Fragments</b>). You can run the <code>IntroductionToUML2Profiles</code> class as a Java application with two file <span class=SpellE>URIs</span> (e.g. -“file:/C:/Introduction to UML2 Profiles” “<span class=SpellE>jar<span +�file:/C:/Introduction to UML2 Profiles� �<span class=SpellE>jar<span class=GramE>:file</span></span>:/C:/Eclipse -3.2/eclipse/plugins/org.eclipse.uml2.uml.resources_2.0.0.v200606221411.jar!/”) +3.2/eclipse/plugins/org.eclipse.uml2.uml.resources_2.0.0.v200606221411.jar!/�) as program arguments. The first URI should refer to a folder that contains the -ExtendedPO2 model described in the “Getting Started with UML2” article. The +ExtendedPO2 model described in the �Getting Started with UML2� article. The second URI should use the JAR scheme (since the UML resources plug-in is <span -class=SpellE>JAR’d</span> as of UML2 1.1) and refer to the location of the <span +class=SpellE>JAR�d</span> as of UML2 1.1) and refer to the location of the <span style='font-family:"Courier New"'>org.eclipse.uml2.uml.resources</span> plug-<span -class=SpellE>in’s</span> JAR archive.</p> +class=SpellE>in�s</span> JAR archive.</p> <p style='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'><span style='font-size:7.5pt'>Java and all Java-based trademarks and logos are |