0

First of all : thank for the support !

My problem : I want to simply test if an "enumerated" attribute is defined or not.

Let's say I have :

  • an EnumValues enumeration with 2 values VALEUR1 and VALEUR
  • an EObject object with an optional attribute value

I would have expected to test the value existence thanks to this expression :

object.value.oclIsUndefined()

But this expression always retuens true as the value attribute seems to be initialized with the first value of the enumeration. The only bypass way I've found is to not declare EnumValues as an Enum but as an EObject. Then the oclIsUndefined() method returns false when the attribute is not set in the model. BTW my model is generated thanks to Xtext.

ばかげた質問のようですが、Google、OCL 仕様、または Acceleo リソースで答えを見つけることができません。

ここで見つけた唯一の資料によると、これを達成する唯一の方法は isUndefined またはより一般的な isUndefined('value') OCL ヘルパー メソッドを使用することです。しかし、Acceleo 環境ではこれを断ることはできません。

何か考えはありますか?

お返事ありがとうございます!

ステファン

4

2 に答える 2

0

EMF では、列挙にはデフォルト値 (デフォルトでは、列挙の最初の列挙リテラル) があります。デフォルト値で列挙を本当に作成したい場合は、thisを使用します。EMF での列挙の「通常の」動作ではないことに注意してください。

Acceleo は、EMF が言うことを報告しているだけです:「あなたの列挙には値があります」。

次の式を使用して、列挙を Acceleo でテストできます。

[myObject.myEnumValue = MyEnum::MyEnumLiteral/]

wikiで説明されているように。

よろしく、

Acceleo のリーダーである Stephane Begaudeau 氏

于 2012-05-04T09:15:15.320 に答える
0

私は次のことをします:

  • Xtext で手動で維持されたメタモデルを使用する
  • ただし、ダミー リテラルを EEnum に追加しないでください。
  • よりクリーンなソリューションは、Enum 値を含む EAttribute を設定不可として宣言することです。したがって、EMF は、値が明示的に設定されているか、デフォルトであるかを通知します。
于 2012-05-08T19:54:33.777 に答える