package org.xmind.cathy.internal.jobs;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.dialogs.ListSelectionDialog;
import org.xmind.cathy.internal.WorkbenchMessages;
import org.xmind.ui.internal.editor.WorkbookRefManager;
import org.xmind.ui.mindmap.IMindMapImages;
import org.xmind.ui.mindmap.MindMapUI;
public class CheckRecoverFilesJob extends AbstractCheckFilesJob {
private class ListLabelProvider extends LabelProvider {
public String getText(Object element) {
if (element instanceof IEditorInput)
return ((IEditorInput) element).getName();
return null;
}
public Image getImage(Object element) {
if (element instanceof IEditorInput) {
ImageDescriptor image = MindMapUI.getImages().get(
IMindMapImages.XMIND_ICON);
if (image != null)
return image.createImage();
}
return null;
}
}
private List<IEditorInput> loadedFiles;
public CheckRecoverFilesJob(IWorkbench workbench) {
super(workbench, WorkbenchMessages.CheckRecoverFilesJob_jobName);
}
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask(null, 3);
checkAndRecoverFiles(monitor);
monitor.done();
return Status.OK_STATUS;
}
/**
* Check and recover files opened in the last workbench session. This method
* consumes 2 ticks from the given progress monitor.
*
* @param monitor
*/
protected void checkAndRecoverFiles(IProgressMonitor monitor) {
loadFilesToRecover(new SubProgressMonitor(monitor, 1));
if (loadedFiles != null && !loadedFiles.isEmpty()) {
filterFiles(new SubProgressMonitor(monitor, 1));
openEditors(monitor,
WorkbenchMessages.CheckRecoverFilesJob_RecoverFiles_name,
1, false);
} else {
monitor.worked(2);
}
WorkbookRefManager.getInstance().clearLastSession();
}
private void loadFilesToRecover(IProgressMonitor monitor) {
monitor.beginTask(
WorkbenchMessages.CheckRecoverFilesJob_LoadFiles_name, 1);
loadedFiles = WorkbookRefManager.getInstance().loadLastSession();
monitor.done();
}
private void filterFiles(IProgressMonitor monitor) {
monitor.beginTask(
WorkbenchMessages.CheckRecoverFilesJob_FilterFiles_name, 1);
getWorkbench().getDisplay().syncExec(new Runnable() {
public void run() {
ListSelectionDialog dialog = new ListSelectionDialog(null,
loadedFiles, new ArrayContentProvider(),
new ListLabelProvider(),
WorkbenchMessages.appWindow_ListSelectionDialog_Text);
dialog.setTitle(WorkbenchMessages.appWindow_ListSelectionDialog_Title);
dialog.setInitialElementSelections(loadedFiles);
int ret = dialog.open();
if (ret == ListSelectionDialog.CANCEL)
return;
Object[] result = dialog.getResult();
for (Object input : result) {
addEditorToOpen((IEditorInput) input);
}
}
});
monitor.done();
}
}