/***************************************************************************** * Copyright (c) 2010 CEA LIST. * * * 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: * Ansgar Radermacher (CEA LIST) ansgar.radermacher@cea.fr - Initial API and implementation * *****************************************************************************/ package org.eclipse.papyrus.uml.diagram.common.resourceupdate; import org.eclipse.papyrus.infra.core.lifecycleevents.DoSaveEvent; import org.eclipse.papyrus.infra.core.lifecycleevents.ISaveEventListener; import org.eclipse.swt.widgets.Display; /** * A listener for save actions. The goal is to track te editors save operations * in order to distinguish external resource modifications and those triggered * by the save operation * * @author Ansgar Radermacher (CEA LIST) */ public class SaveListener { public SaveListener() { preSaveListener = new PreSaveListener(); postSaveListener = new PreSaveListener(); postSaveRunnable = new PostSaveRunnable(); } class PreSaveListener implements ISaveEventListener { public void doSaveAs(DoSaveEvent event) { saveActive = true; } public void doSave(DoSaveEvent event) { saveActive = true; } }; class PostSaveListener implements ISaveEventListener { public void doSaveAs(DoSaveEvent event) { // do not reset saveActive directly to avoid eventual race // conditions (avoid that the // resource change listener executes after the flag has been reset) Display.getDefault().asyncExec(postSaveRunnable); } public void doSave(DoSaveEvent event) { Display.getDefault().asyncExec(postSaveRunnable); } }; class PostSaveRunnable implements Runnable { public void run() { saveActive = false; }; } public boolean isSaveActive() { return saveActive; } private boolean saveActive; ISaveEventListener preSaveListener; ISaveEventListener postSaveListener; Runnable postSaveRunnable; };