Home » Modeling » UML2 » IntroductionToUMLProfiles Question
| |
Re: IntroductionToUMLProfiles Question [message #1384694 is a reply to message #1384627] |
Fri, 30 May 2014 13:25 |
|
Hi, Bill,
See seome replies in-line, below.
HTH,
Christian
On 2014-05-29 23:52:47 +0000, Bill McLaren said:
> In the IntroductionToUMLProfiles example, we create a profile and apply
> a stereotype to some EAttributes and ERelationships. In Luna RC1 I'm
> having a challenge enhancing the example when attempting to save the
> modified epo2Model after all of the new stereotype attributes are set
> and then read.
>
> If I follow the tutorial using the graphical UML tree editor, it saves
> the modifications just fine, but it also modifies the model UML file by
> moving the UML XML element into an outer xmi:XMI element. The build
> from code method doesn't do this.
The <xmi:XMI> element is a container for serialization purposes only,
to contain multiple elements that logically are roots of the resource.
The XML document format is a single-rooted tree structure, so this
basically ensures that you have a valid XML document. On loading a
resource, EMF elides the <xmi:XMI> element and presents its children as
the roots of the resource.
So, this suggests to me that you are getting the correct serialization
by walking through the example in the UML Editor but not when running
your code.
> I tried adding XMI2UMLResource.Factory.INSTANCE to the initial
> RESOURCE_SET registration and was able to get the file to save in the
> right XMI format, but the save method doesn't persist the stereotype
> attributes that were set in the code. I'm happy to post what I've
> written but it's really straightforward and feel that I'm probably
> missing something that may be version related to help steer the model
> into a newer format.
The XMI2UMLResource has nothing to do with, I expect.
> Any guidance would be appreciated. I've been reading the tests,
> google, etc... but haven't found the answer.
Indeed, details like this are hidden in dark corners where even the
might Google has difficulty seeing. :-)
I suspect the problem is in the way you save the resource. If I add
the following to the end of the main() method of the
IntroductionToUMLProfiles example, I get the updated model correctly
saved with the stereotype applications in an <xmi:XMI> container:
Resource res = epo2Model.eResource();
URI newURI = res.getURI().trimSegments(1).appendSegment("updated.uml");
// This saves the model and the stereotype applications that were added
// to its resource
res.setURI(newURI);
res.save(null);
// This would only save the model because it adds the passed-in package
// to a new resource, omitting all of the stereotype applications
//save(epo2Model, newURI);
I suspect you are doing something like the commented-out second
approach to saving. but, by all means, share your code so that
everybody reading the newsgroup may learn from it!
>
> -Bill
|
|
|
Re: IntroductionToUMLProfiles Question [message #1384701 is a reply to message #1384694] |
Fri, 30 May 2014 14:27 |
Ed Willink Messages: 7655 Registered: July 2009 |
Senior Member |
|
|
Hi Christian
It seems that while the example save() method is fine for the purposes
of the example, it is misleading for more general use.
Perhaps we want to upgrade save() on both examples and add a step
similar to Bill's in the real tutorial.
Regards
Ed
On 30/05/2014 14:25, Christian W. Damus wrote:
> Hi, Bill,
>
> See seome replies in-line, below.
>
> HTH,
>
> Christian
>
> On 2014-05-29 23:52:47 +0000, Bill McLaren said:
>
>> In the IntroductionToUMLProfiles example, we create a profile and
>> apply a stereotype to some EAttributes and ERelationships. In Luna
>> RC1 I'm having a challenge enhancing the example when attempting to
>> save the modified epo2Model after all of the new stereotype
>> attributes are set and then read.
>>
>> If I follow the tutorial using the graphical UML tree editor, it
>> saves the modifications just fine, but it also modifies the model UML
>> file by moving the UML XML element into an outer xmi:XMI element.
>> The build from code method doesn't do this.
>
> The <xmi:XMI> element is a container for serialization purposes only,
> to contain multiple elements that logically are roots of the
> resource. The XML document format is a single-rooted tree structure,
> so this basically ensures that you have a valid XML document. On
> loading a resource, EMF elides the <xmi:XMI> element and presents its
> children as the roots of the resource.
>
> So, this suggests to me that you are getting the correct serialization
> by walking through the example in the UML Editor but not when running
> your code.
>
>> I tried adding XMI2UMLResource.Factory.INSTANCE to the initial
>> RESOURCE_SET registration and was able to get the file to save in the
>> right XMI format, but the save method doesn't persist the stereotype
>> attributes that were set in the code. I'm happy to post what I've
>> written but it's really straightforward and feel that I'm probably
>> missing something that may be version related to help steer the model
>> into a newer format.
>
> The XMI2UMLResource has nothing to do with, I expect.
>
>
>> Any guidance would be appreciated. I've been reading the tests,
>> google, etc... but haven't found the answer.
>
> Indeed, details like this are hidden in dark corners where even the
> might Google has difficulty seeing. :-)
>
> I suspect the problem is in the way you save the resource. If I add
> the following to the end of the main() method of the
> IntroductionToUMLProfiles example, I get the updated model correctly
> saved with the stereotype applications in an <xmi:XMI> container:
>
>
> Resource res = epo2Model.eResource();
> URI newURI =
> res.getURI().trimSegments(1).appendSegment("updated.uml");
>
> // This saves the model and the stereotype applications that were
> added
> // to its resource
> res.setURI(newURI);
> res.save(null);
>
> // This would only save the model because it adds the passed-in
> package
> // to a new resource, omitting all of the stereotype applications
> //save(epo2Model, newURI);
>
> I suspect you are doing something like the commented-out second
> approach to saving. but, by all means, share your code so that
> everybody reading the newsgroup may learn from it!
>
>
>>
>> -Bill
>
>
|
|
|
Re: IntroductionToUMLProfiles Question [message #1384727 is a reply to message #1384701] |
Fri, 30 May 2014 20:17 |
Bill McLaren Messages: 4 Registered: May 2014 |
Junior Member |
|
|
Hi Ed/Christian. Thanks for the quick responses. Christian, the save(epo2Model, newURI) is exactly what I was doing. Creating a new resource as shown in your example worked like a charm so I now have a model with the profile and stereotypes applied. The fun part for today will be to see if I can update the exiting model without creating a new one. Sorry for not posting the code yesterday. I've created a project with the new save additions.
github.com/billmclaren/UML2/tree/master/examples
I did spend all day yesterday going through previous posts, help files, tests, Google, etc.. Building the model from scratch using code is appealing since it reduces the opportunity for human error and is something that can be constantly reproduced during the build process. Figuring out how to keep the generated ID's or enhancing the example to test for the existence of something will be trickier. Hopefully I'm up to the task and maybe naive enough to think I can do it.
As far as the ultimate example, what I'm really trying to do is create DSL's like this.
1. Define a framework like TOGAF, BPMN, TM Forum Frameworx, etc... using UML2 java code.
2. Add UML Profiles as necessary.
3. Automate exporting the UML model to Ecore (keeping the UML documentation/comment so that it shows up in JavaDocs)
4. Execute genmodel to create the model source and associated edit/editor/tests.
5. Use Sirius to create the editors.
6. Use Acceleo to create additional documentation, etc...
7. Lather, rinse, repeat.
Thanks again for taking the time to point me in the right direction. Any additional hints for how to get the generated UML model exported to Ecore and then through the genmodel phase is absolutely welcomed.
-Bill
|
|
|
Re: IntroductionToUMLProfiles Question [message #1384982 is a reply to message #1384701] |
Tue, 03 June 2014 13:02 |
|
Hi, Ed,
Indeed, that seems like a good idea. Please raise an enhancement request.
cW
On 2014-05-30 14:27:18 +0000, Ed Willink said:
> Hi Christian
>
> It seems that while the example save() method is fine for the purposes
> of the example, it is misleading for more general use.
>
> Perhaps we want to upgrade save() on both examples and add a step
> similar to Bill's in the real tutorial.
>
> Regards
>
> Ed
>
> On 30/05/2014 14:25, Christian W. Damus wrote:
>> Hi, Bill,
>>
>> See seome replies in-line, below.
>>
>> HTH,
>>
>> Christian
>>
>> On 2014-05-29 23:52:47 +0000, Bill McLaren said:
>>
>>> In the IntroductionToUMLProfiles example, we create a profile and apply
>>> a stereotype to some EAttributes and ERelationships. In Luna RC1 I'm
>>> having a challenge enhancing the example when attempting to save the
>>> modified epo2Model after all of the new stereotype attributes are set
>>> and then read.
>>>
>>> If I follow the tutorial using the graphical UML tree editor, it saves
>>> the modifications just fine, but it also modifies the model UML file by
>>> moving the UML XML element into an outer xmi:XMI element. The build
>>> from code method doesn't do this.
>>
>> The <xmi:XMI> element is a container for serialization purposes only,
>> to contain multiple elements that logically are roots of the resource.
>> The XML document format is a single-rooted tree structure, so this
>> basically ensures that you have a valid XML document. On loading a
>> resource, EMF elides the <xmi:XMI> element and presents its children as
>> the roots of the resource.
>>
>> So, this suggests to me that you are getting the correct serialization
>> by walking through the example in the UML Editor but not when running
>> your code.
>>
>>> I tried adding XMI2UMLResource.Factory.INSTANCE to the initial
>>> RESOURCE_SET registration and was able to get the file to save in the
>>> right XMI format, but the save method doesn't persist the stereotype
>>> attributes that were set in the code. I'm happy to post what I've
>>> written but it's really straightforward and feel that I'm probably
>>> missing something that may be version related to help steer the model
>>> into a newer format.
>>
>> The XMI2UMLResource has nothing to do with, I expect.
>>
>>
>>> Any guidance would be appreciated. I've been reading the tests,
>>> google, etc... but haven't found the answer.
>>
>> Indeed, details like this are hidden in dark corners where even the
>> might Google has difficulty seeing. :-)
>>
>> I suspect the problem is in the way you save the resource. If I add
>> the following to the end of the main() method of the
>> IntroductionToUMLProfiles example, I get the updated model correctly
>> saved with the stereotype applications in an <xmi:XMI> container:
>>
>>
>> Resource res = epo2Model.eResource();
>> URI newURI = res.getURI().trimSegments(1).appendSegment("updated.uml");
>>
>> // This saves the model and the stereotype applications that were added
>> // to its resource
>> res.setURI(newURI);
>> res.save(null);
>>
>> // This would only save the model because it adds the passed-in package
>> // to a new resource, omitting all of the stereotype applications
>> //save(epo2Model, newURI);
>>
>> I suspect you are doing something like the commented-out second
>> approach to saving. but, by all means, share your code so that
>> everybody reading the newsgroup may learn from it!
>>
>>
>>>
>>> -Bill
|
|
| |
Re: IntroductionToUMLProfiles Question [message #1384984 is a reply to message #1384727] |
Tue, 03 June 2014 13:13 |
|
Hi, Bill,
See some replies in-line, below.
HTH,
Christian
On 2014-05-30 20:17:49 +0000, Bill McLaren said:
> Hi Ed/Christian. Thanks for the quick responses. Christian, the
> save(epo2Model, newURI) is exactly what I was doing. Creating a new
> resource as shown in your example worked like a charm so I now have a
> model with the profile and stereotypes applied. The fun part for today
> will be to see if I can update the exiting model without creating a new
> one. Sorry for not posting the code yesterday. I've created a project
> with the new save additions.
>
> github.com/billmclaren/UML2/tree/master/examples
Sorry, maybe I'll have a chance to take a look at this code, but not
very soon. Am a bit swamped.
> I did spend all day yesterday going through previous posts, help files,
> tests, Google, etc.. Building the model from scratch using code is
> appealing since it reduces the opportunity for human error and is
> something that can be constantly reproduced during the build process.
> Figuring out how to keep the generated ID's or enhancing the example to
> test for the existence of something will be trickier. Hopefully I'm up
> to the task and maybe naive enough to think I can do it. :p
You might look at how the "Convert to Metamodel" action in the UML
Editor (which action is available when you install the UML2 Examples
feature) generates predictable and stable XMI IDs for every element
based on names. Some similar strategy may be best for generating your
IDs (certainly letting the resource create UUIDs will not be helpful).
> As far as the ultimate example, what I'm really trying to do is create
> DSL's like this.
>
> 1. Define a framework like TOGAF, BPMN, TM Forum Frameworx, etc...
> using UML2 java code.
> 2. Add UML Profiles as necessary.
> 3. Automate exporting the UML model to Ecore (keeping the UML
> documentation/comment so that it shows up in JavaDocs)
> 4. Execute genmodel to create the model source and associated
> edit/editor/tests.
> 5. Use Sirius to create the editors.
> 6. Use Acceleo to create additional documentation, etc...
> 7. Lather, rinse, repeat.
>
> Thanks again for taking the time to point me in the right direction.
> Any additional hints for how to get the generated UML model exported to
> Ecore and then through the genmodel phase is absolutely welcomed.
The UML2 project provides an Ant task in the
org.eclipse.uml2.uml.ecore.importer plug-in for importing UML models
and profiles into EMF generator models. From there, the Ant tasks
provided by EMF can generate the code. I can't tell you what Sirius
may have for process automation, but Acceleo has fairly complete Ant
and Maven support. That's not something to discuss in this forum,
though.
>
> -Bill
|
|
|
Re: IntroductionToUMLProfiles Question [message #1384991 is a reply to message #1384984] |
Tue, 03 June 2014 13:48 |
Ed Willink Messages: 7655 Registered: July 2009 |
Senior Member |
|
|
Hi
Some complexities you might want to worry about...
There is currently discussion in the OMG TIWG to support stable semantic
IDs for future specifications.
A key requirement is that a package refactoring need not change IDs.
In order to make this work with current tooling, the suggestion is to
apply an identity stereotype to each metamodel element. This can be
persisted and migrate with refactoring.
To save space there can be a default ID generation algorithm, so that
default IDs need not be persisted.
Another desirable requirement is that if you use model transformations
then rerunning the transformation independently to recreate the output
should produce the same IDs. Transformation output IDs should therefore
be derived as a repeatable function of the input IDs.
Regards
Ed Willink
On 03/06/2014 14:13, Christian W. Damus wrote:
> Hi, Bill,
>
> See some replies in-line, below.
>
> HTH,
>
> Christian
>
>
> On 2014-05-30 20:17:49 +0000, Bill McLaren said:
>
>> Hi Ed/Christian. Thanks for the quick responses. Christian, the
>> save(epo2Model, newURI) is exactly what I was doing. Creating a new
>> resource as shown in your example worked like a charm so I now have a
>> model with the profile and stereotypes applied. The fun part for
>> today will be to see if I can update the exiting model without
>> creating a new one. Sorry for not posting the code yesterday. I've
>> created a project with the new save additions.
>>
>> github.com/billmclaren/UML2/tree/master/examples
>
> Sorry, maybe I'll have a chance to take a look at this code, but not
> very soon. Am a bit swamped.
>
>
>> I did spend all day yesterday going through previous posts, help
>> files, tests, Google, etc.. Building the model from scratch using
>> code is appealing since it reduces the opportunity for human error
>> and is something that can be constantly reproduced during the build
>> process. Figuring out how to keep the generated ID's or enhancing
>> the example to test for the existence of something will be trickier.
>> Hopefully I'm up to the task and maybe naive enough to think I can do
>> it. :p
>
> You might look at how the "Convert to Metamodel" action in the UML
> Editor (which action is available when you install the UML2 Examples
> feature) generates predictable and stable XMI IDs for every element
> based on names. Some similar strategy may be best for generating your
> IDs (certainly letting the resource create UUIDs will not be helpful).
>
>
>> As far as the ultimate example, what I'm really trying to do is
>> create DSL's like this.
>>
>> 1. Define a framework like TOGAF, BPMN, TM Forum Frameworx, etc...
>> using UML2 java code.
>> 2. Add UML Profiles as necessary.
>> 3. Automate exporting the UML model to Ecore (keeping the UML
>> documentation/comment so that it shows up in JavaDocs)
>> 4. Execute genmodel to create the model source and associated
>> edit/editor/tests.
>> 5. Use Sirius to create the editors.
>> 6. Use Acceleo to create additional documentation, etc...
>> 7. Lather, rinse, repeat.
>>
>> Thanks again for taking the time to point me in the right
>> direction. Any additional hints for how to get the generated UML
>> model exported to Ecore and then through the genmodel phase is
>> absolutely welcomed.
>
> The UML2 project provides an Ant task in the
> org.eclipse.uml2.uml.ecore.importer plug-in for importing UML models
> and profiles into EMF generator models. From there, the Ant tasks
> provided by EMF can generate the code. I can't tell you what Sirius
> may have for process automation, but Acceleo has fairly complete Ant
> and Maven support. That's not something to discuss in this forum,
> though.
>
>
>>
>> -Bill
>
>
|
|
|
Goto Forum:
Current Time: Wed Apr 17 00:28:14 GMT 2024
Powered by FUDForum. Page generated in 8.62830 seconds
|