package org.xmind.ui.internal.e4handlers; import java.io.File; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.inject.Inject; import org.eclipse.core.commands.ParameterizedCommand; import org.eclipse.core.runtime.SafeRunner; import org.eclipse.jface.util.SafeRunnable; import org.eclipse.swt.SWT; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.xmind.ui.commands.MindMapCommandConstants; import org.xmind.ui.internal.MindMapUIPlugin; import org.xmind.ui.internal.dialogs.DialogUtils; import org.xmind.ui.mindmap.MindMapUI; public class OpenWorkbooksHandler { private static final List<String> NO_URIS = Collections.emptyList(); @Inject public void execute(final IWorkbenchWindow window, ParameterizedCommand command) { String uri = (String) command.getParameterMap() .get(MindMapCommandConstants.OPEN_WORKBOOK_PARAM_URI); execute(window, uri); } public static void execute(IWorkbenchWindow window, String uri) { execute(window, uri == null ? NO_URIS : Arrays.asList(uri)); } public static void execute(IWorkbenchWindow window, List<String> uris) { if (window == null) return; IWorkbenchPage page = window.getActivePage(); if (page == null) return; if (uris.isEmpty()) { List<File> files = DialogUtils.openXMindFiles(window.getShell(), SWT.MULTI); uris = new ArrayList<String>(files.size()); for (File file : files) { uris.add(file.toURI().toString()); } } IEditorPart lastEditor = null; for (String uri : uris) { if (uri != null) { IEditorPart editor = openMindMapEditor(page, uri); if (editor != null) { MindMapUIPlugin.getDefault().getUsageDataCollector() .increase("OpenWorkbookCount"); //$NON-NLS-1$ lastEditor = editor; } } } if (lastEditor != null) { page.activate(lastEditor); } } private static IEditorPart openMindMapEditor(final IWorkbenchPage page, final String uri) { final IEditorPart[] editor = new IEditorPart[1]; SafeRunner.run(new SafeRunnable() { public void run() throws Exception { IEditorInput input = MindMapUI.getEditorInputFactory() .createEditorInput(new URI(uri)); editor[0] = page.openEditor(input, MindMapUI.MINDMAP_EDITOR_ID, false); } }); return editor[0]; } }