[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[news.eclipse.modeling.mdt.uml2.ocl] Re: Using OCL to specify derived References (NOT attributes)

Yes, one of the goals of the latter feature would be to enhance the UML2 
code generator to support generating code based on OCL constraints.

Kenn

"Christian W. Damus" <cdamus@xxxxxxxxxx> wrote in message 
news:ekn2fs$u47$1@xxxxxxxxxxxxxxxxxxxx
>
> Hi, Jürgen,
>
> OCL, as UML, does not distinguish between "attributes" and "references" as
> Ecore does; these are all just Properties.  Thus, "der:" constraints
> specified in OCL can derive read-only values for either of these kinds of
> properties.
>
> You can use OCL in the EMF code generation process to specify derived
> properties as described in this article:
>
> http://www.eclipse.org/articles/Article-EMF-Codegen-with-OCL/article.html
>
> There are also plans for the UML2 UML and OCL components to implement
> support for specifying OCL constraints such as property derivations in UML
> models:
>
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=163808
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=105199
>
> I am not sure whether the latter item is intended to support generating 
> code
> from the OCL constraints, as in the article or otherwise.
>
> Cheers,
>
> Christian
>
>
> JG wrote:
>
>> Hi all,
>>
>> I am using Rose/Ecore to model my application models (for the
>> representation of database metadata). I have a number of a
>> Associations/EReferences whose members are actually a subset of another
>> Association. For example, a Schema contains among other things tables
>> and structured types (which are both subclasses of ModelElement). I have
>> a "content" reference from schema which can contain both of these (via
>> the common superclass). But I also want specific references like
>> "tables" and "structuredTypes" in the Schema class, which only contain
>> the tables and structured types, respectively.
>> Of course I could always write my own getters and setters into the
>> generated code that would use the "content" relationship and filter only
>> those classes that are needed. But I am hesitant to do so, as this would
>> mean a lot of effort and would make it more difficult to keep my still
>> evolving model in sync with the code.
>> I considered adding annotations and modify the way EMF generates its
>> code (so that EMF creates the getters and setters for these "derived"
>> references for me), but when I took a look at the EMF codegen templates
>> I lost my courage, as they are quite hard to read, and I did not want to
>> invest effort in modify the EMF 2.2 templates and have to do the
>> modification again for the next version of EMF that might change these
>> templates.
>>
>> My current "solution" is to have these derived references redundantly,
>> and setting them via a Helper class. For example, I have an
>> "attachTableToSchema method, which adds the given table both to the
>> "content" and to the "tables" relationship. This is however, quite
>> cumbersome and was only intended as a temporary fix.
>>
>> So to come to the question: I understand that OCL can (or is meant to be
>> able to?) specify derived attributes. Could this mechanism also be used
>> to specify a derived relationship (which is usually many-valued).
>>
>> Regards
>>
>> Jürgen
>