Repository navigation
OCL im Instanz-Editor, Ladeanzeige, Workspace-Editor und Workspace-Wechsel - #182
Merged
Merged
Conversation
…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.
Das zentrale Overlay steht vom Öffnen der .wsp bis Modelle und Instanzen geladen sind.
…anz- und Modell-Editor Übernommen aus features_cwm (f2819b8), dort für den CWM-Editor: das zentrale Overlay zeigt "Editor wird geladen" vom Öffnen bis der Tab gezeichnet ist, neu gestaltet (Karte im Panel-Stil, Ring in der Primärfarbe, deutsche Titel). Hier ohne den CWM-Öffner (gibt es auf main nicht). Stattdessen die Hülle withEditorLoading: zwei Bilder Vorlauf, damit das Overlay vor der blockierenden Arbeit erscheint, und bleibt bis nach dem Zeichnen des Tabs; verschachtelte Aufrufe halten es bis zum äußersten. Instanz-Editor (loadInstances) und Modell-Editor (openMetamodelInEditor) laufen darüber.
…t Tests withEditorLoading lebte in App.vue und war dort nicht zu testen. Jetzt createEditorLoading in services/editorLoading.ts; App.vue nutzt es fuer Instanz- und Modell-Editor. Tests: Overlay mit Dateiname steht vor der Arbeit (zwei Bilder Vorlauf) und bleibt ein Bild danach, bleibt bei verschachteltem Oeffnen bis zum aeussersten, geht bei Fehlern weg. Im Browser geprueft: university-instance.xmi und university.ecore zeigen "Editor wird geladen" mit ihrem Namen.
This was referenced Oct 26, 2026
…gsbuchstaben Die Kopfzeile stand auf "Gene Workspace", egal was geladen war: GeneLayout fragte den Perspektiven-Dienst einmal beim Aufbau, bevor das Plugin ihn anmeldete, und danach nie wieder. workspacePath war gesetzt, die Anzeige erfuhr es nicht. - Perspektive und Workspace-Konfiguration kommen jetzt ueber whenService. - Geladen ist ein Workspace: ein kleines Quadrat mit seinem Anfangsbuchstaben, daneben sein Name; der Pfad im Tooltip. Der Name ist der, den die .wsp sich gibt (name="uni"), sonst der Dateiname. Die Farbe kommt aus dem Namen - zwei Workspaces unterscheiden sich auf einen Blick. Tests fuer Name, Buchstabe und Farbe (workspaceBadge). Im Browser geprueft: uni/uni.wsp zeigt "U" und "uni".
… ein Klick speichert Aenderungen am Workspace (hinzugefuegte Instanzdateien, Editor-Wahl, Layout) liegen im Speicher, bis etwas die .wsp schreibt. Gezeigt hat das nur der Einstellungsdialog. Jetzt steht neben dem Workspace-Namen ein Punkt, solange es ungespeicherte Aenderungen gibt - wie beim geaenderten Tab. Ein Klick darauf schreibt die .wsp; waehrenddessen ist er gesperrt. Die Anzeige ist eine eigene Komponente (WorkspaceTitle), mit Komponententest. Im Browser geprueft: Aenderung zeigt den Punkt, Klick schreibt uni.wsp und der Punkt geht.
Ein weiterer Workspace ersetzte die geladene Konfiguration ohne Rueckfrage; ungespeicherte Aenderungen gingen still verloren. Jetzt fragt ein Dialog: Speichern, Verwerfen oder Abbrechen. Speichern schreibt die .wsp und wechselt; schlaegt es fehl, bleibt der alte Workspace offen. Der Ablauf ist mayLeaveWorkspace, getestet fuer alle Wege. Im Browser geprueft: Abbrechen behaelt "uni" samt Punkt, Verwerfen oeffnet "karla".
Der Knopf gehoert der Anwendung, nicht der Datei im Tab - er stand in der Menueleiste unter dem Tab und ist jetzt rechts in der ersten Kopfzeile.
Bisher blieb beim Oeffnen eines anderen Workspace alles vom vorigen geladen: Metamodelle in Registry und EPackageRegistry, OCL-Pakete, Constraints und C-OCL-Filter, offene Datei-Tabs, Issues und Atlas-Verbindungen. Jetzt wird vor dem Laden entladen: - Datei-Tabs schliessen (Panels wie Model Atlas und die Workspace-Vorschau bleiben) - Modelle des Workspace entladen (unloadUserModels, eingebaute bleiben) - OCL-Dienst zuruecksetzen - Atlas-Verbindungen trennen Geaenderte Dateien in diesen Tabs werden in der Rueckfrage genannt.
Mit geladenem Workspace zeigte der Tab "Noch keine Workspaces geoeffnet"; was der Workspace mitbringt, war nirgends zu sehen. Jetzt zeigt er den Workspace nach Abschnitten, jeder Eintrag mit Status: - Modelle und Instanzen: oeffnen, entfernen (entlaedt/schliesst mit), hinzufuegen aus den passenden Dateien der Quelle - Constraints: die .c-ocl neben der .wsp, oeffnen - Atlas: Verbindungsstatus, verbinden und trennen - Package-Resolver: Uebersicht, Bearbeiten im Einstellungsdialog Speichern und Einstellungen in der Kopfzeile. Eine im Explorer gewaehlte Datei wird weiter vorgeschaut, mit Rueckweg zum Workspace. Nebenbei: Instanzdateien des Workspace wurden beim Oeffnen nicht geladen, wenn ihr Pfad relativ zur Quelle eingetragen war (so schreibt ihn addInstanceSource). Der Lader probiert diesen Pfad jetzt auch.
Rechtsklick auf eine .wsp zeigte nichts: Das Menue erscheint nur mit
Eintraegen, und fuer Workspace-Dateien gab es keine - die XML-Ansicht
kannte die Endung nicht.
- XML-Editor oeffnet auch .wsp/.workspace ("Oeffnen mit")
- "Workspace oeffnen" im Menue, derselbe Weg wie der Doppelklick
Der Workspace merkte sich nicht, welche Dateien in welchem Editor offen waren; beim Oeffnen kamen nur die Instanzdateien als Tabs zurueck. - LayoutConfig.openEditors (OpenEditor: filePath, editorId, active) in fennec-generic-ui.ecore, Code per npm run generate - Beim Speichern werden die offenen Datei-Tabs eingetragen (in Tab-Reihenfolge, mit dem vorderen); ein Tab allein macht den Workspace nicht ungespeichert - Beim Oeffnen kommen sie im jeweiligen Editor zurueck, der vordere wieder nach vorn; ohne gespeicherten vorderen Tab der Workspace-Tab Generator: genconfig nutzt ecorePackage="#/" - mit der nsURI erzeugte er nur Factory, Package und Index. Der Lauf bringt editorBindings mit, das in der Ecore stand, aber nie generiert war: die Editor-Wahl aus "Oeffnen mit" wurde dadurch nicht gespeichert.
…ffnen Der Tab wurde nur einmal beim Start angelegt; geschlossen war er weg - und mit ihm die Vorschau gewaehlter Dateien. - Klick auf den Workspace-Namen in der Kopfzeile holt ihn nach vorn (Event show-workspace-editor), bei Bedarf neu angelegt - Oeffnen eines Workspace und Dateiauswahl im Explorer legen ihn an, wenn er fehlt
… lesend Wer eine andere Workspace-Datei als die geladene anwaehlte, sah die alte Dateivorschau (Wurzelelement, Elementzahl, rohes XML) statt des Workspace-Editors. Jetzt zeigt der Tab sie in derselben Form, nur lesend: Modelle, Instanzen, Constraints, Atlas und Resolver, wie die Datei sie eintraegt, fehlende Dateien markiert. Statt Speichern gibt es "Workspace oeffnen". Gelesen wird mit parseEditorConfig, ohne den geladenen Workspace zu beruehren. Korrektur zum vorigen Commit: editorBindings ging nicht verloren - das ergaenzte bis jetzt editorConfigFixup zur Laufzeit; der Fixup erkennt das generierte Feature und tut nichts mehr.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fasst #180 und #181 zusammen.
Teil 1: OCL im Instanz-Editor (#180)
Worum es geht
Im Uni-Workspace (
genE/uni) bekam ein Student einen Kurs einer fremden Uni: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
validate-ocl-request; seit d42388f hörte niemand darauf. Der alte Handler prüfte zudem die gemeinsame Ressource statt des Tab-Dokuments.Keine Live-Prüfung
attachTomerkte sich die Ressource nur (sein Kommentar versprach anderes). Jetzt hängt einEContentAdapterdaran: jede echte Änderung prüft entprellt neu.validateResourceersetzt nur noch die Befunde dieser Ressource – Parser-Meldungen und andere Tabs bleiben.OCL verglich Objekte falsch
wrapEObjectForOclbaute bei jedem Zugriff eine neue Hülle;uk = kwar 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/.coclim Ordner der.wspwerden beim Öffnen mitgeladen (vor den Instanzen). Damit greift der Referenz-Filter ausuniversity.c-oclund graut fremde Kurse aus..wspwäre die ausdrückliche Lösung, bräuchte aber ein neues Generat – das eingecheckte passt schon heute nicht zum Modell (EditorBindingfehlt).Tests
@emfts/ocl.*importiert indistohne Dateiendung, Node lehnt das ab; Vitest wandelt die Pakete nun selbst um..c-ocl. Ohne die Änderungen scheitern 5 von 6 der Live-Tests..c-oclneben der.wsp(nur dieser Ordner, Wurzel,.cocl, Fehler bricht nichts ab).Nachtrag: Anzeige im Editor
Nach dem ersten Stand schlug die Prüfung an, im Editor war aber nichts zu sehen.
kursewird über die Suche gefüllt. Sie bekommt jetzt auch denREFERENCE_FILTERaus der.c-oclund wertet Filter mitself(Student) undtarget(Kurs) aus –querybindet dafürtargetje Kandidat. Bisher gab die Suche bei solchen Ausdrücken auf.var(--red-500)gibt es im PrimeVue-4-Theme nicht; die Felder des Instanz-Editors nutzen jetztvar(--p-red-500)mit Rückfall. Andere Bereiche (Layout, Atlas, Aktionen) haben dieselbe Variable noch.querymittarget, das Feld (Informatik bei Martin markiert, Mathe nicht) und die Suche (Kurse aus Mittweida gesperrt); im Browser mit dem Uni-Workspace.Teil 2: Ladeanzeige für Instanz- und Modell-Editor (#181)
Worum es geht
Im CWM-Zweig (
features_cwm) gibt es beim Öffnen eines Editors eine Ladeanzeige. Instanz- und Modell-Editor bekommen sie jetzt auch.Was sich ändert
features_cwm:0247856: Overlay beim Öffnen eines Workspace, bis Modelle und Instanzen geladen sind.f2819b8: „Editor wird geladen“ und das überarbeitete Overlay (Karte im Panel-Stil, Ring in der Primärfarbe, deutsche Titel). Ohne den CWM-Öffner, den es aufmainnicht gibt.loadInstancesundopenMetamodelInEditorlaufen über die Ladeanzeige. Sie erscheint zwei Bilder vor der blockierenden Arbeit und bleibt, bis der Tab gezeichnet ist; verschachteltes Öffnen hält sie bis zum äußersten Aufruf.services/editorLoading.tsstatt Code inApp.vue, damit testbar.Geprüft
university-instance.xmi(Instanz-Editor) unduniversity.ecore(Modell-Editor) zeigen „Editor wird geladen“ mit Dateinamen, danach ist das Overlay weg.Hinweis
Wird
features_cwmspäter aufmaingezogen, kommen0247856undf2819b8dort schon mit; beim CWM-Öffner bietet sich dannwithEditorLoadingstatt der eigenen Kopie an.Zusammen
.c-ocl-Dateien unter dem Workspace-Overlay.Teil 3: Geladener Workspace in der Kopfzeile
.wsp, sonst der Dateiname), der Pfad im Tooltip. Die Farbe kommt aus dem Namen.whenService.uni/uni.wsp→ „U“ und „uni“).Teil 4: Ungespeicherte Workspace-Änderungen
.wsp. Bisher zeigte das nur der Einstellungsdialog.Teil 5: Beim Wechsel den alten Workspace entladen
unloadUserModels, eingebaute bleiben), OCL-Dienst zurücksetzen, Atlas-Verbindungen trennen.uni→karlalässt nichts übrig, zurück zuunilädt wieder alles.Teil 6: Workspace-Editor
Mit geladenem Workspace zeigte der Tab „Workspace“ bisher „Noch keine Workspaces geoeffnet“. Jetzt zeigt er den Workspace nach Abschnitten, jeder Eintrag mit Status:
.c-oclneben der.wsp, öffnenKopfzeile mit Speichern (aktiv bei ungespeicherten Änderungen) und Einstellungen.
Eine im Explorer gewählte Datei wird weiter im Tab vorgeschaut, mit Rückweg zum Workspace.
Fix: Instanzdateien des Workspace wurden beim Öffnen nicht geladen, wenn ihr Pfad relativ zur Quelle eingetragen war (so schreibt ihn
addInstanceSource).Tests für die Übersicht; im Browser geprüft: Status, Entfernen und Hinzufügen einer Instanz.
Fix: Rechtsklick auf eine
.wspzeigte kein Menü. Jetzt gibt es „Workspace öffnen“ und „Öffnen mit → XML-Editor“ (die XML-Ansicht kennt.wsp/.workspace).Teil 7: Offene Tabs im Workspace
Neu im Modell:
LayoutConfig.openEditors(OpenEditor:filePath,editorId,active), Code pernpm run generate.Beim Speichern werden die offenen Datei-Tabs eingetragen (Reihenfolge und vorderer Tab). Ein geöffneter oder geschlossener Tab allein macht den Workspace nicht ungespeichert.
Beim Öffnen kommen sie im jeweiligen Editor zurück, der vordere wieder nach vorn. Ist keiner gespeichert, liegt der Workspace-Tab vorne.
Generator: Die genconfig nutzt jetzt
ecorePackage="#/". Mit der nsURI erzeugte der Lauf nur Factory, Package und Index.editorBindingsstand in der Ecore, war aber nie generiert. Bisher hateditorConfigFixupdas Feature zur Laufzeit ergänzt. Jetzt liefert es der Generator, und der Fixup erkennt das und tut nichts mehr. Er kann bei Gelegenheit weg.Tests für Sammeln und Wiederherstellen. Im Browser geprüft: Instanz, Metamodell und XML-Ansicht offen, speichern,
karla→unistellt alle drei wieder her, der XML-Tab liegt vorne.Fix: Ein geschlossener Workspace-Tab ließ sich nicht wieder öffnen. Jetzt holt ein Klick auf den Workspace-Namen in der Kopfzeile ihn zurück. Auch das Öffnen eines Workspace und die Auswahl einer Datei im Explorer legen ihn an, wenn er fehlt.
Fremde
.wsp: Wer eine andere Workspace-Datei als die geladene anwählt, sieht sie jetzt im Workspace-Editor, nur lesend. Die Abschnitte zeigen, was die Datei einträgt, und markieren fehlende Dateien. Statt „Speichern“ gibt es „Workspace öffnen“. Bisher erschien die alte Dateivorschau mit rohem XML.