Skip to content

OCL im Instanz-Editor: Validate wieder verdrahtet, Live-Prüfung, Constraint-Dateien des Workspace - #180

Closed
vwfox wants to merge 4 commits into
mainfrom
fix/ocl-validierung
Closed

vwfox wants to merge 4 commits into
mainfrom
fix/ocl-validierung

Conversation

@vwfox

@vwfox vwfox commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Worum es geht

Im Uni-Workspace (genE/uni) bekam ein Student einen Kurs einer fremden Uni:

  • nichts wurde ausgegraut,
  • keine Warnung beim Zuweisen,
  • „Validate OCL (local)“ fand nichts.

Modell und Daten sind in Ordnung – Martin (Uni Jena) mit Informatik (Mittweida) verletzt KurseNurVonEigenerUni. Gene hat schlicht nicht geprüft.

Ursachen und Änderungen

„Validate OCL“ war tot

  • Der Menüpunkt sendet validate-ocl-request; seit d42388f hörte niemand darauf. Der alte Handler prüfte zudem die gemeinsame Ressource statt des Tab-Dokuments.
  • Jetzt beantwortet das Instanzbaum-Plugin die Anfrage mit allen Ressourcen des vorderen Tabs. Der tote Handler ist entfernt.

Keine Live-Prüfung

  • attachTo merkte sich die Ressource nur (sein Kommentar versprach anderes). Jetzt hängt ein EContentAdapter daran: jede echte Änderung prüft entprellt neu.
  • Jedes Instanz-Tab-Dokument meldet seine Ressourcen an; beim Schließen werden sie abgelöst.
  • validateResource ersetzt nur noch die Befunde dieser Ressource – Parser-Meldungen und andere Tabs bleiben.

OCL verglich Objekte falsch

  • wrapEObjectForOcl baute bei jedem Zugriff eine neue Hülle; uk = k war nie wahr. Sobald die Prüfung lief, hätte jeder Kurs als fremder gegolten. Jetzt eine Hülle je Objekt.

Constraint-Dateien des Workspace

  • .c-ocl/.cocl im Ordner der .wsp werden beim Öffnen mitgeladen (vor den Instanzen). Damit greift der Referenz-Filter aus university.c-ocl und graut fremde Kurse aus.
  • Ein Feld in der .wsp wäre die ausdrückliche Lösung, bräuchte aber ein neues Generat – das eingecheckte passt schon heute nicht zum Modell (EditorBinding fehlt).

Tests

  • OCL lädt jetzt in Vitest: @emfts/ocl.* importiert in dist ohne Dateiendung, Node lehnt das ab; Vitest wandelt die Pakete nun selbst um.
  • Problems-Service mit dem Uni-Modell: Verstoß auf Anfrage, eigener Kurs erlaubt, live nach Zuweisung und nach Korrektur, später hinzugefügte Objekte, abgelöste Ressource, andere Tabs und Parser-Meldungen bleiben, Referenz-Filter der .c-ocl. Ohne die Änderungen scheitern 5 von 6 der Live-Tests.
  • Instanzbaum: Beobachter der Tab-Ressourcen, Validieren eines Dokuments, Plugin hört auf „Validate OCL“ und meldet Dokumente an.
  • Workspace: Suche der .c-ocl neben der .wsp (nur dieser Ordner, Wurzel, .cocl, Fehler bricht nichts ab).
  • Alle Unit-Tests grün, keine neuen Typfehler, ESLint ohne Fehler.

Nachtrag: Anzeige im Editor

Nach dem ersten Stand schlug die Prüfung an, im Editor war aber nichts zu sehen.

  • Suchdialog graut aus: kurse wird über die Suche gefüllt. Sie bekommt jetzt auch den REFERENCE_FILTER aus der .c-ocl und wertet Filter mit self (Student) und target (Kurs) aus – query bindet dafür target je Kandidat. Bisher gab die Suche bei solchen Ausdrücken auf.
  • Feld wird rot: Das Referenzfeld wertet den Filter je Kandidat aus (statt Umschreiben und Namensvergleich) und markiert zugewiesene Werte, die der Filter ablehnt, mit Meldung am Feld.
  • Rot war nie rot: var(--red-500) gibt es im PrimeVue-4-Theme nicht; die Felder des Instanz-Editors nutzen jetzt var(--p-red-500) mit Rückfall. Andere Bereiche (Layout, Atlas, Aktionen) haben dieselbe Variable noch.
  • Geprüft: Tests für query mit target, das Feld (Informatik bei Martin markiert, Mathe nicht) und die Suche (Kurse aus Mittweida gesperrt); im Browser mit dem Uni-Workspace.

vwfox added 4 commits October 26, 2026 08:34
…bjekte richtig

Im Uni-Workspace bekam ein Student einen Kurs einer fremden Uni, ohne dass
die Invariante KurseNurVonEigenerUni anschlug.

- attachTo merkte sich die Ressource nur. Jetzt haengt ein EContentAdapter
  daran: jede echte Aenderung prueft die Ressource entprellt neu, je Ressource
  ein eigener Takt. detachFrom nimmt Adapter und Befunde wieder weg.
- validateResource ersetzte die ganze Problemliste. Jetzt nur die
  Pruef-Befunde dieser Ressource; Parser-Meldungen und andere Tabs bleiben.
- wrapEObjectForOcl baute bei jedem Zugriff eine neue Huelle. OCL vergleicht
  per Identitaet, `uk = k` war damit nie wahr - jeder Kurs haette als fremder
  gegolten. Jetzt eine Huelle je Objekt.
