GMF Editor mit einem zur Laufzeit erstellten Modell

SEA

Mitglied
Hallo Java-Freunde,

ich habe mit EMF und GMF einen Diagramm-Editor erstellt, um damit bestimmte Zustände zu visualisieren. Ich kann nun ein Modell erstellen, laden, ansehen und bearbeiten.

Allerdings möchte ich nun das Diagramm zur Laufzeit anpassen. (z.B. beim Klick in einem anderen View)
(Eine eigene Perspektive und ein View mit verschiedenen Eigenschaften habe ich bereits)

Mir ist aber unklar, wie ich auf das im Editor dargestellte Modell zugreife, um es zu verändern.

Wie kann ich das dargestellte Modell dynamisch zur Laufzeit erstellen ohne eine Datei zu laden?
Kann mir jemand ein Tutorial empfehlen oder ein paar Ansatzpunkte schreiben?

Danke!

Viele Grüße
SEA
 

Wildcard

Top Contributor
Wie ist die andere View mit dem Diagramm verbunden? Über eine Selection? Wenn ja, dann kannst du das Modell aus der Selection holen.
 

SteffenHH

Mitglied
Hallo,

um ein Modell zur Laufzeit zu erstellen würde ich folgendes versuchen:

// Retrieve the default factory singleton
MyModelFactory factory = MyModelFactory.eINSTANCE;

in der Factory sollten dann Methoden zur Erstellung von weiteren Modellelementen verfügbar sein, z.B.
Product newProduct = factory.createProduct();

Tutorial: Eclipse Modeling Framework (EMF) - Tutorial ?

Hoffe konnte helfen?

Steffen
 

SEA

Mitglied
Vielen dank für eure Antworten! Ich habe inzwischen schon ein paar Dinge herausgefunden, allerdings funktioniert mein Anwendungsfall leider noch nicht. Ihr könnt mir dabei sicher weiterhelfen ... ;-)

Zum Testen habe ich das folgende Plug-In geschrieben. Es öffnet beim Start der Eclipse-Instanz ein ECore-Diagramm und versucht anschließend eine EClass hinzuzufügen ... was nur noch nicht funktioniert :-/

Wie kann ich den Editor aktualisieren, so dass das eingefügte Element zu sehen ist?

StartUp.java
Java:
package testecorediagrameditor;

import java.io.File;
import java.util.Collections;

import org.eclipse.emf.common.ui.URIEditorInput;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.*;
import org.eclipse.emf.ecore.resource.*;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.edit.command.AddCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gmf.ecore.edit.parts.EPackageEditPart;
import org.eclipse.gmf.ecore.part.*;
import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.ui.*;
import org.eclipse.ui.ide.IDE;

public class StartUp implements IStartup {

	ResourceSet resourceSet = new ResourceSetImpl();

	@Override
	public void earlyStartup() {
		final IWorkbench workbench = PlatformUI.getWorkbench();
		workbench.getDisplay().asyncExec(new TestECoreDiagramEditor());
	}

	private class TestECoreDiagramEditor implements Runnable {

