package org.eclipse.gmf.tooling.runtime.parsers; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.ecore.EObject; import org.eclipse.gmf.tooling.runtime.ocl.tracker.OclTracker; import org.eclipse.gmf.tooling.runtime.ocl.tracker.OclTrackerFactory; abstract class OclTrackerWrapper { private final OclTrackerFactory myOclTrackerFactory; private OclTracker myOclTracker; public OclTrackerWrapper(OclTrackerFactory oclTrackerFactory) { myOclTrackerFactory = oclTrackerFactory; } public OclTracker getOclTracker() { if (myOclTracker == null) { myOclTracker = myOclTrackerFactory.createOclTracker(getExpressionBody(), true); } return myOclTracker; } public String getUpdatedString(IAdaptable element, int flags) { EObject target = (EObject) element.getAdapter(EObject.class); getOclTracker().initialize(target); return String.valueOf(getOclTracker().getValue()); } public boolean isAffectingEvent(Object event, int flags) { if (event instanceof Notification) { Notification notification = (Notification) event; return getOclTracker().handleNotification(notification); } return false; } protected abstract String getExpressionBody(); }