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;
+	}
+	
 }