GEF tutorial Fehler finden

Mappenz

Bekanntes Mitglied
Hi,

ich versuche mir GEF anzulernen. Es gibt ja leider nicht besonders viel Matherial dazu. Folgendes Tutorial finde gefällt mir eigentlich: EclipseCon 2008. Leider bin ich die meiste Zeit damit beschäftigt meine Probleme zu lösen. Nun Suche ich nach dem Grund, weshalb Knoten nach dem Einfügen nicht angezeigt werden und bin auch schon am Ende meines Lateins. Das ist sicher auch dem Umstand geschuldet dass mein Verständnis von GEF schlecht ist. Knoten die ich mit der Klasse Contentprovider
Java:
package org.jbpm.graph.ui.editor;

import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;

public class ContentProvider {
	public static final ContentProvider INSTANCE =
		new ContentProvider();
	public Graph newSampleGraph() {
		Graph result = new Graph();
		result.addNode(newNode(200, 150, 65, 35, "first"));
		result.addNode(newNode(300, 250, 65, 35, "second"));
		result.addNode(newNode(100, 300, 65, 35, "third"));
		newConnection(result.getNodes().get(0), result.getNodes().get(1));
		return result;
	}

	private Node newNode(
			int x, int y, int width, int height, String name) {
		Node result = new Node();
		result.setConstraint(
				new Rectangle(new Point(x, y),
						new Dimension(width, height)));
		result.setName(name);
		return result;
	}

	private Connection newConnection(Node source, Node target) {
		Connection result = new Connection();
		result.setSource(source);
		result.setTarget(target);
		return result;
	}

}
einfüge werden Gezeichnet. Im Debugger kann ich sehen, dass Knoten die ich über die Pallette (im laufenden Programm) einfüge im Graph der vom Contentprovider erzeugt wird erscheinen.


Java:
public class Node extends Observable{
	Rectangle constraint;
	String name;

      	public Rectangle getConstraint() {
		return constraint;
	}
	public void setConstraint(Rectangle constraint) {
		this.constraint = constraint;
		setChanged();
		notifyObservers();
	}
        ...
notifyObservers() wird aufgerufen. Ich vermute aber dass hier was schief geht. Im debugger kann ich nicht nachvollziehen wie das benachrichtigen abläuft. Wer sind denn überhaupt die Beobachter?

Hat jemand Ideen wie ich den Fehler finde? Außerdem habe ich gerade GMF gefunden, würde jemand empfehlen GEF sein zu lassen und mit GMF weiter zu machen?
 
Beim schreiben des letzten Posts habe ich mir die Frage gestellt, wer überhaupt Listener ist. Dafür habe ich auch eine Klasse. Allerdings ist wurde die nicht Regestriert, denn ich habe die Zeile "vorläufig" auskommentiert als sie eine NPE geworfen hat.


Java:
	public void initGraphEditorListener() {
		GraphEditorListener graphEditorListener = new GraphEditorListener(actionRegistry);
		ISelectionService selectionService = getSite().getWorkbenchWindow().getSelectionService();
		editDomain.getCommandStack().addCommandStackListener(graphEditorListener);
		selectionService.addSelectionListener(graphEditorListener);
	}

getSite() gibt null zurück. Das ist wahrscheinlich ein Problem daszu Eclipse Plugins gehört. Kann mir vielleicht trotzdem jemand weiter helfen?
 
Hat jemand Ideen wie ich den Fehler finde? Außerdem habe ich gerade GMF gefunden, würde jemand empfehlen GEF sein zu lassen und mit GMF weiter zu machen?
GEF ist mächtig aber sehr komplex. Nur wenige schreiben nach meiner Erfahrung händisch GEF Code.
Oft läuft es auf Zest, Graphiti, oder GMF heraus (die letzten beiden basieren auf GEF). Letztlich hängt alles davon ab was dein Editor können soll und wie er aussehen soll. Wenn dir das Look'n'Feel von Graphiti zB zusagt, dann hast du einen guten Kandidaten, wenn es mehr GMF artig sein sollte, dann eher die Richtung. Allen Ansätzen gemeinsam ist aber: Am besten geht es mit einem EMF Modell das du dir vorher überlegst und modellierst.
 
Hmm, mit Zest habe ich schon ein wenig herum experimentiert und es war schon deutlich einfacher als GEF. Da ich nun schon viel Zeit in GEF investiert habe und GMF schon bei der Installation Schwierigkeiten machte habe ich das erst mal zur Seite gelegt. Es fällt nicht leicht zu überblicken welche Fähigkeiten, Vorzüge und Grenzen die Frameworks haben.

Mein Modell ist nicht Kompliziert, es ist ein Kompositum, wobei die Komponenten nicht nur in einer enthalten-in, sondern auch in einer folgt-folgt auf Beziehung stehen können. Das soll sich auch in der Darstellung widerspiegeln. In den Blättern stehen Attribute die der Benutzer über den View ändern können soll. So wie ich das sehe können das alle 3 Frameworks.
 
Bei GMF ist es mandatory ein EMF Modell zu verwenden, bei GEF und Graphiti würde ich sagen 'strongly advised'
Mein Modell ist nicht Kompliziert, es ist ein Kompositum, wobei die Komponenten nicht nur in einer enthalten-in, sondern auch in einer folgt-folgt auf Beziehung stehen können.
Umso besser, du solltest keine Schwierigkeiten haben das mit EMF abzubilden.

Zest ist gut für Viewer und sehr einfache Editoren.
Graphiti ist ein deutlich vereinfachte API um GEF und ein IMO sehr ansprechendes Look and Feel
GMF generiert aus einem EMF Modell und ein paar GMF Definitionen einen GEF Editor, der out-of-the-box viel kann, aber schwierig zu customizen ist (persönliche Meinung).

Make your pick 🙂
 

Neue Themen


Zurück
Oben