package org.eclipse.gmf.tooling.runtime.ocl.tracker;

import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gmf.runtime.diagram.core.listener.NotificationListener;

public interface OclTracker {

	public void initialize(EObject context);

	public void installListeners(TransactionalEditingDomain domain, NotificationListener listener, Registrator registrator);

	public void uninstallListeners();

	public Object getValue();

	public boolean handleNotification(Notification notification);

	public String getExpressionBody();

	public interface Registrator {

		public void registerListener(String filterId, NotificationListener listener, EObject element);

		public void unregisterListener(String filterId);
	}

}
