/*******************************************************************************
* Copyright (c) 2005 AIRBUS FRANCE.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* David Sciamma (Anyware Technologies),
* Nicolas Lalevee (Anyware Technologies),
* Jacques Lescot (Anyware Technologies) - initial API and implementation
*******************************************************************************/
package org.eclipse.papyrus.uml.diagram.common.providers;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.swt.widgets.Display;
/**
* This EMF listener receives an event and then handles this event in the UI
* thread
*
* @author <a href="david.sciamma@anyware-tech.com">David Sciamma</a>
*/
public abstract class UIAdapterImpl extends AdapterImpl {
/**
* Call the handlePropertyChanged method in the UI thread
*
* @see org.eclipse.emf.common.notify.Adapter#notifyChanged(org.eclipse.emf.common.notify.Notification)
*/
public final void notifyChanged(Notification msg) {
if(Display.getCurrent() != Display.getDefault()) {
syncNotifyChanged(msg);
} else {
safeNotifyChanged(msg);
}
}
/**
* Handles the event notification in the UI thread
*
* @param msg
* the event notification
*/
private void syncNotifyChanged(final Notification msg) {
Display.getDefault().syncExec(new Runnable() {
public void run() {
safeNotifyChanged(msg);
}
});
}
/**
* This method is called when an event occured on the model objects.<br>
* This method is always called in the Ui thread
*
* @param msg
* the event notification
*/
protected abstract void safeNotifyChanged(Notification msg);
}