diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.java
index 407eb825fd2..dc61779b713 100644
--- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.java
+++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.java
@@ -260,6 +260,13 @@ public class FileResources extends NLS
public static String MESSAGE_ERROR_CACHING_REMOTE_FILES;
public static String MESSAGE_SYNCHRONIZING_REMOTE_FILE_CACHE;
+ // link with editor
+ public static String MESSAGE_EXPANDING_FOLDER;
+ public static String MESSAGE_EXPANDING_FILTER;
+ public static String MESSSAGE_QUERYING_FILE;
+
+
+
static
{
// load message values from bundle file
diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.properties b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.properties
index 53601b6918e..b4a48840452 100644
--- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.properties
+++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/FileResources.properties
@@ -254,3 +254,11 @@ MESSAGE_ENCODING_NOT_SUPPORTED=The selected encoding is not supported.
#=============================================================
MESSAGE_ERROR_CACHING_REMOTE_FILES=Error Caching Remote Files
MESSAGE_SYNCHRONIZING_REMOTE_FILE_CACHE=Remote File Cache Synchronizing Remote File Cache
+
+#=============================================================
+# Link with Editor...
+#=============================================================
+MESSAGE_EXPANDING_FOLDER=Expanding Folder...
+MESSAGE_EXPANDING_FILTER=Expanding Filter...
+MESSSAGE_QUERYING_FILE=Querying File...
+
diff --git a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/LinkWithSystemViewAction.java b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/LinkWithSystemViewAction.java
index 1a9606cf2c5..676db8ebe27 100644
--- a/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/LinkWithSystemViewAction.java
+++ b/rse/plugins/org.eclipse.rse.files.ui/src/org/eclipse/rse/internal/files/ui/actions/LinkWithSystemViewAction.java
@@ -13,17 +13,30 @@
********************************************************************************/
package org.eclipse.rse.internal.files.ui.actions;
+import java.util.Vector;
+
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.rse.core.RSECorePlugin;
-import org.eclipse.rse.core.subsystems.ISubSystem;
-import org.eclipse.rse.internal.ui.view.SystemView;
+import org.eclipse.rse.core.filters.ISystemFilterPoolReferenceManager;
+import org.eclipse.rse.core.filters.ISystemFilterReference;
+import org.eclipse.rse.internal.files.ui.FileResources;
import org.eclipse.rse.internal.ui.view.SystemViewPart;
import org.eclipse.rse.subsystems.files.core.SystemIFileProperties;
-import org.eclipse.rse.ui.IViewLinker;
+import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFile;
+import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem;
+import org.eclipse.rse.ui.view.ContextObject;
import org.eclipse.rse.ui.view.ISystemEditableRemoteObject;
+import org.eclipse.rse.ui.view.ISystemTree;
+import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
+import org.eclipse.rse.ui.view.IViewLinker;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
@@ -33,9 +46,247 @@ import org.eclipse.ui.IViewPart;
public class LinkWithSystemViewAction implements IViewActionDelegate {
+ /**
+ * Main thread runnable used to create tree items in system view and look for the target remote file
+ * item in the tree. If the remote file item is not found, then this indirectly recurses via a new
+ * LinkFromFolderJob.
+ */
+ private class ShowChildrenInTree implements Runnable
+ {
+ private Object _parentObject;
+ private Object[] _children;
+ private ISystemTree _systemTree;
+ private IRemoteFile _targetRemoteFile;
+ private ISystemFilterReference _filterReference;
+
+ public ShowChildrenInTree(Object parentObject, Object[] children, ISystemFilterReference filterReference, ISystemTree systemTree, IRemoteFile targetRemoteFile)
+ {
+ _parentObject = parentObject;
+ _children = children;
+ _systemTree = systemTree;
+ _targetRemoteFile = targetRemoteFile;
+ _filterReference = filterReference;
+ }
+
+ public void run()
+ {
+ // make sure the filter is expanded
+ _systemTree.revealAndExpand(_filterReference.getSubSystem(), _filterReference.getReferencedFilter());
+
+ Vector matches = new Vector();
+
+ _systemTree.findAllRemoteItemReferences(_parentObject, _parentObject, matches);
+ if (matches.size() > 0){
+ TreeItem item = (TreeItem)matches.get(0);
+ _systemTree.createTreeItems(item, _children);
+ item.setExpanded(true);
+
+ IRemoteFile containingFolder = null;
+
+ // is one of these items our remote file?
+ for (int i = 0; i < item.getItemCount(); i++){
+ TreeItem childItem = item.getItem(i);
+ Object data = childItem.getData();
+ if (data instanceof IRemoteFile){
+ IRemoteFile childFile = (IRemoteFile)data;
+ String childPath = childFile.getAbsolutePath();
+ if (childPath.equals(_targetRemoteFile.getAbsolutePath())){
+ // select our remote file
+ _systemTree.getTree().setSelection(childItem);
+ return; // we're done!
+ }
+ else if (_targetRemoteFile.getAbsolutePath().startsWith(childPath)){
+ containingFolder = childFile; // using this to start a deeper search for the target remote file
+ }
+ }
+ }
+
+ // remote file not found so now we have to expand further
+ if (containingFolder != null){
+ LinkFromFolderJob job = new LinkFromFolderJob(containingFolder, _filterReference, _targetRemoteFile, _systemTree);
+ job.schedule();
+ }
+ }
+ }
+ }
+
+ /**
+ * Job for doing a query on a folder and then using Display.asyncExec() to reveal the results in the tree.
+ */
+ private class LinkFromFolderJob extends Job
+ {
+ private IRemoteFileSubSystem _subSystem;
+ private IRemoteFile _remoteFolder;
+ private IRemoteFile _targetRemoteFile;
+ private ISystemTree _systemTree;
+ private ISystemFilterReference _filterRef;
+
+ public LinkFromFolderJob(IRemoteFile remoteFolder, ISystemFilterReference filterRef, IRemoteFile targetRemoteFile, ISystemTree systemTree) {
+ super(FileResources.MESSAGE_EXPANDING_FOLDER);
+ _remoteFolder = remoteFolder;
+ _subSystem = _remoteFolder.getParentRemoteFileSubSystem();
+ _filterRef = filterRef; // used for context of query
+ _targetRemoteFile = targetRemoteFile;
+ _systemTree = systemTree;
+ }
+
+ public IStatus run(IProgressMonitor monitor){
+ try
+ {
+ // get the adapter
+ ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)_remoteFolder).getAdapter(ISystemViewElementAdapter.class);
+
+ // get the context
+ ContextObject contextObject = new ContextObject(_remoteFolder, _subSystem, _filterRef);
+
+ // get the children
+ Object[] children = adapter.getChildren(contextObject, monitor);
+
+ if (monitor.isCanceled()){
+ return Status.CANCEL_STATUS;
+ }
+
+ // put these items in the tree and look for remoteFile
+ // if we can't find the remote file under this filter, the ShowChildrenInTree will recurse
+ Display.getDefault().asyncExec(new ShowChildrenInTree(_remoteFolder, children, _filterRef, _systemTree, _targetRemoteFile));
+ }
+ catch (Exception e){
+ }
+ return Status.OK_STATUS;
+ }
+
+ }
+
+ /**
+ * Job for doing a query on a filter and then using Display.asyncExec() to reveal the results in the tree.
+ */
+ private class LinkFromFilterJob extends Job
+ {
+ private IRemoteFileSubSystem _subSystem;
+ private IRemoteFile _targetRemoteFile;
+ private ISystemTree _systemTree;
+
+ public LinkFromFilterJob(IRemoteFile targetRemoteFile, ISystemTree systemTree) {
+ super(FileResources.MESSAGE_EXPANDING_FILTER);
+
+ _targetRemoteFile = targetRemoteFile;
+ _subSystem = _targetRemoteFile.getParentRemoteFileSubSystem();
+ _systemTree = systemTree;
+ }
+
+ public IStatus run(IProgressMonitor monitor){
+ try
+ {
+ // find matching filter reference
+ ISystemFilterReference ref = findMatchingFilterReference();
+ if (ref == null)
+ {
+ // the object is nowhere to be found!
+ return Status.OK_STATUS;
+ }
+
+ // get the adapter
+ ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)ref).getAdapter(ISystemViewElementAdapter.class);
+
+
+ // get the context
+ ContextObject contextObject = new ContextObject(ref, _subSystem, ref);
+
+ // get the children
+ Object[] children = adapter.getChildren(contextObject, monitor);
+
+ if (monitor.isCanceled()){
+ return Status.CANCEL_STATUS;
+ }
+
+ // put these items in the tree and look for remoteFile
+ // if we can't find the remote file under this filter, the ShowChildrenInTree will recurse
+ Display.getDefault().asyncExec(new ShowChildrenInTree(ref, children, ref, _systemTree, _targetRemoteFile));
+ }
+ catch (Exception e){
+ }
+ return Status.OK_STATUS;
+ }
+
+ private ISystemFilterReference findMatchingFilterReference()
+ {
+ String remoteObjectName = _targetRemoteFile.getAbsolutePath();
+ ISystemFilterPoolReferenceManager refmgr = _subSystem.getFilterPoolReferenceManager();
+ if (refmgr != null)
+ {
+ ISystemFilterReference[] refs = refmgr.getSystemFilterReferences(_subSystem);
+ for (int i = 0; i < refs.length; i++)
+ {
+ ISystemFilterReference ref = refs[i];
+
+ {
+ if (_subSystem.doesFilterMatch(ref.getReferencedFilter(), remoteObjectName)){
+ return ref;
+ }
+ else if (_subSystem.doesFilterListContentsOf(ref.getReferencedFilter(),remoteObjectName)){
+ return ref;
+ }
+ else if (_subSystem.doesFilterEncompass(ref.getReferencedFilter(), remoteObjectName)){
+ return ref;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ }
+
+ /**
+ * Job for doing a query on a file. After the query it checks for the file in the tree on the main thread. If the item
+ * is not found, then a search is started from the first matching filter via the LinkFromFilterJob.
+ */
+ private class SelectFileJob extends Job
+ {
+ private IRemoteFileSubSystem _subSystem;
+ private String _path;
+ private ISystemTree _systemTree;
+
+ public SelectFileJob(IRemoteFileSubSystem subSystem, String path, ISystemTree systemTree) {
+ super(FileResources.MESSSAGE_QUERYING_FILE);
+ _subSystem = subSystem;
+ _path = path;
+ _systemTree = systemTree;
+ }
+
+ public IStatus run(IProgressMonitor monitor){
+ try
+ {
+ // doing query to get the remote file
+ final IRemoteFile remoteFile = _subSystem.getRemoteFileObject(_path, monitor);
+
+ Display.getDefault().asyncExec(new Runnable()
+ {
+ public void run()
+ {
+ // on main thread, looking for the reference in the tree
+ TreeItem item = (TreeItem)_systemTree.findFirstRemoteItemReference(remoteFile, null);
+ if (item != null){
+ _systemTree.getTree().setSelection(item);
+ }
+ else
+ {
+ // no reference in the tree so we will search forward from the filter in a job (avoiding query on the main thread)
+ LinkFromFilterJob job = new LinkFromFilterJob(remoteFile, _systemTree);
+ job.schedule();
+ }
+ }
+ });
+ }
+ catch (Exception e){
+ }
+ return Status.OK_STATUS;
+ }
+ }
+
public class ViewLinker implements IViewLinker
{
- public void link(IEditorPart editor, SystemView systemView)
+ public void link(IEditorPart editor, ISystemTree systemTree)
{
IEditorInput input = editor.getEditorInput();
if (input instanceof IFileEditorInput)
@@ -46,13 +297,27 @@ public class LinkWithSystemViewAction implements IViewActionDelegate {
IFile file = fileInput.getFile();
SystemIFileProperties properties = new SystemIFileProperties(file);
Object rmtEditable = properties.getRemoteFileObject();
- Object remoteObj = null;
- ISubSystem subSystem = null;
+ IRemoteFile remoteObj = null;
+ IRemoteFileSubSystem subSystem = null;
if (rmtEditable != null && rmtEditable instanceof ISystemEditableRemoteObject)
{
ISystemEditableRemoteObject editable = (ISystemEditableRemoteObject) rmtEditable;
- remoteObj = editable.getRemoteObject();
-
+ remoteObj = (IRemoteFile)editable.getRemoteObject();
+
+ TreeItem item = (TreeItem)systemTree.findFirstRemoteItemReference(remoteObj, null);
+ if (item != null){
+ systemTree.getTree().setSelection(item);
+ }
+ else
+ {
+ subSystem = remoteObj.getParentRemoteFileSubSystem();
+
+ // no match, so we will expand from filter
+ // query matching filter in a job (to avoid main thread)
+ LinkFromFilterJob job = new LinkFromFilterJob(remoteObj, systemTree);
+ job.schedule();
+
+ }
}
else
{
@@ -60,45 +325,30 @@ public class LinkWithSystemViewAction implements IViewActionDelegate {
String path = properties.getRemoteFilePath();
if (subsystemId != null && path != null)
{
- subSystem = RSECorePlugin.getTheSystemRegistry().getSubSystem(subsystemId);
+ subSystem = (IRemoteFileSubSystem)RSECorePlugin.getTheSystemRegistry().getSubSystem(subsystemId);
if (subSystem != null)
{
- if (subSystem.isConnected())
- {
- try
- {
- remoteObj = subSystem.getObjectWithAbsoluteName(path, new NullProgressMonitor());
- }
- catch (Exception e)
- {
- return;
- }
- }
+ // query for file in a job (to avoid main thread)
+ SelectFileJob job = new SelectFileJob(subSystem, path, systemTree);
+ job.schedule();
}
}
}
-
- if (remoteObj != null)
- {
- TreeItem item = (TreeItem)systemView.findFirstRemoteItemReference(remoteObj, null);
- if (item != null){
- systemView.getTree().setSelection(item);
- }
- else {
- // item does not exist in tree
- systemView.expandTo(subSystem, remoteObj);
-
- }
-
- }
}
}
+
+
}
private SystemViewPart _systemViewPart;
private IAction _action;
private IViewLinker _linker;
+ public LinkWithSystemViewAction()
+ {
+ super();
+ }
+
public void init(IViewPart view) {
_systemViewPart = (SystemViewPart)view;
_linker = new ViewLinker();
@@ -106,16 +356,16 @@ public class LinkWithSystemViewAction implements IViewActionDelegate {
public void run(IAction action) {
if (_systemViewPart != null){
- _systemViewPart.setLinkingEnabled(action.isChecked(), _linker);
+ boolean isToggled = _systemViewPart.isLinkingEnabled();
+ _systemViewPart.setLinkingEnabled(!isToggled, _linker);
+
}
}
public void selectionChanged(IAction action, ISelection selection) {
if (_action == null) {
- action.setChecked(_systemViewPart.isLinkingEnabled());
_action= action;
+ _action.setChecked(_systemViewPart.isLinkingEnabled());
}
-
}
-
}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java
index 1eb1abd0eb3..2648ceeb96a 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemView.java
@@ -4273,7 +4273,7 @@ public class SystemView extends SafeTreeViewer
* @return the List populated with hits, or null
if null
* was passed in as the List to populate and no hits were found.
*/
- protected List findAllRemoteItemReferences(Object element, Object elementObject, List matches) {
+ public List findAllRemoteItemReferences(Object element, Object elementObject, List matches) {
String searchString = null;
ISubSystem subsystem = null;
if (element instanceof String)
@@ -5689,7 +5689,11 @@ public class SystemView extends SafeTreeViewer
ISystemViewElementAdapter adapter = getViewAdapter(parentObject);
ISystemViewElementAdapter targetAdapter = getViewAdapter(remoteObject);
-
+ if (adapter == null)
+ {
+ System.out.println("adapter is null for "+parentObject);
+ return;
+ }
ISubSystem ss = adapter.getSubSystem(parentObject);
String parentName = adapter.getAbsoluteName(parentObject);
String remoteObjectName = targetAdapter.getAbsoluteName(remoteObject);
@@ -5953,6 +5957,7 @@ public class SystemView extends SafeTreeViewer
public void add(Object parentElementOrTreePath, Object[] childElements) {
+
assertElementsNotNull(childElements);
ISystemFilterReference originalFilter = null;
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewForm.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewForm.java
index a65622e35a5..0ec91831cd9 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewForm.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewForm.java
@@ -14,9 +14,10 @@
* Contributors:
* Kevin Doyle (IBM) - [187553] - Removed code and related methods for toolbar/button bar.
* Martin Oberhuber (Wind River) - [190271] Move ISystemViewInputProvider to Core
+ * David McKnight (IBM) - [187711] select SystemView APIs exposed by the ISystemTree interface
*******************************************************************************/
-
package org.eclipse.rse.internal.ui.view;
+import java.util.List;
import java.util.Vector;
import org.eclipse.jface.action.ToolBarManager;
@@ -24,7 +25,10 @@ import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.rse.core.filters.ISystemFilter;
+import org.eclipse.rse.core.filters.ISystemFilterReference;
import org.eclipse.rse.core.model.ISystemViewInputProvider;
+import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.ui.dialogs.SystemPromptDialog;
import org.eclipse.rse.ui.messages.ISystemMessageLine;
import org.eclipse.rse.ui.view.ISystemLongRunningRequestListener;
@@ -42,6 +46,7 @@ import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
/**
@@ -470,4 +475,44 @@ public class SystemViewForm extends Composite implements ISystemTree
}
}
+
+
+ /**
+ * wrapper method to satisfy the ISystemTree interface
+ */
+ public void createTreeItems(TreeItem widget, Object[] children)
+ {
+ tree.createTreeItems(widget, children);
+ }
+
+ /**
+ * wrapper method to satisfy the ISystemTree interface
+ */
+ public List findAllRemoteItemReferences(Object element,
+ Object elementObject, List matches) {
+ return tree.findAllRemoteItemReferences(element, elementObject, matches);
+ }
+
+ /**
+ * wrapper method to satisfy the ISystemTree interface
+ */
+ public Item findFirstRemoteItemReference(Object remoteObject,
+ Item parentItem) {
+ return tree.findFirstRemoteItemReference(remoteObject, parentItem);
+ }
+
+ /**
+ * wrapper method to satisfy the ISystemTree interface
+ */
+ public Tree getTree() {
+ return tree.getTree();
+ }
+
+ /**
+ * wrapper method to satisfy the ISystemTree interface
+ */
+ public ISystemFilterReference revealAndExpand(ISubSystem parentSubSystem,
+ ISystemFilter filter) {
+ return tree.revealAndExpand(parentSubSystem, filter);
+ }
}
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java
index 4cfb3323ea0..b8303bbdc71 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/internal/ui/view/SystemViewPart.java
@@ -87,7 +87,6 @@ import org.eclipse.rse.internal.ui.actions.SystemWorkWithProfilesAction;
import org.eclipse.rse.services.clientserver.messages.SystemMessage;
import org.eclipse.rse.ui.ISystemContextMenuConstants;
import org.eclipse.rse.ui.ISystemPreferencesConstants;
-import org.eclipse.rse.ui.IViewLinker;
import org.eclipse.rse.ui.RSESystemTypeAdapter;
import org.eclipse.rse.ui.RSEUIPlugin;
import org.eclipse.rse.ui.SystemBasePlugin;
@@ -103,6 +102,7 @@ import org.eclipse.rse.ui.view.ContextObject;
import org.eclipse.rse.ui.view.IRSEViewPart;
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
+import org.eclipse.rse.ui.view.IViewLinker;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ISystemTree.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ISystemTree.java
index 8d954942aa8..f471a7d82e0 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ISystemTree.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/ISystemTree.java
@@ -11,12 +11,19 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
- * {Name} (company) - description of contribution.
+ * David McKnight (IBM) - [187711] Select SystemView APIs exposed by the ISystemTree interface
********************************************************************************/
package org.eclipse.rse.ui.view;
+import java.util.List;
+
+import org.eclipse.rse.core.filters.ISystemFilter;
+import org.eclipse.rse.core.filters.ISystemFilterReference;
+import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.Tree;
+import org.eclipse.swt.widgets.TreeItem;
/**
* To drive our GUI we find ourselves adding additional useful methods on top of the
@@ -116,4 +123,55 @@ public interface ISystemTree {
* @return true if any of the selected items are expandable but not yet expanded
*/
public boolean areAnySelectedItemsExpandable();
+
+ /**
+ * Find the first binary-match or name-match of a remote object, given its binary object.
+ * @param remoteObject - The remote object to find.
+ * @param parentItem - Optionally, the parent item to start the search at
+ * @return TreeItem hit if found
+ */
+ public Item findFirstRemoteItemReference(Object remoteObject, Item parentItem);
+
+ /**
+ * Expand a given filter, given a subsystem that contains a reference to the filter's pool.
+ * This will expand down to the filter if needed
+ * @param parentSubSystem - the subsystem containing a reference to the filter's parent pool
+ * @param filter - the filter to find, reveal, and expand within the subsystem context
+ * @return the filter reference to the filter if found and expanded. This is a unique binary address
+ * within the object's in this tree, so can be used in the viewer methods to affect this particular
+ * node.
+ */
+ public ISystemFilterReference revealAndExpand(ISubSystem parentSubSystem, ISystemFilter filter);
+
+ /**
+ * Return the Tree widget
+ * @return tree widget
+ */
+ public Tree getTree();
+
+ /**
+ * Create tree items for the specified children
+ *
+ * @param widget the parent item for the items to create
+ * @param children the children to create items for
+ */
+ public void createTreeItems(TreeItem widget, Object[] children);
+
+ /**
+ * Recursively tries to find a given remote object. Since the object memory object
+ * for a remote object is not dependable we call getAbsoluteName() on the adapter to
+ * do the comparisons. Note this does not take into account the parent connection or
+ * subsystem or filter, hence you must know where to start the search, else you risk
+ * finding the wrong one.
+ *
+ * @param element the remote object to which we want to find a tree item which references it. Can be a string or an object
+ * @param elementObject the actual remote element to find, for binary matching, optionally for cases when element is a string
+ * @param matches the List to populate with hits, or null
to
+ * get a new List created and returned with the hits.
+ * @return the List populated with hits, or null
if null
+ * was passed in as the List to populate and no hits were found.
+ */
+ public List findAllRemoteItemReferences(Object element, Object elementObject, List matches);
+
+
}
\ No newline at end of file
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/IViewLinker.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/IViewLinker.java
similarity index 84%
rename from rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/IViewLinker.java
rename to rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/IViewLinker.java
index 31647177921..3fadf3c2ab9 100644
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/IViewLinker.java
+++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/view/IViewLinker.java
@@ -11,9 +11,8 @@
* Contributors:
* David McKnight (IBM) - [187711] IViewLinker to be API that system view part calls when link with editor
********************************************************************************/
-package org.eclipse.rse.ui;
+package org.eclipse.rse.ui.view;
-import org.eclipse.rse.internal.ui.view.SystemView;
import org.eclipse.ui.IEditorPart;
public interface IViewLinker {
@@ -21,7 +20,7 @@ public interface IViewLinker {
/**
* System View part calls link when using Link With Editor. Provider of action supplies this implementation.
* @param editor the active editor
- * @param systemView the view to link
+ * @param systemTree the view to link
*/
- public void link(IEditorPart editor, SystemView systemView);
+ public void link(IEditorPart editor, ISystemTree systemTree);
}