2017-05-01 7 views
2

Ich versuche, OCL-Bedingungen basierend auf einem ecore-Benutzermodell zu verwenden. Meine erste Frage ist, ob es überhaupt möglich ist, OCL-Bedingungen in diesem Kontext zu verwenden oder nicht. In meinem speziellen Fall kann der Benutzer ein eigenes Modell mit eigenen Aufgaben, Sequenzflüssen, Variablen usw. erstellen. Der Benutzer kann auch eigene OCL-Bedingungen in der Laufzeit definieren. So weit, ist es gut.OCL-Bedingungen in Benutzermodellen

Ein einfaches Beispiel: Ich möchte eine Bedingung erstellen, die überprüft, ob der Wert der Variablen des Benutzermodells xy> 5. Mein Problem ist, dass ich die Bedingungen auf dem Benutzermodell selbst, nicht die Metamodell davon. In jedem Codeschnipsel, den ich gesehen habe (wie hier unten), wurde der Kontext des OCLHelper auf ein Metamodell gesetzt (Literals.LIBRARAY).

Wie kann ich die OCL-Bedingungen für meine Zwecke verwenden?

OCL ocl = OCL.newInstance(new PivotEnvironmentFactory()); 
OCLHelper helper = ocl.createOCLHelper(EXTLibraryPackage.Literals.LIBRARY); 
ExpressionInOCL invariant = helper.createInvariant(
    "books->forAll(b1, b2 | b1 <> b2 implies b1.title <> b2.title)"); 
ExpressionInOCL query = helper.createQuery(
    "books->collect(b : Book | b.category)->asSet()"); 

// create a Query to evaluate our query expression 
Query queryEval = ocl.createQuery(query); 
// create another to check our constraint 
Query constraintEval = ocl.createQuery(invariant); 

Antwort

0

Wenn Sie OCL in Ecore wollen Sie wahrscheinlich feststellen, dass die OCLinEcore Editor macht das Leben viel einfacher.

Das Argument createOCLHelper identifiziert Ihr Typsystem, d. H. Ihr Metamodell. Die Einschränkungen werden für Instanzen dieser Typen überprüft. d. h. dein Modell.

Grüße

Ed Willink