/*=============================================================================#
# Copyright (c) 2009-2016 Stephan Wahlbrink (WalWare.de) and others.
# 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:
# Stephan Wahlbrink - initial API and implementation
#=============================================================================*/
package de.walware.statet.nico.ui.util;
import java.util.Map;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.ide.IDE;
import de.walware.ecommons.ts.util.ToolCommandHandlerUtil;
import de.walware.ecommons.ui.util.UIAccess;
import de.walware.statet.nico.core.runtime.IConsoleService;
import de.walware.statet.nico.core.runtime.IToolEventHandler;
import de.walware.statet.nico.core.runtime.ToolWorkspace;
import de.walware.statet.nico.internal.ui.AbstractConsoleCommandHandler;
import de.walware.statet.nico.ui.NicoUI;
import de.walware.statet.nico.ui.views.HistoryView;
/**
* Handles in Eclipse IDE Platform:
* {@link IToolEventHandler#SHOW_HISTORY_ID} - shows the history view
*
*/
public class EclipseIDEOperationsHandler extends AbstractConsoleCommandHandler {
public static final String SHOW_FILE_ID = "common/showFile"; //$NON-NLS-1$
public static final String SHOW_HISTORY_ID = "common/showHistory"; //$NON-NLS-1$
@Override
public IStatus execute(final String id, final IConsoleService service, final Map<String, Object> data, final IProgressMonitor monitor) {
if (id.equals(SHOW_FILE_ID)) {
final IFileStore fileStore;
String fileName = ToolCommandHandlerUtil.getCheckedData(data, "filename", String.class, false); //$NON-NLS-1$
if (fileName == null) {
fileName = ToolCommandHandlerUtil.getCheckedData(data, "fileName", String.class, true); //$NON-NLS-1$
}
final ToolWorkspace workspaceData = service.getWorkspaceData();
try {
fileStore = workspaceData.toFileStore(fileName);
}
catch (final CoreException e) {
final Status status = new Status(IStatus.ERROR, NicoUI.PLUGIN_ID, -1, "Failed to resolve filename.", e);
service.handleStatus(status, monitor);
return status;
}
final Display display = UIAccess.getDisplay();
display.syncExec(new Runnable() {
@Override
public void run() {
final IWorkbenchPage page = NicoUI.getToolRegistry().findWorkbenchPage(service.getTool());
try {
IDE.openEditorOnFileStore(page, fileStore);
}
catch (final PartInitException e) {
service.handleStatus(new Status(IStatus.ERROR, NicoUI.PLUGIN_ID, -1,
"An error occurred when trying open/activate the Editor.", e), monitor);
}
}
});
return Status.OK_STATUS;
}
if (id.equals(SHOW_HISTORY_ID)) {
final String pattern = ToolCommandHandlerUtil.getCheckedData(data, "pattern", String.class, false); //$NON-NLS-1$
final Display display = UIAccess.getDisplay();
display.syncExec(new Runnable() {
@Override
public void run() {
try {
final IWorkbenchPage page = NicoUI.getToolRegistry().findWorkbenchPage(service.getTool());
final HistoryView view = (HistoryView) page.showView(NicoUI.HISTORY_VIEW_ID);
if (pattern != null) {
view.search(pattern, false);
}
}
catch (final PartInitException e) {
service.handleStatus(new Status(IStatus.ERROR, NicoUI.PLUGIN_ID, -1,
"An error occurred when trying open/activate the History view.", e), monitor);
}
}
});
return Status.OK_STATUS;
}
throw new UnsupportedOperationException();
}
}