- Vitest wandelt @emfts/ocl.* selbst um: deren dist importiert ohne
  Dateiendung, unter Node liess sich OCL bisher nicht laden und nicht testen.

Tests mit dem Uni-Modell: Verstoss auf Anfrage und live, Korrektur raeumt
auf, spaeter hinzugefuegte Objekte, abgeloeste Ressource, andere Tabs und
Parser-Meldungen bleiben, Referenz-Filter der .c-ocl.
… live geprueft

Der Menuepunkt "Validate OCL (local)" sendete validate-ocl-request, aber seit
der Menueleiste je Perspektive (d42388f) hoerte niemand darauf. Der alte
Handler im Instanzbaum pruefte zudem die gemeinsame Ressource statt des
Dokuments im Tab.

- Das Plugin beantwortet die Anfrage: alle Ressourcen des Dokuments im
  vorderen Tab (validateDocument).
- Jedes Instanz-Tab-Dokument meldet seine Ressourcen an einen Beobachter;
  das Plugin reicht sie an den Problems-Dienst (live pruefen) und loest sie
  beim Schliessen des Tabs wieder. Problems-Dienst und Event-Bus koennen
  spaeter kommen - auf beide wird gewartet.
- Der tote Handler im Instanzbaum ist entfernt.

Tests: Beobachter (kommen, gehen, Tab zu, spaeter gesetzt), Validieren
eines Dokuments, Plugin hoert auf die Anfrage und meldet die Dokumente an.
…tgeladen

Die Workspace-Datei kennt keine Constraint-Dateien. university.c-ocl mit dem
Referenz-Filter "nur Kurse der eigenen Uni" lag neben uni.wsp und wurde nie
geladen, ausser man oeffnete sie von Hand - ausgegraut wurde nichts.

Jetzt kommen alle .c-ocl/.cocl im Ordner der .wsp mit, nach den Modellen und
vor den Instanzen, damit schon die erste Pruefung die Filter hat. Nur dieser
Ordner: ein Workspace an der Wurzel einer Quelle zieht nicht alles darunter.

Ein Feld in der .wsp waere die ausdrueckliche Loesung, braucht aber ein neues
Generat - und das eingecheckte passt schon heute nicht zum Modell
(EditorBinding fehlt darin).
…achen das Feld rot

Nach #180 schlug die Pruefung beim Zuweisen an, aber im Editor war nichts zu
sehen: das Kurse-Feld blieb unmarkiert, die Auswahl bot fremde Kurse an.

- Eine mehrwertige Referenz wird ueber den Suchdialog gefuellt. Der bekam nur
  Filter aus Annotationen; jetzt auch den REFERENCE_FILTER aus geladenen
  .c-ocl-Dateien fuer die Klasse des Besitzers.
- Der Filter spricht von zwei Objekten: self (Student) und target (Kurs).
  Die Suche gab bei solchen Ausdruecken auf. Jetzt wertet sie sie auf dem
  Besitzer aus, mit target je Kandidat gebunden - query nimmt dafuer
  Variablen an (die OCL-Engine kann das, gene reichte sie nicht durch).
- Das Referenzfeld wertet den Filter ebenso je Kandidat aus statt den
  Ausdruck in eine Menge umzuschreiben und per Name zu vergleichen. Zugewiesene
  Werte, die der Filter ablehnt, sind markiert, das Feld zeigt die Meldung.
- Rot war nie rot: var(--red-500) gibt es im PrimeVue-4-Theme nicht. In den
  Feldern des Instanz-Editors jetzt var(--p-red-500) mit Rueckfall.

Tests: query mit target, Feld markiert Informatik bei Martin und laesst Mathe
unmarkiert, die Suche sperrt die Kurse der fremden Uni. Im Browser geprueft
mit dem Uni-Workspace.
@vwfox

vwfox commented Oct 26, 2026

Copy link
Copy Markdown
Contributor Author

Aufgegangen in #182.

@vwfox vwfox closed this Oct 26, 2026
vwfox added a commit that referenced this pull request Oct 26, 2026
…achen das Feld rot

Nach #180 schlug die Pruefung beim Zuweisen an, aber im Editor war nichts zu
sehen: das Kurse-Feld blieb unmarkiert, die Auswahl bot fremde Kurse an.

- Eine mehrwertige Referenz wird ueber den Suchdialog gefuellt. Der bekam nur
  Filter aus Annotationen; jetzt auch den REFERENCE_FILTER aus geladenen
  .c-ocl-Dateien fuer die Klasse des Besitzers.
- Der Filter spricht von zwei Objekten: self (Student) und target (Kurs).
  Die Suche gab bei solchen Ausdruecken auf. Jetzt wertet sie sie auf dem
  Besitzer aus, mit target je Kandidat gebunden - query nimmt dafuer
  Variablen an (die OCL-Engine kann das, gene reichte sie nicht durch).
- Das Referenzfeld wertet den Filter ebenso je Kandidat aus statt den
  Ausdruck in eine Menge umzuschreiben und per Name zu vergleichen. Zugewiesene
  Werte, die der Filter ablehnt, sind markiert, das Feld zeigt die Meldung.
- Rot war nie rot: var(--red-500) gibt es im PrimeVue-4-Theme nicht. In den
  Feldern des Instanz-Editors jetzt var(--p-red-500) mit Rueckfall.

Tests: query mit target, Feld markiert Informatik bei Martin und laesst Mathe
unmarkiert, die Suche sperrt die Kurse der fremden Uni. Im Browser geprueft
mit dem Uni-Workspace.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant