Bug 549546: [R-Console] Improve command handler for 'common/showFile'
(rj::openInEditor) for files inside the workspace newly created in R
Change-Id: I67020b9188f2a9061c4450d8fe52d3882f9933a8
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/EclipseIDEOperationsHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/EclipseIDEOperationsHandler.java
index 1be7ce5..aeebc29 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/EclipseIDEOperationsHandler.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/util/EclipseIDEOperationsHandler.java
@@ -17,6 +17,9 @@
import java.util.Map;
import org.eclipse.core.filesystem.IFileStore;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPage;
@@ -29,6 +32,7 @@
import org.eclipse.statet.jcommons.status.Statuses;
import org.eclipse.statet.jcommons.ts.core.util.ToolCommandHandlerUtils;
+import org.eclipse.statet.ecommons.runtime.core.util.StatusUtils;
import org.eclipse.statet.ecommons.ui.util.UIAccess;
import org.eclipse.statet.internal.nico.ui.AbstractConsoleCommandHandler;
@@ -57,6 +61,7 @@
final ProgressMonitor m) {
if (id.equals(SHOW_FILE_ID)) {
final IFileStore fileStore;
+ final IFile workspaceFile;
String fileName = ToolCommandHandlerUtils.getCheckedData(data, "filename", String.class, false); //$NON-NLS-1$
if (fileName == null) {
fileName = ToolCommandHandlerUtils.getCheckedData(data, "fileName", String.class, true); //$NON-NLS-1$
@@ -64,6 +69,7 @@
final ToolWorkspace workspaceData = service.getWorkspaceData();
try {
fileStore = workspaceData.toFileStore(fileName);
+ workspaceFile = getWorkspaceFile(fileStore, m);
}
catch (final CoreException e) {
final Status status= new ErrorStatus(NicoUI.BUNDLE_ID,
@@ -78,7 +84,12 @@
public void run() {
final IWorkbenchPage page = NicoUI.getToolRegistry().findWorkbenchPage(service.getTool());
try {
- IDE.openEditorOnFileStore(page, fileStore);
+ if (workspaceFile != null) {
+ IDE.openEditor(page, workspaceFile);
+ }
+ else {
+ IDE.openEditorOnFileStore(page, fileStore);
+ }
}
catch (final PartInitException e) {
final Status status= new ErrorStatus(NicoUI.BUNDLE_ID,
@@ -116,4 +127,17 @@
throw new UnsupportedOperationException();
}
+ private IFile getWorkspaceFile(final IFileStore fileStore, final ProgressMonitor m) throws CoreException {
+ final IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ final IFile[] files = root.findFilesForLocationURI(fileStore.toURI());
+ if (files != null && files.length > 0) {
+ final IFile file = files[0];
+ if (!file.exists()) { // Bug 549546
+ file.refreshLocal(0, StatusUtils.convert(m));
+ }
+ return file;
+ }
+ return null;
+ }
+
}