/**
*
*/
/*******************************************************************************
* Copyright (c) 2010 SAP AG.
* 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:
* Emil Simeonov - initial API and implementation.
* Dimitar Donchev - initial API and implementation.
* Dimitar Tenev - initial API and implementation.
* Nevena Manova - initial API and implementation.
* Georgi Konstantinov - initial API and implementation.
*******************************************************************************/
package org.eclipse.wst.sse.sieditor.ui;
import java.text.MessageFormat;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IPartService;
import org.eclipse.ui.IWindowListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.IDocumentProviderExtension3;
import org.eclipse.wst.sse.sieditor.core.common.IDisposable;
import org.eclipse.wst.sse.sieditor.model.utils.StatusUtils;
import org.eclipse.wst.sse.sieditor.ui.i18n.Messages;
public class EditorActivationListener implements IPartListener, IWindowListener, IDisposable{
/**
*
*/
private final AbstractEditorWithSourcePage editor;
private IPartService partService;
private boolean activated;
private final IWorkbenchPart editorPart;
private long modificationStamp;
public EditorActivationListener(AbstractEditorWithSourcePage editor, IWorkbenchPart editorPart) {
this.editor = editor;
this.editorPart = editorPart;
this.partService = editorPart.getSite().getWorkbenchWindow().getPartService();
partService.addPartListener(this);
PlatformUI.getWorkbench().addWindowListener(this);
}
private void handleActivation() {
if (activated && isInputChanged()) {
handleEditorInputChanged();
}
}
@Override
public void doDispose() {
partService.removePartListener(this);
PlatformUI.getWorkbench().removeWindowListener(this);
}
@Override
public void partActivated(IWorkbenchPart part) {
activated = part == this.editorPart;
handleActivation();
}
@Override
public void partDeactivated(IWorkbenchPart part) {
if (part == this.editorPart) {
activated = false;
}
}
public void partBroughtToTop(IWorkbenchPart part) {
}
public void partClosed(IWorkbenchPart part) {
}
public void partOpened(IWorkbenchPart part) {
}
@Override
public void windowActivated(IWorkbenchWindow window) {
if (window == this.editor.getEditorSite().getWorkbenchWindow()) {
handleActivation();
}
}
public void windowClosed(IWorkbenchWindow window) {
}
public void windowDeactivated(IWorkbenchWindow window) {
}
public void windowOpened(IWorkbenchWindow window) {
}
private boolean isInputChanged() {
IDocumentProvider provider = editor.getSourcePage().getDocumentProvider();
if (provider == null) {
return false;
}
IDocumentProviderExtension3 provider3= (IDocumentProviderExtension3) provider;
long stamp= provider.getModificationStamp(editor.getEditorInput());
if (stamp != modificationStamp) {
modificationStamp = stamp;
return !provider3.isSynchronized(editor.getEditorInput());
}
return false;
}
private void handleEditorInputChanged() {
String message= MessageFormat.format(Messages.ResourceChangeHandler_1 + "\n" + //$NON-NLS-1$
Messages.ResourceChangeHandler_3, editor.getEditorInput().getName());
boolean answer = StatusUtils.showDialogWithResult(MessageDialog.QUESTION, Messages.ResourceChangeHandler_0, message);
if (answer) {
editor.revertContentsToSavedVersion();
}
}
}