[gme-users] enum attribute values in ocl constraints

Zoltan Molnar zolmol at isis.vanderbilt.edu
Thu Jul 21 15:34:14 CDT 2005


I think you could get around this problem by defining the enumeration
attribute like:

Foo Bar, Foo_Bar
Any String, Any_String

Generally speaking:
text1, value1
text2, value2
...

This way in the constraint you could use:
Self.X = #Foo_Bar implies self.Y = #Any_String

Br,Zoli


> -----Original Message-----
> From: gme-users-bounces at list.isis.vanderbilt.edu 
> [mailto:gme-users-bounces at list.isis.vanderbilt.edu] On Behalf 
> Of Matthew J. Emerson
> Sent: Tuesday, June 21, 2005 4:17 PM
> To: gme-users
> Subject: [gme-users] enum attribute values in ocl constraints
> 
> 
> I need to write an ocl constraint which essentially says, "If 
> the enum attribute X of the context class has value Y, then 
> enum attribute M of the context class must have value N".
> 
> I know how to do this in most cases. The constraint would 
> look like this:
> 
>      (self.X = #Y) implies (self.M = #N)
> 
> But, it doesn't really work value Y contains whitespace. For 
> instance, suppose the value I need to check for is "Foo Bar":
> 
>      (self.X = #Foo Bar) implies (self.M = #N)
> 
> The ocl parser can't understand this because of the 
> whitespace. So, I performed a little experiment to figure out 
> how the parser would like the value to be formated. I wrote 
> the following constraint:
> 
>      let testVal = self.X in false
> 
> When I check the constraint in a model where the value of X 
> for a particular object is "Foo Bar", then I can look at the 
> value of testVal in the constraint violation window and see 
> how the parser is formating the enum value "Foo Bar".   
> Unfortunately, what I got was:
> 
>      testVal     ocl::Enumeration{#Foo Bar}
> 
> Since I already determined that the above formatting for the 
> enum value wouldn't be accepted by the parser as input, my 
> experiment didn't help me.
> 
> So, how am I supposed to write this constraint? I'd like to 
> write something like
> 
>      (self.X = #[Foo Bar]) implies (self.M = #N)
> 
> or
> 
>      (self.X = #"Foo Bar") implies (self.M = #N)
> 
> or even
> 
>      (self.X = ocl::Enumeration("Foo Bar")) implies (self.M = #N)
> 
> But the parser doesn't like any of these (and the last one 
> causes an emergency exception which crashes GME. 
> Unfortunately, I can't find any GME documentation or existing 
> examples which cover this case. Anyone know what to do? 
> _______________________________________________
> gme-users mailing list
> gme-users at list.isis.vanderbilt.edu
> http://list.isis.vanderbilt.edu/mailman/listinfo/gme-users
> 


More information about the gme-users mailing list