		@Override
		public void run() {
			try {
				// create an EPackage
				URI ePackageURI = URI.createFileURI("temp_model.ecore");
				EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
				ePackage.setName("main package");
				Resource ePackageResource = resourceSet.createResource(ePackageURI);
				ePackageResource.getContents().add(ePackage);
				ePackageResource.save(Collections.EMPTY_MAP);
				new File(ePackageURI.toFileString()).deleteOnExit();

				// create an EPackage diagram
				URI ePackageDiagramURI = URI.createFileURI("temp_model.ecore_diagram");
				Diagram diagram = ViewService.createDiagram(ePackage, EPackageEditPart.MODEL_ID,
						EcoreDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
				Resource ePackageDiagramResource = resourceSet.createResource(ePackageDiagramURI);
				ePackageDiagramResource.getContents().add(diagram);
				ePackageDiagramResource.save(Collections.EMPTY_MAP);
				ePackageDiagramResource.save(Collections.EMPTY_MAP);
				new File(ePackageDiagramURI.toFileString()).deleteOnExit();

				// start the editor
				IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
				String editorId = EcoreDiagramEditor.ID;
				IEditorPart editorPart = IDE.openEditor(page, new URIEditorInput(ePackageDiagramURI), editorId);

				// try to add an element to the diagram
				DiagramDocumentEditor editor = (DiagramDocumentEditor) editorPart;
				TransactionalEditingDomain domain = editor.getEditingDomain();
				AddCommand.create(domain, ePackage, EcorePackage.eINSTANCE.getEPackage_EClassifiers(),
						EcoreFactory.eINSTANCE.createEClass()).execute();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}

MANIFEST.FM:
Java:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: TestECoreDiagramEditor
Bundle-SymbolicName: TestECoreDiagramEditor;singleton:=true
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: testecorediagrameditor.Activator
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.emf.ecore;bundle-version="2.6.1",
 org.eclipse.ui;bundle-version="3.6.1",
 org.eclipse.gmf.runtime.diagram.core;bundle-version="1.4.0",
 org.eclipse.gmf.ecore.editor;bundle-version="2.2.0",
 org.eclipse.ui.ide;bundle-version="3.6.1",
 org.eclipse.emf.common.ui;bundle-version="2.6.0",
 org.eclipse.gmf.runtime.diagram.ui.resources.editor;bundle-version="1.4.1",
 org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.4.1"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6

plugin.xml
Java:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.startup">
      <startup
            class="testecorediagrameditor.StartUp">
      </startup>
   </extension>
</plugin>
 
Zuletzt bearbeitet:

SEA

Mitglied
Ich habs nun herausgefunden ... der folgenden Quelltext läuft nun :)

Java:
package testecorediagrameditor;

import java.io.*;
import java.util.*;

import org.eclipse.emf.common.ui.URIEditorInput;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.*;
import org.eclipse.emf.ecore.resource.*;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gmf.ecore.edit.parts.EPackageEditPart;
import org.eclipse.gmf.ecore.part.*;
import org.eclipse.gmf.runtime.diagram.core.services.ViewService;
import org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor;
import org.eclipse.gmf.runtime.emf.type.core.commands.SetValueCommand;
import org.eclipse.gmf.runtime.emf.type.core.requests.SetRequest;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.ui.*;
import org.eclipse.ui.ide.IDE;

public class StartUp implements IStartup {

	@Override
	public void earlyStartup() {
		final IWorkbench workbench = PlatformUI.getWorkbench();
		workbench.getDisplay().asyncExec(new TestECoreDiagramEditor());
	}

	private class TestECoreDiagramEditor extends TimerTask implements Runnable {

		private IEditorPart editorPart = null;
		private Timer timer = new Timer();

		@Override
		public void run() {
			try {
				URI ePackageURI = URI.createFileURI("temp_model.ecore");
				URI ePackageDiagramURI = URI.createFileURI("temp_model.ecore_diagram");

				if (this.editorPart == null) {
					createTempECoreModelWithDiagram(ePackageURI, ePackageDiagramURI);

					// start the editor
					IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
					page.closeAllEditors(false);
					String editorId = EcoreDiagramEditor.ID;
					this.editorPart = IDE.openEditor(page, new URIEditorInput(ePackageDiagramURI), editorId);

					this.timer.scheduleAtFixedRate(this, 1000, 1000);
				}

				// try to add an element to the diagram
				DiagramDocumentEditor editor = (DiagramDocumentEditor) this.editorPart;
				TransactionalEditingDomain domain = editor.getEditingDomain();

				EPackage ePackage = (EPackage) editor.getDiagram().getElement();

				SetRequest setReq = new SetRequest(domain, ePackage, EcorePackage.eINSTANCE.getEPackage_EClassifiers(),
						EcoreFactory.eINSTANCE.createEClass());

				new SetValueCommand(setReq).execute(null, editor);

			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		private void createTempECoreModelWithDiagram(URI ePackageURI, URI ePackageDiagramURI) throws IOException {
			ResourceSet resourceSet = new ResourceSetImpl();

			// create an EPackage
			EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
			ePackage.setName("main package");
			Resource ePackageResource = resourceSet.createResource(ePackageURI);
			ePackageResource.getContents().add(ePackage);
			ePackageResource.save(Collections.EMPTY_MAP);
			new File(ePackageURI.toFileString()).deleteOnExit();

			// create an EPackage diagram
			Diagram diagram = ViewService.createDiagram(ePackage, EPackageEditPart.MODEL_ID,
					EcoreDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
			Resource ePackageDiagramResource = resourceSet.createResource(ePackageDiagramURI);
			ePackageDiagramResource.getContents().add(diagram);
			ePackageDiagramResource.save(Collections.EMPTY_MAP);
			new File(ePackageDiagramURI.toFileString()).deleteOnExit();
		}
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B GMF Editor mit nur einem Connection Tool Plattformprogrammierung 5
T Speichern eines Objectes in einem Editor (mit isDirty) Plattformprogrammierung 6
L RCP View in einem Editor öffnen? Plattformprogrammierung 3
K Editor nicht in der 'EditorArea' öffnen, sondern in einem Folder(Layout). Plattformprogrammierung 10
L HTML Editor Plattformprogrammierung 2
P Artifact-Editor in RCP-Anwendung Plattformprogrammierung 14
TheWhiteShadow RCP Zustand von Editor Toolbar ToggleButton aktualisieren Plattformprogrammierung 0
D Eclipse_Visual Editor Problem Plattformprogrammierung 2
M Extension Point für Content Assist in JSP Editor gesucht Plattformprogrammierung 2
TheWhiteShadow RCP Editor Inhalt speichern Plattformprogrammierung 3
TheWhiteShadow RCP Konstrukt für Editor in Eclipse gesucht. Plattformprogrammierung 3
P RCP Text Editor Example - Missing Bundles lassen sich nicht auffinden. Plattformprogrammierung 6
3 Eclipse Editor Plugin selektiert Projekt nicht Plattformprogrammierung 10
C Java Editor funktioniert nicht Plattformprogrammierung 9
G RCP Eclipse Editor + Guice Plattformprogrammierung 8
J RCP Verhindern, dass Editor geschlossen wird Plattformprogrammierung 5
slawaweis RCP Formularbasierter XML-Editor (bzw. vorhandenen XML-Editor integrieren) Plattformprogrammierung 8
C Eclipse Plugin Entwicklung: Editor für Flussdiagramme Plattformprogrammierung 6
E Editor Schriftgröße ändern per "Java Code" Plattformprogrammierung 8
W letzte angeklickten Editor ermitteln Plattformprogrammierung 3
B Eclpise Visual Editor Plattformprogrammierung 2
A RCP Editor-Reiter (FormEditor): Kann Rechtsklick-Menue überschrieben werden? Plattformprogrammierung 6
A RCP Tabs oben und unten im Editor oder mehrere Editoren? Plattformprogrammierung 7
T RCP - Scrollable Editor Plattformprogrammierung 4
J TableViewer aus Editor refreshen Plattformprogrammierung 5
T RCP Local History für eigenen Editor Plattformprogrammierung 9
L RCP Genmodel-Editor? Plattformprogrammierung 2
U Klassendiagramm-Editor (EMF, GMF, Ecore Tools) Plattformprogrammierung 3
M gmfgraph editor Plattformprogrammierung 6
B Eclipse RCP: Kontextsensitive Buttons für Editor und Hilfebutton für Wizard hinzufügen Plattformprogrammierung 5
J RCP Default Editor öffnen? Plattformprogrammierung 5
J Code Editor auslesen? Plattformprogrammierung 3
C [GEF] gespeicherte Dateien des generierten Editor Plattformprogrammierung 5
G Editor undo/redo Plattformprogrammierung 9
Spot84 datei im editor öffnen(tutorial undurchsichtig) Plattformprogrammierung 5
G Editor anzeigen Plattformprogrammierung 2
T Setze Gradienten auf Elemente(GMF-Editor) Plattformprogrammierung 2
S Custom Editor Content Assist Plattformprogrammierung 3
G Editor und doSave() Plattformprogrammierung 19
G WYSIWYG HTML Editor als Eclipse Plug-In Plattformprogrammierung 6
K XML Editor im Project Plattformprogrammierung 12
S RCP Anfängerfrage - Zusammenspiel View, Editor, Model Plattformprogrammierung 4
D GEF Editor als RCP ausführen Plattformprogrammierung 10
G Editor Plattformprogrammierung 6
N GMF Editor automatisch generieren Plattformprogrammierung 2
H Visueller Editor für Eclipse RCP Anwendung Plattformprogrammierung 3
G xml-Datei im Editor importieren Plattformprogrammierung 3
dzim Editor aus View öffnen - fehler: unbekannte Editor ID Plattformprogrammierung 11
Paule EMF Editor Dateiverknüpfungen Plattformprogrammierung 9
Z Aus einem PDF-Formular heraus eine Android App Outlook starten Plattformprogrammierung 3
D JNA Referenz zu einem Array übergeben in c++ Library(dll) Plattformprogrammierung 3
F OSGi Applikation läuft einem Linux langsam, auf dem anderen normal Plattformprogrammierung 4
M Grahiti in einem RCP Projekt implementieren Plattformprogrammierung 1
D Plugin - JUnit - Tests aus einem anderen Projekt ausführen Plattformprogrammierung 7
C RCP Zwei Commands in einem Handler Plattformprogrammierung 2
C RCP Generieren eines WAR-Files aus einem lauffähigen Product Plattformprogrammierung 2
S RCP Daten aus einem File auslesen, und daraus ein neues Objekt erstellen! Plattformprogrammierung 4
X Datei in einem Eclipse Projekt über Plugin zugreifen Plattformprogrammierung 2
E eclipse RCP Anwendung programmatisch / aus einem anderen Programme starten? Plattformprogrammierung 8
O Problem mit relativen Pfaden in einem RCP-Plugin Plattformprogrammierung 5
C Texteditor öffnet mit einem Error Plattformprogrammierung 3
M Problem beim Zugriff auf Klasse aus Fragment in einem anderen Plugin Plattformprogrammierung 3
S In einem Plugin main einer anderen Klasse aufrufen Plattformprogrammierung 18
K Einträge von einem PlugIn unterbinden. Plattformprogrammierung 6
G Verschiedene Farben in einem Treeview Plattformprogrammierung 5
dzim Teileweise Auswahl in einem CheckboxTreeViewer? Plattformprogrammierung 3
T Aus einem View in das andere wecheln. Plattformprogrammierung 13
E org.eclipse.ui.dialogs.ListSelectionDialog erzeugt ClassNotFoundException zur Laufzeit Plattformprogrammierung 4
K RCP Klassenkompilieren zur Laufzeit Plattformprogrammierung 3
S debug funktioniert, laufzeit meldet noclassdeffounderror Plattformprogrammierung 9
dzim Plug-Ins zur Laufzeit hinzufügen Plattformprogrammierung 12

Ähnliche Java Themen


Oben