/**
* <p>Copyright: Copyright (c) 2009</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.ui.editor;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.resources.IResourceDeltaVisitor;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import com.hundsun.ares.studio.ui.IARESResourceEditorInput;
/**
* �ļ�ͬ���༭��
* @author sundl
*/
public class FileSynchronizer implements IResourceChangeListener, IResourceDeltaVisitor {
private IEditorPart editor;
protected boolean fIsInstalled= false;
public FileSynchronizer(IEditorPart editor) {
this.editor = editor;
}
protected IFile getFile() {
IEditorInput editorInput = editor.getEditorInput();
if (editorInput instanceof IFileEditorInput) {
return ((IFileEditorInput)editorInput).getFile();
} else if (editorInput instanceof IARESResourceEditorInput) {
return (IFile) ((IARESResourceEditorInput)editorInput).getARESResource().getLib().getResource();
}
return null;
}
public void install() {
getFile().getWorkspace().addResourceChangeListener(this);
fIsInstalled= true;
}
public void uninstall() {
getFile().getWorkspace().removeResourceChangeListener(this);
fIsInstalled= false;
}
/* (non-Javadoc)
* @see org.eclipse.core.resources.IResourceDeltaVisitor#visit(org.eclipse.core.resources.IResourceDelta)
*/
public boolean visit(IResourceDelta delta) throws CoreException {
IFile file = getFile();
if(delta == null || file == null) {
return false;
}
delta = delta.findMember(file.getFullPath());
if(delta == null) {
return false;
}
switch(delta.getKind()) {
case IResourceDelta.CHANGED:
if((IResourceDelta.CONTENT & delta.getFlags()) != 0) {
// ���ݱ仯��֪ͨ�༭��������Ӧ��
}
break;
case IResourceDelta.REMOVED:
if((IResourceDelta.MOVED_TO & delta.getFlags()) != 0) {
// �ļ����ƶ���֪ͨ�༭��������Ӧ��
} else {
editor.getSite().getShell().getDisplay().asyncExec(new Runnable() {
public void run() {
editor.getSite().getWorkbenchWindow().getActivePage().closeEditor(editor, false);
}
});
}
break;
}
return false;
}
public void resourceChanged(IResourceChangeEvent e) {
IResourceDelta delta= e.getDelta();
try {
if (delta != null && fIsInstalled)
delta.accept(this);
} catch (CoreException x) {
//handleCoreException(x, "FileDocumentProvider.resourceChanged"); //$NON-NLS-1$
}
}
}