package org.xmind.ui.internal.handlers;
import java.io.File;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.handlers.HandlerUtil;
import org.xmind.core.ISheet;
import org.xmind.core.IWorkbook;
import org.xmind.core.util.CloneHandler;
import org.xmind.gef.command.Command;
import org.xmind.gef.command.CompoundCommand;
import org.xmind.gef.command.ICommandStack;
import org.xmind.ui.commands.AddSheetCommand;
import org.xmind.ui.dialogs.IDialogConstants;
import org.xmind.ui.internal.MindMapUIPlugin;
import org.xmind.ui.internal.wizards.WizardMessages;
import org.xmind.ui.mindmap.IWorkbookRef;
import org.xmind.ui.mindmap.MindMapUI;
public class ImportFromWorkbookHandler extends AbstractHandler {
public Object execute(ExecutionEvent event) throws ExecutionException {
final IEditorPart editor = HandlerUtil.getActiveEditorChecked(event);
final IWorkbook targetWorkbook = editor.getAdapter(IWorkbook.class);
if (targetWorkbook == null)
throw new ExecutionException("No workbook available in editor."); //$NON-NLS-1$
final ICommandStack commandStack = editor
.getAdapter(ICommandStack.class);
FileDialog dialog = new FileDialog(editor.getSite().getShell(),
SWT.OPEN);
dialog.setText(WizardMessages.ImportPage_FileDialog_text);
dialog.setFilterExtensions(new String[] { "*" //$NON-NLS-1$
+ MindMapUI.FILE_EXT_XMIND });
dialog.setFilterNames(new String[] { NLS.bind("{0} (*{1})", //$NON-NLS-1$
IDialogConstants.FILE_DIALOG_FILTER_WORKBOOK,
MindMapUI.FILE_EXT_XMIND) });
final String sourcePath = dialog.open();
if (sourcePath == null)
/// canceled
return null;
SafeRunner.run(new SafeRunnable() {
public void run() throws Exception {
URI uri = new File(sourcePath).toURI();
IWorkbookRef sourceWorkbookRef = MindMapUIPlugin.getDefault()
.getWorkbookRefFactory().createWorkbookRef(uri, null);
if (sourceWorkbookRef == null)
return;
sourceWorkbookRef.open(null);
try {
IWorkbook sourceWorkbook = sourceWorkbookRef.getWorkbook();
if (sourceWorkbook == null)
return;
List<Command> commands = new ArrayList<Command>();
CloneHandler cloneHandler = new CloneHandler()
.withWorkbooks(sourceWorkbook, targetWorkbook);
for (ISheet sourceSheet : sourceWorkbook.getSheets()) {
ISheet targetSheet = (ISheet) cloneHandler
.cloneObject(sourceSheet);
if (targetSheet != null) {
commands.add(new AddSheetCommand(targetSheet,
targetWorkbook));
}
}
Command command = new CompoundCommand(commands);
if (commandStack != null) {
commandStack.execute(command);
} else {
command.execute();
}
} finally {
sourceWorkbookRef.close(null);
}
}
});
return null;
}
}