Collections and typecasting... [message #987427] |
Mon, 26 November 2012 15:03 |
Carsten Reckord Messages: 27 Registered: June 2012 |
Junior Member |
|
|
Hi,
I'm still having fun with QVT/OCL and UML profiles. I have a profile that
defines a Stereotype MyStereo that has a to-n reference to NamedElement:
MyStereo
{
usages : NamedElement[*];
}
Now, in an inplace QVTO transformation I'm working with elements that have
MyStereo applied and I want to 1) access and 2) add to the MyStereo::usages
collection.
I've tried several ways, but always hit a dead end at some typecast or
other. I can get the value typed as OclAny with
var stereo := self.getAppliedStereotype("MyProfile::MyStereo");
var value := self.getValue(stereo, "usages");
but then I don't know how to proceed to work with it as a Collection. I can
get a collection of the correct type doing something like
var usages := value.oclAsSet()->flatten()->selectByKind(NamedElement);
But the resulting Set is no longer the original collection. So when adding
an element to it with e.g.
usages+=self;
I guess I have to set the resulting collection back on the Stereotype.
Unfortunately, this doesn't work:
self.setValue(stereo, "usages", usages);
"Cannot find operation (setValue(Stereotype, String,
Collection(NamedElement))) for the type Element"
I can't figure out how to cast usages so the setValue() operation is applicable.
Going the other way round by directly casting value to the correct type
doesn't work either. From what I could gather by stepping through the
parser, it's due to the known issues with type expressions. This:
var usages := value.oclAsType(Collection(NamedElement));
gives me "Unrecognized Variable: (Collection)" because it's resolved as a
variable expression instead of a collection type literal.
Do you have any suggestions for another, working way to add something into a
stereotype instance?
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04585 seconds