Author: koen.aers(a)jboss.com
Date: 2011-11-28 13:45:41 -0500 (Mon, 28 Nov 2011)
New Revision: 36710
Modified:
trunk/forge/plugins/org.jboss.tools.forge.ui/META-INF/MANIFEST.MF
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/OpenPostProcessor.java
Log:
JBIDE-10203: Open Command Should Show File in Editor or Expand Folder in Explorer
Modified: trunk/forge/plugins/org.jboss.tools.forge.ui/META-INF/MANIFEST.MF
===================================================================
--- trunk/forge/plugins/org.jboss.tools.forge.ui/META-INF/MANIFEST.MF 2011-11-28 17:27:12
UTC (rev 36709)
+++ trunk/forge/plugins/org.jboss.tools.forge.ui/META-INF/MANIFEST.MF 2011-11-28 18:45:41
UTC (rev 36710)
@@ -17,7 +17,11 @@
org.eclipse.ui.views,
org.jboss.tools.forge.core;bundle-version="1.0.0",
org.eclipse.core.filesystem;bundle-version="1.3.100",
- org.eclipse.ui.navigator;bundle-version="3.5.100"
+ org.eclipse.ui.navigator;bundle-version="3.5.100",
+ org.eclipse.rse.ui;bundle-version="3.2.1",
+ org.eclipse.rse.core;bundle-version="3.2.1",
+ org.eclipse.rse.subsystems.files.core;bundle-version="3.2.101",
+ org.eclipse.rse.subsystems.files.local;bundle-version="2.1.200"
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-ActivationPolicy: lazy
Bundle-Activator: org.jboss.tools.forge.ui.ForgeUIPlugin
Modified:
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/OpenPostProcessor.java
===================================================================
---
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/OpenPostProcessor.java 2011-11-28
17:27:12 UTC (rev 36709)
+++
trunk/forge/plugins/org.jboss.tools.forge.ui/src/org/jboss/tools/forge/ui/console/OpenPostProcessor.java 2011-11-28
18:45:41 UTC (rev 36710)
@@ -1,18 +1,24 @@
package org.jboss.tools.forge.ui.console;
import java.io.File;
+import java.util.ArrayList;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
-import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.rse.ui.view.IRSEViewPart;
+import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
+import org.eclipse.rse.ui.view.SystemAdapterHelpers;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
@@ -24,34 +30,45 @@
public class OpenPostProcessor {
public void postProcess(String line, String currentResourcePath) {
- String resourceToOpen = currentResourcePath + File.separator +
line.substring(5).trim();
+ String resourceToOpen = line.substring(5).trim();
+ if (!resourceToOpen.startsWith("/")) {
+ resourceToOpen = currentResourcePath + File.separator + resourceToOpen;
+ }
IPath path = new Path(resourceToOpen);
IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(resourceToOpen));
if (fileStore.fetchInfo().isDirectory()) {
- expandDirectoryInExplorer(path);
+ IContainer container =
ResourcesPlugin.getWorkspace().getRoot().getContainerForLocation(path);
+ if (container != null) {
+ expandWorkspaceDirectory(container);
+ } else {
+ expandSystemDirectory(fileStore);
+ }
} else {
openFileInEditor(fileStore);
}
}
- private void openFileInEditor(IFileStore fileStore) {
- try {
- IWorkbenchPage workbenchPage =
ForgeCommandPostProcessorHelper.getActiveWorkbenchPage();
- if (workbenchPage != null) {
- IDE.openEditorOnFileStore(workbenchPage, fileStore);
+ private void expandSystemDirectory(IFileStore fileStore) {
+ IWorkbenchPage workbenchPage =
ForgeCommandPostProcessorHelper.getActiveWorkbenchPage();
+ IViewPart remoteSystemView =
workbenchPage.findView("org.eclipse.rse.ui.view.systemView");
+ if (remoteSystemView == null) {
+ try {
+ remoteSystemView =
workbenchPage.showView("org.eclipse.rse.ui.view.systemView");
+ } catch (PartInitException e) {
+ ForgeUIPlugin.log(e);
}
- } catch (PartInitException e) {
- ForgeUIPlugin.log(e);
}
+ if (remoteSystemView != null) {
+ expandInRemoteSystemView(remoteSystemView, fileStore);
+ }
}
- private void expandDirectoryInExplorer(IPath path) {
+ private void expandWorkspaceDirectory(IContainer container) {
IWorkbenchPage workbenchPage =
ForgeCommandPostProcessorHelper.getActiveWorkbenchPage();
- IContainer objectToSelect =
ResourcesPlugin.getWorkspace().getRoot().getContainerForLocation(path);
- if (objectToSelect != null && workbenchPage != null) {
+ if (workbenchPage != null) {
IViewPart projectExplorer =
workbenchPage.findView("org.eclipse.ui.navigator.ProjectExplorer");
if (projectExplorer != null && projectExplorer instanceof CommonNavigator) {
- expandInProjectExplorer((CommonNavigator)projectExplorer, objectToSelect);
+ expandInProjectExplorer((CommonNavigator)projectExplorer, container);
}
IViewPart packageExplorer =
workbenchPage.findView("org.eclipse.jdt.ui.PackageExplorer");
if (packageExplorer == null && projectExplorer == null) {
@@ -62,11 +79,22 @@
}
}
if (packageExplorer != null) {
- expandInPackageExplorer(packageExplorer, objectToSelect);
+ expandInPackageExplorer(packageExplorer, container);
}
}
}
+ private void openFileInEditor(IFileStore fileStore) {
+ try {
+ IWorkbenchPage workbenchPage =
ForgeCommandPostProcessorHelper.getActiveWorkbenchPage();
+ if (workbenchPage != null) {
+ IDE.openEditorOnFileStore(workbenchPage, fileStore);
+ }
+ } catch (PartInitException e) {
+ ForgeUIPlugin.log(e);
+ }
+ }
+
private void expandInProjectExplorer(CommonNavigator projectExplorer, IContainer
container) {
projectExplorer.selectReveal(new StructuredSelection(container));
TreeViewer treeViewer = projectExplorer.getCommonViewer();
@@ -83,4 +111,58 @@
}
}
+ private Viewer getViewer(IViewPart remoteSystemView) {
+ if (remoteSystemView instanceof IRSEViewPart) {
+ return ((IRSEViewPart)remoteSystemView).getRSEViewer();
+ } else {
+ return null;
+ }
+ }
+
+ private ArrayList<String> createSegmentNames(IFileStore fileStore) {
+ ArrayList<String> result = new ArrayList<String>();
+ while (fileStore.getParent() != null) {
+ result.add(0, fileStore.getName());
+ fileStore = fileStore.getParent();
+ }
+ result.add(0, "/");
+ result.add(0, "Root");
+ result.add(0, "Local Files");
+ result.add(0, "Local");
+ return result;
+ }
+
+ private void expandInRemoteSystemView(
+ IViewPart remoteSystemView,
+ IFileStore fileStore) {
+ Viewer viewer = getViewer(remoteSystemView);
+ Object input = viewer.getInput();
+ ArrayList<String> names = createSegmentNames(fileStore);
+ ArrayList<Object> treeSegments = new ArrayList<Object>();
+ for (String name : names) {
+ if (input != null && input instanceof IAdaptable) {
+ ISystemViewElementAdapter adapter = SystemAdapterHelpers.getViewAdapter(input);
+ for (Object object : adapter.getChildren((IAdaptable)input, null)) {
+ if (object instanceof IAdaptable) {
+ adapter = SystemAdapterHelpers.getViewAdapter(object);
+ if (name.equals(adapter.getText(object))) {
+ input = object;
+ treeSegments.add(input);
+ break;
+ }
+ }
+ }
+ } else {
+ treeSegments.clear();
+ break;
+ }
+ }
+ TreePath treePath = new TreePath(treeSegments.toArray());
+ viewer.setSelection(new StructuredSelection(treePath));
+ if (viewer instanceof TreeViewer) {
+ ((TreeViewer)viewer).expandToLevel(treePath, 1);
+
+ }
+ }
+
}
Show replies by date