<br><font size=2 face="sans-serif">Dear Tivadar,</font>
<br>
<br><font size=2 face="sans-serif">to create an association from the AM
code you can use one of the following. </font>
<br>
<br><font size=2 face="sans-serif">1. Use UDM's generic API </font>
<br>
<br><font size=2 face="sans-serif">sample code below (this is code that
I wrote in AM of GReAT where OrState is the parent of the relation and
NewState and DataVar are pattern instances available in the rule)</font>
<br>
<br><font size=2 face="sans-serif">Uml::Class kind = Uml::classByName(OrState.__impl()-&gt;__getdn()-&gt;GetRootMeta(),
&quot;StateDataRelation&quot;);</font>
<br><font size=2 face="sans-serif">if (!kind) return;</font>
<br>
<br><font size=2 face="sans-serif">Udm::Object pso = OrState.CreateObject(kind);</font>
<br><font size=2 face="sans-serif">if(pso==Udm::null)</font>
<br><font size=2 face="sans-serif">{ &nbsp; printf(&quot;\n Error: Creation
of Object failed \n&quot;);</font>
<br><font size=2 face="sans-serif">}</font>
<br><font size=2 face="sans-serif">else</font>
<br><font size=2 face="sans-serif">{ &nbsp; &nbsp; &nbsp; &nbsp;pso.SetStrValue(&quot;Value&quot;,
val);</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; pso.SetStrValue(&quot;Color&quot;,
&quot;black&quot;);</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; Udm::Object::AssociationInfo
inf(kind);</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; inf.strSrcRoleName
= &quot;states&quot;;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; inf.strDstRoleName
= &quot;data&quot;;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; NewState.CreateLink(pso,
inf);</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; inf.strSrcRoleName
= &quot;data&quot;;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; inf.strDstRoleName
= &quot;states&quot;;</font>
<br><font size=2 face="sans-serif">&nbsp; &nbsp; &nbsp; &nbsp; DataVar.CreateLink(pso,
inf);</font>
<br><font size=2 face="sans-serif">}</font>
<br>
<br><font size=2 face="sans-serif">2. As far as I know you should also
be able to use the custom API to do the same </font>
<br>
<br><font size=2 face="sans-serif">some thing like this </font>
<br>
<br>
<br><font size=2 face="sans-serif">StateDataRelation rel = StateDataRelation::Create(OrState);</font>
<br>
<br><font size=2 face="sans-serif">rel.states() += NewState;</font>
<br><font size=2 face="sans-serif">rel.data() = DataVar;</font>
<br>
<br>
<br><font size=2 face="sans-serif">Thanks,</font>
<br><font size=2 face="sans-serif">Adi</font>
<br>
<br><font size=2 face="sans-serif">-----------------------------------<br>
Aditya Agrawal<br>
Researcher<br>
IBM T. J. Watson<br>
mailto:aagrawa@us.ibm.com<br>
+1 (914) 784-6068 (TL 863)<br>
</font>
<br>
<br><font size=2><tt>great-users-bounces@list.isis.vanderbilt.edu wrote
on 04/09/2005 11:04:05 AM:<br>
<br>
&gt; Hello,<br>
&gt; <br>
&gt; Thanks for the answers.<br>
&gt; Looks like the problem can be solved by<br>
&gt; <br>
&gt; 1) identifying the archetype from a guard/AttrMap code using Endre's
code<br>
&gt; 2) from the same guard/AttrMap create an association (defined in<br>
&gt; CrossLinks) between the object and it's archetype<br>
&gt; 3) match this association from a subsequent GReAT rule<br>
&gt; <br>
&gt; Let's say I have an association between two MyObjects (srcMyObject,<br>
&gt; dstMyObject) defined in CrossLinks.<br>
&gt; <br>
&gt; How do I create the association of step 2) ?<br>
&gt; <br>
&gt; I tried to look at the generated code &nbsp;of a GReAT rule for creating
such<br>
&gt; association, and replicate it, but it did not work.<br>
&gt; <br>
&gt; <br>
&gt; Thanks,<br>
&gt; <br>
&gt; Tivadar<br>
&gt; <br>
&gt; Endre Magyari wrote:<br>
&gt; <br>
&gt; &gt;<br>
&gt; &gt; Then the code is:<br>
&gt; &gt;<br>
&gt; &gt; Udm::Object o;<br>
&gt; &gt;<br>
&gt; &gt; if (o.isInstance())<br>
&gt; &gt; {<br>
&gt; &gt; &nbsp; &nbsp; //o is an instance, only it's type can be modified<br>
&gt; &gt; &nbsp; &nbsp; Udm::Object type = o.archetype();<br>
&gt; &gt; &nbsp; &nbsp; //modify type<br>
&gt; &gt; }<br>
&gt; &gt; else<br>
&gt; &gt; {<br>
&gt; &gt; &nbsp; &nbsp; //o is not an instance, it's either an normal object(model,
fco,<br>
&gt; &gt; atom) or &nbsp;a derived object, which can be modified.<br>
&gt; &gt; &nbsp; &nbsp; //if it's a derived object, isSubtype() returns
true<br>
&gt; &gt; };<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Note that this is generic code, but since all generated types
are <br>
&gt; &gt; inherited from &nbsp;Udm::Object, isInstance(), isSubtype() works.<br>
&gt; &gt; For the generated classes in UDM API there is also available
an <br>
&gt; &gt; Archetype()call, which is typed, it returns with an object of
the<br>
&gt; &gt; same &nbsp;type.<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; Endre<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt; On Fri, 8 Apr 2005 10:20:39 -0500, Attila Vizhanyo <br>
&gt; &gt; &lt;viza@isis.vanderbilt.edu&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt;&gt; Tivadar wants to (1) query if an object is instance or not
(2) if it is,<br>
&gt; &gt;&gt; get access to its type object, and modify the type object.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; -----Original Message-----<br>
&gt; &gt;&gt;&gt; From: Endre Magyari<br>
&gt; &gt;&gt;&gt; Sent: Friday, April 08, 2005 2:06<br>
&gt; &gt;&gt;&gt; To: udm-users<br>
&gt; &gt;&gt;&gt; Cc: This is a list for GReAT developers to exchange<br>
&gt; &gt;&gt;&gt; development related thoughts and ideas<br>
&gt; &gt;&gt;&gt; Subject: [great-dev] Re: [udm-users] RE: [great-users]
&quot;Com<br>
&gt; &gt;&gt;&gt; exception: Object cannot bechanged&quot;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Attila,<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; &nbsp; &nbsp; there is no UDM API which permits to modify
an instance<br>
&gt; &gt;&gt;&gt; object - besides,<br>
&gt; &gt;&gt;&gt; Tivadar is talking about a COM exception thrown by MGA
layer.<br>
&gt; &gt;&gt;&gt; &nbsp; &nbsp; So, what kind of solution did you mean
?<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; Thanks,<br>
&gt; &gt;&gt;&gt; Endre<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; On Thu, 7 Apr 2005 16:42:22 -0500, Attila Vizhanyo<br>
&gt; &gt;&gt;&gt; &lt;viza@isis.vanderbilt.edu&gt; wrote:<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt; I believe these problems can be solved using the
UDM API<br>
&gt; &gt;&gt;&gt; from Guard/<br>
&gt; &gt;&gt;&gt; &gt; AttributeMapping code. I'm forwarding your post
to the<br>
&gt; &gt;&gt;&gt; udm-users list.<br>
&gt; &gt;&gt;&gt; &gt;<br>
&gt; &gt;&gt;&gt; &gt; Thanks,<br>
&gt; &gt;&gt;&gt; &gt; Attila<br>
&gt; &gt;&gt;&gt; &gt;<br>
&gt; &gt;&gt;&gt; &gt;<br>
&gt; &gt;&gt;&gt; &gt;&gt; -----Original Message-----<br>
&gt; &gt;&gt;&gt; &gt;&gt; From: Tivadar Szemethy<br>
&gt; &gt;&gt;&gt; &gt;&gt; Sent: Thursday, April 07, 2005 16:28<br>
&gt; &gt;&gt;&gt; &gt;&gt; To: great-users<br>
&gt; &gt;&gt;&gt; &gt;&gt; Subject: [great-users] &quot;Com exception:
Object cannot be changed&quot;<br>
&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt;&gt; Hello,<br>
&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt;&gt; In a GReAT transformation, I have to make temporary<br>
&gt; &gt;&gt;&gt; modifications to<br>
&gt; &gt;&gt;&gt; &gt;&gt; my src model in order to make further processing
easier. However,<br>
&gt; &gt;&gt;&gt; &gt;&gt; some of the objects in the src are Instances
(as in General<br>
&gt; &gt;&gt;&gt; &gt;&gt; Properties/Type in the Attribute Panel in GME)
of other objects<br>
&gt; &gt;&gt;&gt; &gt;&gt; defined in a &quot;Model Library&quot; folder
in the src model.<br>
&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt;&gt; As I understand, instances cannot be modified.<br>
&gt; &gt;&gt;&gt; &gt;&gt; Therefore, I need to come up with a GReAT rule,
which:<br>
&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt;&gt; a) checks whether the object in question is
an Instance or not<br>
&gt; &gt;&gt;&gt; &gt;&gt; b) if it is, returns the corresponding &quot;Template&quot;
object<br>
&gt; &gt;&gt;&gt; which can be<br>
&gt; &gt;&gt;&gt; &gt;&gt; modified<br>
&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt;&gt; How do I do this ?<br>
&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt;&gt; Thanks,<br>
&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt;&gt; Tivadar<br>
&gt; &gt;&gt;&gt; &gt;&gt; _______________________________________________<br>
&gt; &gt;&gt;&gt; &gt;&gt; great-users mailing list great-users@list.isis.vanderbilt.edu<br>
&gt; &gt;&gt;&gt; &gt;&gt; http://list.isis.vanderbilt.edu/mailman/listinfo/great-users<br>
&gt; &gt;&gt;&gt; &gt;&gt;<br>
&gt; &gt;&gt;&gt; &gt; _______________________________________________<br>
&gt; &gt;&gt;&gt; &gt; udm-users mailing list<br>
&gt; &gt;&gt;&gt; &gt; udm-users@list.isis.vanderbilt.edu<br>
&gt; &gt;&gt;&gt; &gt; http://list.isis.vanderbilt.edu/mailman/listinfo/udm-users<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt;&gt; _______________________________________________<br>
&gt; &gt;&gt;&gt; great-dev mailing list<br>
&gt; &gt;&gt;&gt; great-dev@list.isis.vanderbilt.edu<br>
&gt; &gt;&gt;&gt; http://list.isis.vanderbilt.edu/mailman/listinfo/great-dev<br>
&gt; &gt;&gt;&gt;<br>
&gt; &gt;&gt; _______________________________________________<br>
&gt; &gt;&gt; great-dev mailing list<br>
&gt; &gt;&gt; great-dev@list.isis.vanderbilt.edu<br>
&gt; &gt;&gt; http://list.isis.vanderbilt.edu/mailman/listinfo/great-dev<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; &gt;<br>
&gt; <br>
&gt; <br>
&gt; _______________________________________________<br>
&gt; great-users mailing list<br>
&gt; great-users@list.isis.vanderbilt.edu<br>
&gt; http://list.isis.vanderbilt.edu/mailman/listinfo/great-users<br>
</tt></font>