1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-09 10:46:02 +02:00

[170627] changed views to use IContextObject during queries

This commit is contained in:
David McKnight 2007-02-15 17:32:02 +00:00
parent ef5ae9d77e
commit 37897c0bdd
45 changed files with 1175 additions and 112 deletions

View file

@ -16,6 +16,8 @@
package org.eclipse.rse.examples.daytime.model; package org.eclipse.rse.examples.daytime.model;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
@ -27,6 +29,7 @@ import org.eclipse.rse.examples.daytime.service.IDaytimeService;
import org.eclipse.rse.examples.daytime.subsystems.DaytimeSubSystem; import org.eclipse.rse.examples.daytime.subsystems.DaytimeSubSystem;
import org.eclipse.rse.ui.SystemMenuManager; import org.eclipse.rse.ui.SystemMenuManager;
import org.eclipse.rse.ui.view.AbstractSystemViewAdapter; import org.eclipse.rse.ui.view.AbstractSystemViewAdapter;
import org.eclipse.rse.ui.view.IContextObject;
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter; import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
/** /**
@ -70,10 +73,11 @@ public class DaytimeResourceAdapter extends AbstractSystemViewAdapter implements
return false; return false;
} }
public Object[] getChildren(Object element) { public Object[] getChildren(IProgressMonitor monitor, IAdaptable element) {
return null; return null;
} }
protected Object internalGetPropertyValue(Object key) { protected Object internalGetPropertyValue(Object key) {
return null; return null;
} }

View file

@ -16,10 +16,13 @@
package samples.model; package samples.model;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.ui.SystemMenuManager; import org.eclipse.rse.ui.SystemMenuManager;
import org.eclipse.rse.ui.view.AbstractSystemViewAdapter; import org.eclipse.rse.ui.view.AbstractSystemViewAdapter;
import org.eclipse.rse.ui.view.IContextObject;
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter; import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertyDescriptor;
@ -98,14 +101,12 @@ public class DeveloperResourceAdapter extends AbstractSystemViewAdapter
return false; return false;
} }
/**
* @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(Object) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element) {
*/
public Object[] getChildren(Object o)
{
return null; return null;
} }
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#internalGetPropertyDescriptors() * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#internalGetPropertyDescriptors()
*/ */

View file

@ -16,6 +16,8 @@
package samples.model; package samples.model;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.ui.SystemMenuManager; import org.eclipse.rse.ui.SystemMenuManager;
@ -100,7 +102,7 @@ public class TeamResourceAdapter extends AbstractSystemViewAdapter implements
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getChildren(java.lang.Object) * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getChildren(java.lang.Object)
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
return ((TeamResource)element).getDevelopers(); return ((TeamResource)element).getDevelopers();
} }

View file

@ -41,6 +41,7 @@ import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.core.SystemBasePlugin;
import org.eclipse.rse.core.filters.ISystemFilter;
import org.eclipse.rse.core.filters.ISystemFilterReference; import org.eclipse.rse.core.filters.ISystemFilterReference;
import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.model.ISystemContainer; import org.eclipse.rse.core.model.ISystemContainer;
@ -78,6 +79,7 @@ import org.eclipse.rse.model.ISystemResourceChangeEvents;
import org.eclipse.rse.model.SystemRegistry; import org.eclipse.rse.model.SystemRegistry;
import org.eclipse.rse.model.SystemRemoteResourceSet; import org.eclipse.rse.model.SystemRemoteResourceSet;
import org.eclipse.rse.model.SystemResourceChangeEvent; import org.eclipse.rse.model.SystemResourceChangeEvent;
import org.eclipse.rse.services.clientserver.PathUtility;
import org.eclipse.rse.services.clientserver.StringCompare; import org.eclipse.rse.services.clientserver.StringCompare;
import org.eclipse.rse.services.clientserver.SystemSearchString; import org.eclipse.rse.services.clientserver.SystemSearchString;
import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager; import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager;
@ -117,6 +119,8 @@ import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.rse.ui.operations.SystemFetchOperation; import org.eclipse.rse.ui.operations.SystemFetchOperation;
import org.eclipse.rse.ui.validators.ISystemValidator; import org.eclipse.rse.ui.validators.ISystemValidator;
import org.eclipse.rse.ui.view.AbstractSystemViewAdapter; import org.eclipse.rse.ui.view.AbstractSystemViewAdapter;
import org.eclipse.rse.ui.view.ContextObject;
import org.eclipse.rse.ui.view.IContextObject;
import org.eclipse.rse.ui.view.ISystemDragDropAdapter; import org.eclipse.rse.ui.view.ISystemDragDropAdapter;
import org.eclipse.rse.ui.view.ISystemEditableRemoteObject; import org.eclipse.rse.ui.view.ISystemEditableRemoteObject;
import org.eclipse.rse.ui.view.ISystemMementoConstants; import org.eclipse.rse.ui.view.ISystemMementoConstants;
@ -607,23 +611,21 @@ public class SystemViewRemoteFileAdapter
* Return the children of this object. * Return the children of this object.
* If this is a folder or root, we list all child folders and files. * If this is a folder or root, we list all child folders and files.
*/ */
public Object[] getChildren(IProgressMonitor monitor, Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
return internalGetChildren(monitor, element); return internalGetChildren(monitor, element, null);
} }
/** /**
* Return the children of this object. * Return the children of this object.
* If this is a folder or root, we list all child folders and files. * If this is a folder or root, we list all child folders and files.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IContextObject context)
{ {
_lastResults = internalGetChildren(null, element); return internalGetChildren(monitor, context.getModelObject(), context.getFilterReference());
return _lastResults;
// }
} }
private synchronized Object[] internalGetChildren(IProgressMonitor monitor, Object element) private synchronized Object[] internalGetChildren(IProgressMonitor monitor, IAdaptable element, ISystemFilterReference filterReference)
{ {
//System.out.println("Inside getChildren for: "+element); //System.out.println("Inside getChildren for: "+element);
IRemoteFile file = (IRemoteFile) element; IRemoteFile file = (IRemoteFile) element;
@ -638,9 +640,12 @@ public class SystemViewRemoteFileAdapter
return ((RemoteFileRoot) file).getRootFiles(); return ((RemoteFileRoot) file).getRootFiles();
} }
IRemoteFileSubSystem ss = file.getParentRemoteFileSubSystem(); IRemoteFileSubSystem ss = file.getParentRemoteFileSubSystem();
/*
RemoteFileFilterString orgRffs = file.getFilterString(); RemoteFileFilterString orgRffs = file.getFilterString();
String filter = null;
if (orgRffs != null) if (orgRffs != null)
{ {
if (foldersOnly) if (foldersOnly)
@ -660,7 +665,28 @@ public class SystemViewRemoteFileAdapter
filter = rffs.toString(); filter = rffs.toString();
} }
} }
else if (foldersOnly) else
*/
String filter = null;
if (filterReference != null)
{
ISystemFilter filterObject = filterReference.getReferencedFilter();
if (filterObject.getFilterStringCount() > 0)
{
String filterString = filterObject.getFilterStrings()[0];
String separator = PathUtility.getSeparator(filterString);
int sepIndex = filterString.lastIndexOf(separator);
if (sepIndex > 0)
{
filter = filterString.substring(sepIndex + 1);
}
}
}
else
{
if (foldersOnly)
{ {
if (filterString == null) if (filterString == null)
filter = "* /nf"; //$NON-NLS-1$ filter = "* /nf"; //$NON-NLS-1$
@ -681,6 +707,7 @@ public class SystemViewRemoteFileAdapter
else else
filter = filterString; filter = filterString;
} }
}
Object[] children = null; Object[] children = null;
@ -791,9 +818,12 @@ public class SystemViewRemoteFileAdapter
else else
{ {
// check that the children are actually there // check that the children are actually there
Object[] contents = file.getContents(RemoteChildrenContentsType.getInstance()); //Object[] contents = file.getContents(RemoteChildrenContentsType.getInstance());
if (!file.isStale() && contents != null && contents.length == 0 ) hasChildren = file.hasContents(RemoteChildrenContentsType.getInstance());
hasChildren = false; if (!hasChildren && !file.isStale())
hasChildren = true;
// if (!file.isStale() && contents != null && contents.length == 0 )
// hasChildren = false;
} }
return hasChildren; return hasChildren;
@ -2593,7 +2623,7 @@ public class SystemViewRemoteFileAdapter
IRemoteFile file = (IRemoteFile) element; IRemoteFile file = (IRemoteFile) element;
return file.getParentRemoteFileSubSystem(); return file.getParentRemoteFileSubSystem();
} }
return null; return super.getSubSystem(element);
} }
/** /**
* Return the subsystem factory id that owns this remote object * Return the subsystem factory id that owns this remote object
@ -3145,7 +3175,7 @@ public class SystemViewRemoteFileAdapter
protected SystemFetchOperation getSystemFetchOperation(Object o, IElementCollector collector) protected SystemFetchOperation getSystemFetchOperation(Object o, IElementCollector collector)
{ {
return new SystemFetchOperation(null, (IAdaptable)o, this, collector, true); return new SystemFetchOperation(null, o, this, collector, true);
} }
/** /**

View file

@ -234,7 +234,7 @@ public class SystemViewRemoteSearchResultAdapter extends AbstractSystemViewAdapt
/** /**
* Returns nothing * Returns nothing
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
return null; return null;
} }

View file

@ -18,6 +18,8 @@ package org.eclipse.rse.files.ui.view;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.core.subsystems.ISubSystem; import org.eclipse.rse.core.subsystems.ISubSystem;
@ -134,7 +136,7 @@ public class SystemViewRemoteSearchResultSetAdapter extends AbstractSystemViewAd
/** /**
* Returns the search results for the given search handle * Returns the search results for the given search handle
*/ */
public Object[] getChildren(Object element) { public Object[] getChildren(IProgressMonitor monitor, IAdaptable element) {
if (element instanceof IHostSearchResultSet) { if (element instanceof IHostSearchResultSet) {
IHostSearchResultSet output = (IHostSearchResultSet)element; IHostSearchResultSet output = (IHostSearchResultSet)element;

View file

@ -17,6 +17,7 @@
package org.eclipse.rse.processes.ui.view; package org.eclipse.rse.processes.ui.view;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
@ -156,7 +157,7 @@ public class SystemViewRemoteProcessAdapter extends AbstractSystemViewAdapter
return false; return false;
} }
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
IRemoteProcess process = (IRemoteProcess) element; IRemoteProcess process = (IRemoteProcess) element;
IRemoteProcessSubSystem ss = process.getParentRemoteProcessSubSystem(); IRemoteProcessSubSystem ss = process.getParentRemoteProcessSubSystem();

View file

@ -1,3 +1,3 @@
#Thu Feb 15 10:26:03 CET 2007 #Thu Feb 15 10:47:06 EST 2007
eclipse.preferences.version=1 eclipse.preferences.version=1
encoding//src/org/eclipse/rse/internal/services/ssh/SshServiceResources.properties=8859_1 encoding//src/org/eclipse/rse/internal/services/ssh/SshServiceResources.properties=8859_1

View file

@ -19,6 +19,7 @@ package org.eclipse.rse.shells.ui.view;
import java.util.ArrayList; import java.util.ArrayList;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.rse.core.subsystems.IRemoteLineReference; import org.eclipse.rse.core.subsystems.IRemoteLineReference;
import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteCommandShell; import org.eclipse.rse.subsystems.shells.core.subsystems.IRemoteCommandShell;
@ -97,7 +98,7 @@ public class SystemBuildErrorViewProvider extends SystemTableViewProvider
ISystemViewElementAdapter adapter = getAdapterFor(object); ISystemViewElementAdapter adapter = getAdapterFor(object);
if (adapter != null) if (adapter != null)
{ {
results = adapter.getChildren(object); results = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
ArrayList filterredResults = new ArrayList(); ArrayList filterredResults = new ArrayList();
for (int i = _offset+ 1; i <results.length;i++) for (int i = _offset+ 1; i <results.length;i++)

View file

@ -327,7 +327,7 @@ implements ISystemViewElementAdapter, ISystemRemoteElementAdapter, ISystemOutpu
/** /**
* Returns the children of a remote command if the element is a remote command * Returns the children of a remote command if the element is a remote command
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
if (element instanceof IRemoteCommandShell) if (element instanceof IRemoteCommandShell)

View file

@ -25,9 +25,11 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.ActionContributionItem;
@ -109,6 +111,7 @@ import org.eclipse.rse.ui.dialogs.SystemPromptDialog;
import org.eclipse.rse.ui.messages.ISystemMessageLine; import org.eclipse.rse.ui.messages.ISystemMessageLine;
import org.eclipse.rse.ui.messages.SystemMessageDialog; import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.dnd.Transfer;
@ -5159,9 +5162,18 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
return false; return false;
} }
*/ */
public void add(Object parentElementOrTreePath, Object[] childElements) { public void add(Object parentElementOrTreePath, Object[] childElements) {
assertElementsNotNull(childElements); assertElementsNotNull(childElements);
ISystemFilterReference originalFilter = null;
if (parentElementOrTreePath instanceof IContextObject)
{
IContextObject context = (IContextObject)parentElementOrTreePath;
originalFilter = context.getFilterReference();
parentElementOrTreePath = context.getModelObject();
}
Vector matches = new Vector(); Vector matches = new Vector();
matches = findAllRemoteItemReferences(parentElementOrTreePath, parentElementOrTreePath, matches); matches = findAllRemoteItemReferences(parentElementOrTreePath, parentElementOrTreePath, matches);
@ -5211,9 +5223,22 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
{ {
for (int i = 0; i < matches.size(); i++) { for (int i = 0; i < matches.size(); i++) {
Widget match = (Widget) matches.get(i); Widget match = (Widget) matches.get(i);
ISystemFilterReference ref = getContainingFilterReference((TreeItem)match);
if (matches.size() > 1 && ref != null && ref != originalFilter)
{
// could have the same object under multiple filters
// need to apply filter
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)parentElementOrTreePath).getAdapter(ISystemViewElementAdapter.class);
IContextObject contextObject = getContextObject((TreeItem)match);
Object[] newChildren = adapter.getChildren(new NullProgressMonitor(), contextObject);
internalAdd(match, parentElementOrTreePath, newChildren);
}
else
{
internalAdd(match, parentElementOrTreePath, childElements); internalAdd(match, parentElementOrTreePath, childElements);
} }
} }
}
TreeItem item = getFirstSelectedTreeItem(); TreeItem item = getFirstSelectedTreeItem();
if (item != null) if (item != null)
@ -5226,4 +5251,156 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
} }
/**
* Get the containing filter reference for an item
* @param item the item to get the filter reference for
* @return the filter reference
*/
public ISystemFilterReference getContainingFilterReference(TreeItem item)
{
Object data = item.getData();
if (data instanceof ISystemFilterReference)
{
return (ISystemFilterReference)data;
}
else
{
TreeItem parent = item.getParentItem();
if (parent != null)
{
return getContainingFilterReference(parent);
}
else
{
Object input = getInput();
if (input instanceof ISystemFilterReference)
{
return (ISystemFilterReference)input;
}
else
{
return null;
}
}
}
}
/**
* Get the containing subsystem from an item
* @param item the item to get the subsystem for
* @return the subsystem
*/
public ISubSystem getContainingSubSystem(TreeItem item)
{
Object data = item.getData();
if (data instanceof ISubSystem)
{
return (ISubSystem)data;
}
else
{
TreeItem parent = item.getParentItem();
if (parent != null)
{
return getContainingSubSystem(parent);
}
else
{
Object input = getInput();
if (input instanceof ISubSystem)
{
return (ISubSystem)input;
}
else
{
return null;
}
}
}
}
/**
* Get the context object from a tree item
* @param item the item to get the context for
* @return the context object
*/
public IContextObject getContextObject(TreeItem item)
{
Object data = item.getData();
ISystemFilterReference filterReference = getContainingFilterReference(item);
if (filterReference != null)
{
return new ContextObject(data, filterReference.getSubSystem(), filterReference);
}
else
{
ISubSystem subSystem = getContainingSubSystem(item);
if (subSystem != null)
{
return new ContextObject(data, subSystem);
}
else
{
return new ContextObject(data);
}
}
}
/**
* Overridden so that we can pass a wrapper IContextObject into the provider to get children instead
* of the model object, itself
*/
protected void createChildren(final Widget widget)
{
if (widget instanceof TreeItem)
{
final Item[] tis = getChildren(widget);
if (tis != null && tis.length > 0) {
Object data = tis[0].getData();
if (data != null) {
return; // children already there!
}
}
BusyIndicator.showWhile(widget.getDisplay(), new Runnable() {
public void run() {
// fix for PR 1FW89L7:
// don't complain and remove all "dummies" ...
if (tis != null) {
for (int i = 0; i < tis.length; i++) {
if (tis[i].getData() != null) {
disassociate(tis[i]);
Assert.isTrue(tis[i].getData() == null,
"Second or later child is non -null");//$NON-NLS-1$
}
tis[i].dispose();
}
}
Object d = widget.getData();
if (d != null)
{
Object parentElement = getContextObject((TreeItem)widget);
Object[] children = getSortedChildren(parentElement);
if (children != null)
{
for (int i = 0; i < children.length; i++)
{
createTreeItem(widget, children[i], -1);
}
}
}
}
});
}
else
{
super.createChildren(widget);
}
}
} }

View file

@ -0,0 +1,51 @@
/********************************************************************************
* Copyright (c) 2006 IBM Corporation. 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
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.ui.operations;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.rse.ui.view.IContextObject;
import org.eclipse.ui.progress.DeferredTreeContentManager;
import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
public class SystemDeferredTreeContentManager extends
DeferredTreeContentManager {
public SystemDeferredTreeContentManager(ITreeContentProvider provider,
AbstractTreeViewer viewer)
{
super(provider, viewer);
// TODO Auto-generated constructor stub
}
/**
* Return the IDeferredWorkbenchAdapter for element or the element if it is
* an instance of IDeferredWorkbenchAdapter. If it does not exist return
* null.
*
* @param element
* @return IDeferredWorkbenchAdapter or <code>null</code>
*/
protected IDeferredWorkbenchAdapter getAdapter(Object element)
{
if (element instanceof IContextObject)
{
element = ((IContextObject)element).getModelObject();
}
return super.getAdapter(element);
}
}

View file

@ -36,6 +36,7 @@ import org.eclipse.rse.ui.GenericMessages;
import org.eclipse.rse.ui.ISystemMessages; import org.eclipse.rse.ui.ISystemMessages;
import org.eclipse.rse.ui.RSEUIPlugin; import org.eclipse.rse.ui.RSEUIPlugin;
import org.eclipse.rse.ui.messages.SystemMessageDialog; import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.rse.ui.view.IContextObject;
import org.eclipse.rse.ui.view.ISystemViewElementAdapter; import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
@ -50,14 +51,14 @@ import org.eclipse.ui.progress.IElementCollector;
public class SystemFetchOperation extends JobChangeAdapter implements IRunnableWithProgress public class SystemFetchOperation extends JobChangeAdapter implements IRunnableWithProgress
{ {
protected IWorkbenchPart _part; protected IWorkbenchPart _part;
protected IAdaptable _remoteObject; protected Object _remoteObject;
protected IElementCollector _collector; protected IElementCollector _collector;
private IRunnableContext context; private IRunnableContext context;
protected ISystemViewElementAdapter _adapter; protected ISystemViewElementAdapter _adapter;
protected boolean _canRunAsJob; protected boolean _canRunAsJob;
protected InvocationTargetException _exc; protected InvocationTargetException _exc;
public SystemFetchOperation(IWorkbenchPart part, IAdaptable remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector) public SystemFetchOperation(IWorkbenchPart part, Object remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector)
{ {
_part = part; _part = part;
_remoteObject = remoteObject; _remoteObject = remoteObject;
@ -66,7 +67,7 @@ public class SystemFetchOperation extends JobChangeAdapter implements IRunnableW
_canRunAsJob = false; _canRunAsJob = false;
} }
public SystemFetchOperation(IWorkbenchPart part, IAdaptable remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector, boolean canRunAsJob) public SystemFetchOperation(IWorkbenchPart part, Object remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector, boolean canRunAsJob)
{ {
_part = part; _part = part;
_remoteObject = remoteObject; _remoteObject = remoteObject;
@ -165,7 +166,15 @@ public class SystemFetchOperation extends JobChangeAdapter implements IRunnableW
*/ */
protected void execute(IProgressMonitor monitor) throws Exception, InterruptedException protected void execute(IProgressMonitor monitor) throws Exception, InterruptedException
{ {
SubSystem ss = (SubSystem)_adapter.getSubSystem(_remoteObject); SubSystem ss = null;
if (_remoteObject instanceof IContextObject)
{
ss = (SubSystem)((IContextObject)_remoteObject).getSubSystem();
}
else
{
ss = (SubSystem)_adapter.getSubSystem(_remoteObject);
}
synchronized (ss.getConnectorService()) synchronized (ss.getConnectorService())
{ {
if (!ss.isConnected()) if (!ss.isConnected())
@ -194,7 +203,15 @@ public class SystemFetchOperation extends JobChangeAdapter implements IRunnableW
} }
} }
Object[] children = _adapter.getChildren(monitor, _remoteObject); Object[] children = null;
if (_remoteObject instanceof IContextObject)
{
children = _adapter.getChildren(monitor, (IContextObject)_remoteObject);
}
else
{
children = _adapter.getChildren(monitor, (IAdaptable)_remoteObject);
}
_collector.add(children, monitor); _collector.add(children, monitor);
monitor.done(); monitor.done();
} }

View file

@ -23,6 +23,7 @@ import java.util.Vector;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
@ -278,10 +279,13 @@ public abstract class AbstractSystemViewAdapter
{ {
if (element instanceof AbstractResource) if (element instanceof AbstractResource)
return ((AbstractResource)element).getSubSystem(); return ((AbstractResource)element).getSubSystem();
else if (element instanceof IContextObject)
return ((IContextObject)element).getSubSystem();
else else
return null; return null;
} }
/** /**
* <i>Called by SystemView viewer. No need to override or call.</i><br> * <i>Called by SystemView viewer. No need to override or call.</i><br>
* Returns any framework-supplied remote object actions that should be contributed to the popup menu * Returns any framework-supplied remote object actions that should be contributed to the popup menu
@ -406,6 +410,10 @@ public abstract class AbstractSystemViewAdapter
*/ */
public String getLabel(Object element) public String getLabel(Object element)
{ {
if (element instanceof IContextObject)
{
element = ((IContextObject)element).getModelObject();
}
return getText(element); return getText(element);
} }
@ -443,19 +451,42 @@ public abstract class AbstractSystemViewAdapter
public abstract boolean hasChildren(Object element); public abstract boolean hasChildren(Object element);
/** /**
* <i><b>Abstract</b>. Must be overridden by subclasses.</i><br> * Implementation of IWorkbenchAdapter.getChildren(). Rather than overriding this, adapter implementors
* Return the children of this object. Return null if children not supported. * should override the getChildren() methods that take a monitor.
*/ */
public abstract Object[] getChildren(Object element); public Object[] getChildren(Object object)
{
return getChildren(new NullProgressMonitor(), (IAdaptable)object);
}
/** /**
* This should be overridden by subclasses in order to provide * This should be overridden by subclasses in order to provide
* deferred query support via the Eclipse Jobs mechanism * deferred query support via the Eclipse Jobs mechanism
* Return the children of this object. Return null if children not supported. * Return the children of this object. Return null if children not supported.
*
* @param monitor the progress monitor
* @param element the model object to get children from
* @return the children of element
*/ */
public Object[] getChildren(IProgressMonitor monitor, Object element) public abstract Object[] getChildren(IProgressMonitor monitor, IAdaptable element);
/**
* This should be overridden by subclasses in order to provide
* deferred query support via the Eclipse Jobs mechanism. The context object is passed in
* in place of the model object. By default, we just fall back to the original mechanism
* Return the children of this object. Return null if children not supported.
*
* This method should be overridden if your adapter supports context objects. If not, this will
* fall back to the model object version of the method.
*
* @param monitor the progress monitor
* @param element the context object that wrappers a model object, it's subsystem and filter reference
* @return the children of the model object within the context object that matches the containing filter reference criteria
*/
public Object[] getChildren(IProgressMonitor monitor, IContextObject element)
{ {
return getChildren(element); return getChildren(monitor, element.getModelObject());
} }
@ -1778,7 +1809,7 @@ public abstract class AbstractSystemViewAdapter
*/ */
protected SystemFetchOperation getSystemFetchOperation(Object o, IElementCollector collector) protected SystemFetchOperation getSystemFetchOperation(Object o, IElementCollector collector)
{ {
return new SystemFetchOperation(null, (IAdaptable)o, this, collector); return new SystemFetchOperation(null, o, this, collector);
} }
@ -1790,8 +1821,15 @@ public abstract class AbstractSystemViewAdapter
return true; return true;
} }
public ISchedulingRule getRule(Object element) { public ISchedulingRule getRule(Object element)
{
if (element instanceof IContextObject)
{
element = ((IContextObject)element).getModelObject();
}
IAdaptable location = (IAdaptable)element; IAdaptable location = (IAdaptable)element;
return new SystemSchedulingRule(location); return new SystemSchedulingRule(location);
} }
} }

View file

@ -0,0 +1,68 @@
/********************************************************************************
* Copyright (c) 2006 IBM Corporation. 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
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.rse.core.filters.ISystemFilterReference;
import org.eclipse.rse.core.subsystems.ISubSystem;
/**
* This class is used by tree views to pass context information from the views to
* the view providers and model adapters for queries. The context information consists of
* a model object and it may optionally contain the associated filter reference a subsystem.
*
* Context objects are created transiently and are only used to aid in providing filter information
* during a query.
*
*/
public class ContextObject implements IContextObject
{
private ISubSystem _subSystem = null;
private ISystemFilterReference _filterReference = null;
private Object _modelObject = null;
public ContextObject(Object modelObject, ISubSystem subSystem, ISystemFilterReference filterReference)
{
_subSystem = subSystem;
_filterReference = filterReference;
_modelObject = modelObject;
}
public ContextObject(Object modelObject, ISubSystem subSystem)
{
_modelObject = modelObject;
_subSystem = subSystem;
}
public ContextObject(Object modelObject)
{
_modelObject = modelObject;
}
public ISystemFilterReference getFilterReference()
{
return _filterReference;
}
public ISubSystem getSubSystem()
{
return _subSystem;
}
public IAdaptable getModelObject()
{
return (IAdaptable)_modelObject;
}
}

View file

@ -0,0 +1,48 @@
/********************************************************************************
* Copyright (c) 2006 IBM Corporation. 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
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
********************************************************************************/
package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.rse.core.filters.ISystemFilterReference;
import org.eclipse.rse.core.subsystems.ISubSystem;
/**
* This class is used by tree views to pass context information from the views to
* the view providers and model adapters for queries. The context information consists of
* a model object and it may optionally contain the associated filter reference a subsystem.
*
* Context objects are created transiently and are only used to aid in providing filter information
* during a query.
*
*/
public interface IContextObject
{
/**
* Gets the associated filter reference for the corresponding model object
* @return the associated filter reference
*/
public ISystemFilterReference getFilterReference();
/**
* Gets the model object for which this context applies
* @return the model object
*/
public IAdaptable getModelObject();
/**
* Gets the associated subsystem for the corresponding model object
* @return the associated subsystem
*/
public ISubSystem getSubSystem();
}

View file

@ -18,6 +18,7 @@ package org.eclipse.rse.ui.view;
import java.util.List; import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
@ -168,17 +169,34 @@ public interface ISystemViewElementAdapter extends IPropertySource, ISystemDragD
* Return the parent of this object * Return the parent of this object
*/ */
public Object getParent(Object element); public Object getParent(Object element);
/**
* Return the children of this object
*/
public Object[] getChildren(Object element);
/** /**
* Return the children of this object. This version (with monitor) is used when the * Return the children of this model object.
* request happens on a modal thread. The implementation needs to take this into *
* @param monitor the progress monitor
* @param element the model object to query
*
* @return the children of element
*
* The implementation needs to take this into
* account so that SWT thread exceptions are avoided. * account so that SWT thread exceptions are avoided.
*/ */
public Object[] getChildren(IProgressMonitor monitor, Object element); public Object[] getChildren(IProgressMonitor monitor, IAdaptable element);
/**
* Return the children of this object. When a contextObject is passed in
* instead of an adaptable model object, the adapter needs handle both the model object
* as well as the associated filter.
*
* @param monitor the progress monitor
* @param contextObject a wrapper object that contains the model object plus context information
*
* @return the children of the model object in contextObject that matches the filter in contextObject
*
* The implementation needs to take this into
* account so that SWT thread exceptions are avoided.
*/
public Object[] getChildren(IProgressMonitor monitor, IContextObject contextObject);
/** /**
* Return the children of this object, using the given Expand-To filter * Return the children of this object, using the given Expand-To filter

View file

@ -15,12 +15,13 @@
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.rse.ui.operations.SystemDeferredTreeContentManager;
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.progress.DeferredTreeContentManager; import org.eclipse.ui.progress.IDeferredWorkbenchAdapter;
import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertyDescriptor;
public class SystemDeferredTableTreeContentManager extends public class SystemDeferredTableTreeContentManager extends
DeferredTreeContentManager { SystemDeferredTreeContentManager {
private SystemTableTreeViewProvider _provider; private SystemTableTreeViewProvider _provider;
private SystemTableTreeView _view; private SystemTableTreeView _view;
@ -42,6 +43,24 @@ public class SystemDeferredTableTreeContentManager extends
} }
} }
/**
* Return the IDeferredWorkbenchAdapter for element or the element if it is
* an instance of IDeferredWorkbenchAdapter. If it does not exist return
* null.
*
* @param element
* @return IDeferredWorkbenchAdapter or <code>null</code>
*/
protected IDeferredWorkbenchAdapter getAdapter(Object element)
{
if (element instanceof IContextObject)
{
element = ((IContextObject)element).getModelObject();
}
return super.getAdapter(element);
}
public class RelayoutView implements Runnable public class RelayoutView implements Runnable
{ {

View file

@ -15,6 +15,7 @@
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.rse.core.SystemAdapterHelpers; import org.eclipse.rse.core.SystemAdapterHelpers;
import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.core.SystemBasePlugin;
@ -344,7 +345,7 @@ public class SystemSelectRemoteObjectAPIProviderImpl
Object[] children = null; Object[] children = null;
if (filterString == null) if (filterString == null)
children = subsystemAdapter.getChildren(subsystem); children = subsystemAdapter.getChildren(new NullProgressMonitor(), (IAdaptable)subsystem);
else else
{ {
children = resolveFilterString(subsystem, filterString); children = resolveFilterString(subsystem, filterString);

View file

@ -21,6 +21,7 @@ import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Platform;
@ -45,6 +46,7 @@ import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.window.SameShellProvider; import org.eclipse.jface.window.SameShellProvider;
import org.eclipse.rse.core.SystemAdapterHelpers; import org.eclipse.rse.core.SystemAdapterHelpers;
import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.core.SystemBasePlugin;
import org.eclipse.rse.core.filters.ISystemFilterReference;
import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.core.subsystems.ISubSystem; import org.eclipse.rse.core.subsystems.ISubSystem;
@ -76,6 +78,7 @@ import org.eclipse.rse.ui.actions.SystemSubMenuManager;
import org.eclipse.rse.ui.messages.ISystemMessageLine; import org.eclipse.rse.ui.messages.ISystemMessageLine;
import org.eclipse.rse.ui.messages.SystemMessageDialog; import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.TextTransfer;
@ -89,6 +92,7 @@ import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Layout; import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
@ -1855,4 +1859,168 @@ implements IMenuListener, ISystemDeleteTarget, ISystemRenameTarget, ISystemSelec
} }
} }
} }
/**
* Overridden so that we can pass a wrapper IContextObject into the provider to get children instead
* of the model object, itself
*/
protected void createChildren(final Widget widget)
{
if (widget instanceof TreeItem)
{
final Item[] tis = getChildren(widget);
if (tis != null && tis.length > 0) {
Object data = tis[0].getData();
if (data != null) {
return; // children already there!
}
}
BusyIndicator.showWhile(widget.getDisplay(), new Runnable() {
public void run() {
// fix for PR 1FW89L7:
// don't complain and remove all "dummies" ...
if (tis != null) {
for (int i = 0; i < tis.length; i++) {
if (tis[i].getData() != null) {
disassociate(tis[i]);
Assert.isTrue(tis[i].getData() == null,
"Second or later child is non -null");//$NON-NLS-1$
}
tis[i].dispose();
}
}
Object d = widget.getData();
if (d != null)
{
Object parentElement = getContextObject((TreeItem)widget);
Object[] children = getSortedChildren(parentElement);
if (children != null)
{
for (int i = 0; i < children.length; i++)
{
createTreeItem(widget, children[i], -1);
}
}
}
}
});
}
else
{
super.createChildren(widget);
}
}
/**
* Get the containing filter reference for an item
* @param item the item to get the filter reference for
* @return the filter reference
*/
public ISystemFilterReference getContainingFilterReference(TreeItem item)
{
Object data = item.getData();
if (data instanceof ISystemFilterReference)
{
return (ISystemFilterReference)data;
}
else
{
TreeItem parent = item.getParentItem();
if (parent != null)
{
return getContainingFilterReference(parent);
}
else
{
Object input = getInput();
if (input instanceof ISystemFilterReference)
{
return (ISystemFilterReference)input;
}
else
{
return null;
}
}
}
}
/**
* Get the containing subsystem from an item
* @param item the item to get the subsystem for
* @return the subsystem
*/
public ISubSystem getContainingSubSystem(TreeItem item)
{
Object data = item.getData();
if (data instanceof ISubSystem)
{
return (ISubSystem)data;
}
else
{
TreeItem parent = item.getParentItem();
if (parent != null)
{
return getContainingSubSystem(parent);
}
else
{
Object input = getInput();
if (input instanceof ISubSystem)
{
return (ISubSystem)input;
}
else
{
return null;
}
}
}
}
/**
* Get the context object from a tree item
* @param item the item to get the context for
* @return the context object
*/
public IContextObject getContextObject(TreeItem item)
{
Object data = item.getData();
ISystemFilterReference filterReference = getContainingFilterReference(item);
if (filterReference != null)
{
return new ContextObject(data, filterReference.getSubSystem(), filterReference);
}
else
{
ISubSystem subSystem = getContainingSubSystem(item);
if (subSystem != null)
{
return new ContextObject(data, subSystem);
}
else
{
return new ContextObject(data);
}
}
}
/**
* Overrides the standard viewer method to get the model object from the context object
*/
public void add(Object parentElementOrTreePath, Object[] childElements) {
Assert.isNotNull(parentElementOrTreePath);
assertElementsNotNull(childElements);
if (parentElementOrTreePath instanceof IContextObject)
{
parentElementOrTreePath = ((IContextObject)parentElementOrTreePath).getModelObject();
}
super.add(parentElementOrTreePath, childElements);
}
} }

View file

@ -25,6 +25,7 @@ import java.util.Map;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProvider;
@ -180,20 +181,29 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
public Object[] getElements(Object object) public Object[] getElements(Object object)
{ {
Object[] results = null; Object[] results = null;
if (object == _lastObject && _lastResults != null) if (object == _lastObject && _lastResults != null)
{ {
return _lastResults; return _lastResults;
} }
else else
if (object instanceof IAdaptable)
{ {
ISystemViewElementAdapter adapter = getAdapterFor(object); Object element = object;
// object could either be a model object or a wrapper IContextObject
if (object instanceof IContextObject)
{
element = ((IContextObject)object).getModelObject();
}
{
ISystemViewElementAdapter adapter = getAdapterFor(element);
adapter.setViewer(_viewer); adapter.setViewer(_viewer);
if (adapter.hasChildren(object)) if (adapter.hasChildren(element))
{ {
if (supportsDeferredQueries()) if (supportsDeferredQueries())
{ {
@ -212,7 +222,14 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
} }
else else
{ {
results = adapter.getChildren(object); if (object instanceof IContextObject)
{
results = adapter.getChildren(new NullProgressMonitor(), (IContextObject)object);
}
else
{
results = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
}
} }
if (adapter instanceof SystemViewRootInputAdapter && results != null) if (adapter instanceof SystemViewRootInputAdapter && results != null)
{ {
@ -233,6 +250,7 @@ public class SystemTableTreeViewProvider implements ILabelProvider, ITableLabelP
_lastObject = object; _lastObject = object;
} }
} }
}
if (results == null) if (results == null)
{ {
return new Object[0]; return new Object[0];

View file

@ -25,6 +25,7 @@ import java.util.Map;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ILabelProviderListener;
@ -152,7 +153,7 @@ public class SystemTableViewProvider implements ILabelProvider, ITableLabelProvi
if (adapter != null) if (adapter != null)
{ {
adapter.setViewer(_viewer); adapter.setViewer(_viewer);
results = adapter.getChildren(object); results = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
if (adapter instanceof SystemViewRootInputAdapter) if (adapter instanceof SystemViewRootInputAdapter)
{ {
ArrayList filterredResults = new ArrayList(); ArrayList filterredResults = new ArrayList();

View file

@ -25,9 +25,11 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.ActionContributionItem;
@ -109,6 +111,7 @@ import org.eclipse.rse.ui.dialogs.SystemPromptDialog;
import org.eclipse.rse.ui.messages.ISystemMessageLine; import org.eclipse.rse.ui.messages.ISystemMessageLine;
import org.eclipse.rse.ui.messages.SystemMessageDialog; import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.dnd.Transfer;
@ -5159,9 +5162,18 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
return false; return false;
} }
*/ */
public void add(Object parentElementOrTreePath, Object[] childElements) { public void add(Object parentElementOrTreePath, Object[] childElements) {
assertElementsNotNull(childElements); assertElementsNotNull(childElements);
ISystemFilterReference originalFilter = null;
if (parentElementOrTreePath instanceof IContextObject)
{
IContextObject context = (IContextObject)parentElementOrTreePath;
originalFilter = context.getFilterReference();
parentElementOrTreePath = context.getModelObject();
}
Vector matches = new Vector(); Vector matches = new Vector();
matches = findAllRemoteItemReferences(parentElementOrTreePath, parentElementOrTreePath, matches); matches = findAllRemoteItemReferences(parentElementOrTreePath, parentElementOrTreePath, matches);
@ -5211,9 +5223,22 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
{ {
for (int i = 0; i < matches.size(); i++) { for (int i = 0; i < matches.size(); i++) {
Widget match = (Widget) matches.get(i); Widget match = (Widget) matches.get(i);
ISystemFilterReference ref = getContainingFilterReference((TreeItem)match);
if (matches.size() > 1 && ref != null && ref != originalFilter)
{
// could have the same object under multiple filters
// need to apply filter
ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)parentElementOrTreePath).getAdapter(ISystemViewElementAdapter.class);
IContextObject contextObject = getContextObject((TreeItem)match);
Object[] newChildren = adapter.getChildren(new NullProgressMonitor(), contextObject);
internalAdd(match, parentElementOrTreePath, newChildren);
}
else
{
internalAdd(match, parentElementOrTreePath, childElements); internalAdd(match, parentElementOrTreePath, childElements);
} }
} }
}
TreeItem item = getFirstSelectedTreeItem(); TreeItem item = getFirstSelectedTreeItem();
if (item != null) if (item != null)
@ -5226,4 +5251,156 @@ public class SystemView extends SafeTreeViewer implements ISystemTree, ISystemRe
} }
/**
* Get the containing filter reference for an item
* @param item the item to get the filter reference for
* @return the filter reference
*/
public ISystemFilterReference getContainingFilterReference(TreeItem item)
{
Object data = item.getData();
if (data instanceof ISystemFilterReference)
{
return (ISystemFilterReference)data;
}
else
{
TreeItem parent = item.getParentItem();
if (parent != null)
{
return getContainingFilterReference(parent);
}
else
{
Object input = getInput();
if (input instanceof ISystemFilterReference)
{
return (ISystemFilterReference)input;
}
else
{
return null;
}
}
}
}
/**
* Get the containing subsystem from an item
* @param item the item to get the subsystem for
* @return the subsystem
*/
public ISubSystem getContainingSubSystem(TreeItem item)
{
Object data = item.getData();
if (data instanceof ISubSystem)
{
return (ISubSystem)data;
}
else
{
TreeItem parent = item.getParentItem();
if (parent != null)
{
return getContainingSubSystem(parent);
}
else
{
Object input = getInput();
if (input instanceof ISubSystem)
{
return (ISubSystem)input;
}
else
{
return null;
}
}
}
}
/**
* Get the context object from a tree item
* @param item the item to get the context for
* @return the context object
*/
public IContextObject getContextObject(TreeItem item)
{
Object data = item.getData();
ISystemFilterReference filterReference = getContainingFilterReference(item);
if (filterReference != null)
{
return new ContextObject(data, filterReference.getSubSystem(), filterReference);
}
else
{
ISubSystem subSystem = getContainingSubSystem(item);
if (subSystem != null)
{
return new ContextObject(data, subSystem);
}
else
{
return new ContextObject(data);
}
}
}
/**
* Overridden so that we can pass a wrapper IContextObject into the provider to get children instead
* of the model object, itself
*/
protected void createChildren(final Widget widget)
{
if (widget instanceof TreeItem)
{
final Item[] tis = getChildren(widget);
if (tis != null && tis.length > 0) {
Object data = tis[0].getData();
if (data != null) {
return; // children already there!
}
}
BusyIndicator.showWhile(widget.getDisplay(), new Runnable() {
public void run() {
// fix for PR 1FW89L7:
// don't complain and remove all "dummies" ...
if (tis != null) {
for (int i = 0; i < tis.length; i++) {
if (tis[i].getData() != null) {
disassociate(tis[i]);
Assert.isTrue(tis[i].getData() == null,
"Second or later child is non -null");//$NON-NLS-1$
}
tis[i].dispose();
}
}
Object d = widget.getData();
if (d != null)
{
Object parentElement = getContextObject((TreeItem)widget);
Object[] children = getSortedChildren(parentElement);
if (children != null)
{
for (int i = 0; i < children.length; i++)
{
createTreeItem(widget, children[i], -1);
}
}
}
}
});
}
else
{
super.createChildren(widget);
}
}
} }

View file

@ -15,6 +15,7 @@
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.IHost;
/** /**
@ -64,7 +65,7 @@ public class SystemViewAPIProviderForConnections
public Object[] getSystemViewRoots() public Object[] getSystemViewRoots()
{ {
//return sr.getSubSystems(connection); //return sr.getSubSystems(connection);
return getAdapter(connection).getChildren(connection); // pc42690 return getAdapter(connection).getChildren(new NullProgressMonitor(), connection); // pc42690
} }
/** /**
* Return true if {@link #getSystemViewRoots()} will return a non-empty list * Return true if {@link #getSystemViewRoots()} will return a non-empty list
@ -83,7 +84,7 @@ public class SystemViewAPIProviderForConnections
public Object[] getConnectionChildren(IHost selectedConnection) public Object[] getConnectionChildren(IHost selectedConnection)
{ {
//return sr.getSubSystems(selectedConnection); //return sr.getSubSystems(selectedConnection);
return getAdapter(selectedConnection).getChildren(selectedConnection); // pc42690 return getAdapter(selectedConnection).getChildren(new NullProgressMonitor(), selectedConnection); // pc42690
} }
/** /**
* This method is called by the connection adapter when deciding to show a plus-sign * This method is called by the connection adapter when deciding to show a plus-sign

View file

@ -17,6 +17,7 @@
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ICellEditorValidator; import org.eclipse.jface.viewers.ICellEditorValidator;
@ -250,7 +251,7 @@ public class SystemViewConnectionAdapter
/** /**
* Return the children of this object * Return the children of this object
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
IHost conn = (IHost)element; IHost conn = (IHost)element;
ISystemViewInputProvider input = getInput(); ISystemViewInputProvider input = getInput();

View file

@ -17,6 +17,7 @@
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
@ -172,7 +173,7 @@ public class SystemViewFilterAdapter extends AbstractSystemViewAdapter implement
* Return the children of this filter. * Return the children of this filter.
* This is a combination of nested filters and resolved filter objects. * This is a combination of nested filters and resolved filter objects.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
ISystemFilter filter = getFilter(element); ISystemFilter filter = getFilter(element);
// transient filters... // transient filters...

View file

@ -17,6 +17,7 @@
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
@ -151,7 +152,7 @@ public class SystemViewFilterPoolAdapter extends AbstractSystemViewAdapter imple
* Return the children of this object. * Return the children of this object.
* For filter pools, this is a list of filters. * For filter pools, this is a list of filters.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
ISystemFilterPool fp = (ISystemFilterPool)element; ISystemFilterPool fp = (ISystemFilterPool)element;
return fp.getSystemFilters(); return fp.getSystemFilters();

View file

@ -17,6 +17,7 @@
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
@ -197,7 +198,7 @@ public class SystemViewFilterPoolReferenceAdapter
* Return the children of this object. * Return the children of this object.
* For filter pools, this is a list of filters. * For filter pools, this is a list of filters.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
ISystemFilterPoolReference fpRef = getFilterPoolReference(element); ISystemFilterPoolReference fpRef = getFilterPoolReference(element);
ISubSystem ss = getSubSystem(element); ISubSystem ss = getSubSystem(element);

View file

@ -223,24 +223,11 @@ public class SystemViewFilterReferenceAdapter
* <li>resolved objects for each filter string if user has elected NOT to show filter strings in his preferences * <li>resolved objects for each filter string if user has elected NOT to show filter strings in his preferences
* </ul> * </ul>
*/ */
public Object[] getChildren(IProgressMonitor monitor, Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
return internalGetChildren(monitor, element); return internalGetChildren(monitor, element);
} }
/**
* Return the children of this object.
* For filters, this is one or more of:
* <ul>
* <li>filters if nested filters supported
* <li>filter strings if user has elected to show filter strings in his preferences
* <li>resolved objects for each filter string if user has elected NOT to show filter strings in his preferences
* </ul>
*/
public Object[] getChildren(Object element)
{
return internalGetChildren(null, element);
}
/* /*
* Returns the children of the specified element. If a monitor is passed in then * Returns the children of the specified element. If a monitor is passed in then
@ -621,7 +608,7 @@ public class SystemViewFilterReferenceAdapter
/** /**
* Return a validator for verifying the new name is correct. * Return a validator for verifying the new name is correct.
* @param either a filter for a rename action, or a filter pool for a "new" action. * @param element either a filter for a rename action, or a filter pool for a "new" action.
*/ */
public ISystemValidator getNameValidator(Object element) public ISystemValidator getNameValidator(Object element)
{ {

View file

@ -17,6 +17,7 @@
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
@ -148,7 +149,7 @@ public class SystemViewFilterStringAdapter extends AbstractSystemViewAdapter imp
* Return the children of this filter. * Return the children of this filter.
* This returns an empty list. * This returns an empty list.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
return null; return null;
} }

View file

@ -25,6 +25,7 @@ import java.util.Map;
import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.AbstractTreeViewer;
@ -37,10 +38,10 @@ import org.eclipse.rse.core.SystemBasePlugin;
import org.eclipse.rse.core.model.SystemMessageObject; import org.eclipse.rse.core.model.SystemMessageObject;
import org.eclipse.rse.core.subsystems.ISubSystem; import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.model.ISystemResourceChangeListener; import org.eclipse.rse.model.ISystemResourceChangeListener;
import org.eclipse.rse.ui.operations.SystemDeferredTreeContentManager;
import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.model.IWorkbenchAdapter;
import org.eclipse.ui.progress.DeferredTreeContentManager;
import org.eclipse.ui.progress.PendingUpdateAdapter; import org.eclipse.ui.progress.PendingUpdateAdapter;
@ -65,7 +66,7 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
private String filterString = null; private String filterString = null;
private Hashtable resolvedChildrenPerFolder = null; // local cache to improve performance private Hashtable resolvedChildrenPerFolder = null; // local cache to improve performance
private DeferredTreeContentManager manager; private SystemDeferredTreeContentManager manager;
/** /**
* The cache of images that have been dispensed by this provider. * The cache of images that have been dispensed by this provider.
* Maps ImageDescriptor->Image. * Maps ImageDescriptor->Image.
@ -167,6 +168,8 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
} }
} }
} }
/** /**
* Returns the implementation of ISystemViewElement for the given * Returns the implementation of ISystemViewElement for the given
* object. Returns null if the adapter is not defined or the * object. Returns null if the adapter is not defined or the
@ -174,6 +177,10 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
*/ */
protected ISystemViewElementAdapter getAdapter(Object o) protected ISystemViewElementAdapter getAdapter(Object o)
{ {
if (o instanceof IContextObject)
{
o = ((IContextObject)o).getModelObject();
}
ISystemViewElementAdapter adapter = null; ISystemViewElementAdapter adapter = null;
if (o == null) if (o == null)
{ {
@ -241,20 +248,33 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
/** /**
* @see ITreeContentProvider * @see ITreeContentProvider
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(Object object)
{ {
ISystemViewElementAdapter adapter = getAdapter(element); ISystemViewElementAdapter adapter = getAdapter(object);
Object element = object;
if (object instanceof IContextObject)
{
element = ((IContextObject)object).getModelObject();
}
if (supportsDeferredQueries()) if (supportsDeferredQueries())
{ {
if (manager != null && adapter.supportsDeferredQueries()) if (manager != null && adapter.supportsDeferredQueries())
{ {
ISubSystem ss = adapter.getSubSystem(element); ISubSystem ss = null;
if (object instanceof IContextObject)
{
ss = ((IContextObject)object).getSubSystem();
}
else
{
ss = adapter.getSubSystem(object);
}
if (ss != null) if (ss != null)
{ {
// if (ss.isConnected()) // if (ss.isConnected())
{ {
Object[] children = manager.getChildren(element); Object[] children = manager.getChildren(object);
if (children != null) if (children != null)
{ {
// This will be a placeholder to indicate // This will be a placeholder to indicate
@ -302,7 +322,15 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
return children; // return it to caller return children; // return it to caller
} }
children = adapter.getChildren(element); if (object instanceof IContextObject)
{
children = adapter.getChildren(new NullProgressMonitor(), (IContextObject)object);
}
else
{
children = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
}
if ((filesOnly || foldersOnly) && if ((filesOnly || foldersOnly) &&
// an array of one SystemMessageObject item implies some kind of error, so don't cache... // an array of one SystemMessageObject item implies some kind of error, so don't cache...
@ -378,7 +406,7 @@ public class SystemViewLabelAndContentProvider extends LabelProvider
} }
if (viewer instanceof AbstractTreeViewer) if (viewer instanceof AbstractTreeViewer)
{ {
manager = new DeferredTreeContentManager(this, (AbstractTreeViewer) viewer); manager = new SystemDeferredTreeContentManager(this, (AbstractTreeViewer) viewer);
} }
} }

View file

@ -15,6 +15,8 @@
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.core.model.ISystemMessageObject; import org.eclipse.rse.core.model.ISystemMessageObject;
@ -100,7 +102,7 @@ public class SystemViewMessageAdapter
/** /**
* Return the children of this object. Not applicable for us. * Return the children of this object. Not applicable for us.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
return null; return null;
} }

View file

@ -15,6 +15,8 @@
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.model.ISystemPromptableObject; import org.eclipse.rse.model.ISystemPromptableObject;
@ -99,7 +101,7 @@ public class SystemViewPromptableAdapter
/** /**
* Return the children of this object. Not applicable for us. * Return the children of this object. Not applicable for us.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
ISystemPromptableObject promptable = (ISystemPromptableObject)element; ISystemPromptableObject promptable = (ISystemPromptableObject)element;
if (!promptable.hasChildren()) if (!promptable.hasChildren())

View file

@ -16,6 +16,8 @@
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.core.SystemPreferencesManager; import org.eclipse.rse.core.SystemPreferencesManager;
@ -102,7 +104,7 @@ public class SystemViewRootInputAdapter extends AbstractSystemViewAdapter implem
/** /**
* Return the children of this object * Return the children of this object
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
ISystemViewInputProvider provider = (ISystemViewInputProvider)element; ISystemViewInputProvider provider = (ISystemViewInputProvider)element;

View file

@ -18,6 +18,7 @@ package org.eclipse.rse.ui.view;
import java.util.List; import java.util.List;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
@ -103,7 +104,7 @@ public class SystemViewScratchpadAdapter extends AbstractSystemViewAdapter imple
/** /**
* Return the children of this object * Return the children of this object
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
SystemScratchpad pad = (SystemScratchpad)element; SystemScratchpad pad = (SystemScratchpad)element;
return pad.getChildren(); return pad.getChildren();

View file

@ -15,6 +15,7 @@
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.ui.view; package org.eclipse.rse.ui.view;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IAction;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
@ -165,7 +166,7 @@ public class SystemViewSubSystemAdapter extends AbstractSystemViewAdapter
/** /**
* Return the children of this object * Return the children of this object
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
//System.out.println("INSIDE GETCHILDREN FOR SUBSYSTEM VIEW ADAPTER: "+element); //System.out.println("INSIDE GETCHILDREN FOR SUBSYSTEM VIEW ADAPTER: "+element);
ISubSystem ss = (ISubSystem)element; ISubSystem ss = (ISubSystem)element;

View file

@ -143,7 +143,7 @@ FocusListener
{ {
public IStatus run(IProgressMonitor monitor) public IStatus run(IProgressMonitor monitor)
{ {
Object[] children = _adapter.getChildren(monitor, _inputObject); Object[] children = _adapter.getChildren(monitor, (IAdaptable)_inputObject);
if (children != null) if (children != null)
{ {
SystemTableTreeViewProvider provider = (SystemTableTreeViewProvider)_viewer.getContentProvider(); SystemTableTreeViewProvider provider = (SystemTableTreeViewProvider)_viewer.getContentProvider();

View file

@ -21,6 +21,7 @@ import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Platform;
@ -48,6 +49,7 @@ import org.eclipse.rse.core.filters.ISystemFilterReference;
import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.IHost;
import org.eclipse.rse.core.model.ISystemRegistry; import org.eclipse.rse.core.model.ISystemRegistry;
import org.eclipse.rse.core.references.IRSEBaseReferencingObject; import org.eclipse.rse.core.references.IRSEBaseReferencingObject;
import org.eclipse.rse.core.subsystems.ISubSystem;
import org.eclipse.rse.model.ISystemRemoteChangeEvent; import org.eclipse.rse.model.ISystemRemoteChangeEvent;
import org.eclipse.rse.model.ISystemRemoteChangeEvents; import org.eclipse.rse.model.ISystemRemoteChangeEvents;
import org.eclipse.rse.model.ISystemRemoteChangeListener; import org.eclipse.rse.model.ISystemRemoteChangeListener;
@ -73,6 +75,8 @@ import org.eclipse.rse.ui.actions.SystemSubMenuManager;
import org.eclipse.rse.ui.messages.ISystemMessageLine; import org.eclipse.rse.ui.messages.ISystemMessageLine;
import org.eclipse.rse.ui.messages.SystemMessageDialog; import org.eclipse.rse.ui.messages.SystemMessageDialog;
import org.eclipse.rse.ui.view.AbstractSystemViewAdapter; import org.eclipse.rse.ui.view.AbstractSystemViewAdapter;
import org.eclipse.rse.ui.view.ContextObject;
import org.eclipse.rse.ui.view.IContextObject;
import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter; import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
import org.eclipse.rse.ui.view.ISystemSelectAllTarget; import org.eclipse.rse.ui.view.ISystemSelectAllTarget;
import org.eclipse.rse.ui.view.ISystemViewElementAdapter; import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
@ -81,6 +85,7 @@ import org.eclipse.rse.ui.view.SystemViewDataDragAdapter;
import org.eclipse.rse.ui.view.SystemViewDataDropAdapter; import org.eclipse.rse.ui.view.SystemViewDataDropAdapter;
import org.eclipse.rse.ui.view.SystemViewMenuListener; import org.eclipse.rse.ui.view.SystemViewMenuListener;
import org.eclipse.swt.SWT; import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BusyIndicator;
import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.FileTransfer; import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.TextTransfer;
@ -90,6 +95,7 @@ import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Item;
import org.eclipse.swt.widgets.Layout; import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Shell;
@ -1402,5 +1408,167 @@ public class SystemScratchpadView
} }
} }
/**
* Overridden so that we can pass a wrapper IContextObject into the provider to get children instead
* of the model object, itself
*/
protected void createChildren(final Widget widget)
{
if (widget instanceof TreeItem)
{
final Item[] tis = getChildren(widget);
if (tis != null && tis.length > 0) {
Object data = tis[0].getData();
if (data != null) {
return; // children already there!
}
}
BusyIndicator.showWhile(widget.getDisplay(), new Runnable() {
public void run() {
// fix for PR 1FW89L7:
// don't complain and remove all "dummies" ...
if (tis != null) {
for (int i = 0; i < tis.length; i++) {
if (tis[i].getData() != null) {
disassociate(tis[i]);
Assert.isTrue(tis[i].getData() == null,
"Second or later child is non -null");//$NON-NLS-1$
}
tis[i].dispose();
}
}
Object d = widget.getData();
if (d != null)
{
Object parentElement = getContextObject((TreeItem)widget);
Object[] children = getSortedChildren(parentElement);
if (children != null)
{
for (int i = 0; i < children.length; i++)
{
createTreeItem(widget, children[i], -1);
}
}
}
}
});
}
else
{
super.createChildren(widget);
}
}
/**
* Get the containing filter reference for an item
* @param item the item to get the filter reference for
* @return the filter reference
*/
public ISystemFilterReference getContainingFilterReference(TreeItem item)
{
Object data = item.getData();
if (data instanceof ISystemFilterReference)
{
return (ISystemFilterReference)data;
}
else
{
TreeItem parent = item.getParentItem();
if (parent != null)
{
return getContainingFilterReference(parent);
}
else
{
Object input = getInput();
if (input instanceof ISystemFilterReference)
{
return (ISystemFilterReference)input;
}
else
{
return null;
}
}
}
}
/**
* Get the containing subsystem from an item
* @param item the item to get the subsystem for
* @return the subsystem
*/
public ISubSystem getContainingSubSystem(TreeItem item)
{
Object data = item.getData();
if (data instanceof ISubSystem)
{
return (ISubSystem)data;
}
else
{
TreeItem parent = item.getParentItem();
if (parent != null)
{
return getContainingSubSystem(parent);
}
else
{
Object input = getInput();
if (input instanceof ISubSystem)
{
return (ISubSystem)input;
}
else
{
return null;
}
}
}
}
/**
* Get the context object from a tree item
* @param item the item to get the context for
* @return the context object
*/
public IContextObject getContextObject(TreeItem item)
{
Object data = item.getData();
ISystemFilterReference filterReference = getContainingFilterReference(item);
if (filterReference != null)
{
return new ContextObject(data, filterReference.getSubSystem(), filterReference);
}
else
{
ISubSystem subSystem = getContainingSubSystem(item);
if (subSystem != null)
{
return new ContextObject(data, subSystem);
}
else
{
return new ContextObject(data);
}
}
}
/**
* Overrides the standard viewer method to get the model object from the context object
*/
public void add(Object parentElementOrTreePath, Object[] childElements) {
Assert.isNotNull(parentElementOrTreePath);
assertElementsNotNull(childElements);
if (parentElementOrTreePath instanceof IContextObject)
{
parentElementOrTreePath = ((IContextObject)parentElementOrTreePath).getModelObject();
}
super.add(parentElementOrTreePath, childElements);
}
} }

View file

@ -21,11 +21,13 @@ import java.util.Map;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.ListenerList; import org.eclipse.core.runtime.ListenerList;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.rse.ui.view.IContextObject;
import org.eclipse.rse.ui.view.ISystemViewElementAdapter; import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.model.IWorkbenchAdapter;
@ -120,12 +122,24 @@ public class SystemScratchpadViewProvider implements ILabelProvider, ITreeConten
{ {
Object[] results = null; Object[] results = null;
if (object instanceof IAdaptable) Object element = object;
if (object instanceof IContextObject)
{ {
ISystemViewElementAdapter adapter = getAdapterFor(object); element = ((IContextObject)object).getModelObject();
if (adapter != null && adapter.hasChildren(object)) }
if (element instanceof IAdaptable)
{ {
results = adapter.getChildren(object); ISystemViewElementAdapter adapter = getAdapterFor(element);
if (adapter != null && adapter.hasChildren(element))
{
if (object instanceof IContextObject)
{
results = adapter.getChildren(new NullProgressMonitor(), (IContextObject)object);
}
else
{
results = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)object);
}
} }
else else
{ {

View file

@ -17,6 +17,7 @@
package org.eclipse.rse.ui.view.search; package org.eclipse.rse.ui.view.search;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.rse.core.SystemAdapterHelpers; import org.eclipse.rse.core.SystemAdapterHelpers;
@ -55,7 +56,7 @@ public class SystemSearchViewContentProvider implements ITreeContentProvider {
return null; return null;
} }
else { else {
return adapter.getChildren(parentElement); return adapter.getChildren(new NullProgressMonitor(), (IAdaptable)parentElement);
} }
} }
@ -124,7 +125,7 @@ public class SystemSearchViewContentProvider implements ITreeContentProvider {
return null; return null;
} }
else { else {
return adapter.getChildren(inputElement); return adapter.getChildren(new NullProgressMonitor(), (IAdaptable)inputElement);
} }
} }

View file

@ -17,6 +17,8 @@
package org.eclipse.rse.ui.view.team; package org.eclipse.rse.ui.view.team;
import java.util.Vector; import java.util.Vector;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.core.IRSEUserIdConstants; import org.eclipse.rse.core.IRSEUserIdConstants;
@ -139,7 +141,7 @@ public class SystemTeamViewCategoryAdapter
/** /**
* Return the children of this profile. * Return the children of this profile.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
SystemTeamViewCategoryNode category = (SystemTeamViewCategoryNode)element; SystemTeamViewCategoryNode category = (SystemTeamViewCategoryNode)element;
ISystemProfile profile = category.getProfile(); ISystemProfile profile = category.getProfile();
@ -151,6 +153,8 @@ public class SystemTeamViewCategoryAdapter
else else
return createSubSystemConfigurationNodes(profile, category); return createSubSystemConfigurationNodes(profile, category);
} }
/** /**
* Create subsystem factory child nodes for expanded category node * Create subsystem factory child nodes for expanded category node
*/ */

View file

@ -19,6 +19,7 @@ package org.eclipse.rse.ui.view.team;
import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.Viewer;
import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.core.SystemBasePlugin;
@ -64,7 +65,7 @@ public class SystemTeamViewContentProvider extends WorkbenchContentProvider
{ {
ISystemViewElementAdapter adapter = getSystemViewAdapter(element); ISystemViewElementAdapter adapter = getSystemViewAdapter(element);
if (adapter != null) if (adapter != null)
children = adapter.getChildren(element); children = adapter.getChildren(new NullProgressMonitor(), (IAdaptable)element);
else else
children = super.getChildren(element); children = super.getChildren(element);
} }

View file

@ -17,6 +17,7 @@
package org.eclipse.rse.ui.view.team; package org.eclipse.rse.ui.view.team;
import java.util.Hashtable; import java.util.Hashtable;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
@ -209,7 +210,7 @@ public class SystemTeamViewProfileAdapter
/** /**
* Return the children of this profile. * Return the children of this profile.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
ISystemProfile profile = (ISystemProfile)element; ISystemProfile profile = (ISystemProfile)element;
return getCategoryChildren(profile); return getCategoryChildren(profile);

View file

@ -16,6 +16,8 @@
package org.eclipse.rse.ui.view.team; package org.eclipse.rse.ui.view.team;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.rse.core.filters.ISystemFilterPoolManager; import org.eclipse.rse.core.filters.ISystemFilterPoolManager;
@ -165,7 +167,7 @@ public class SystemTeamViewSubSystemConfigurationAdapter
/** /**
* Return the children of this profile. * Return the children of this profile.
*/ */
public Object[] getChildren(Object element) public Object[] getChildren(IProgressMonitor monitor, IAdaptable element)
{ {
SystemTeamViewSubSystemConfigurationNode ssfNode = (SystemTeamViewSubSystemConfigurationNode)element; SystemTeamViewSubSystemConfigurationNode ssfNode = (SystemTeamViewSubSystemConfigurationNode)element;
SystemTeamViewCategoryNode category = ssfNode.getParentCategory(); SystemTeamViewCategoryNode category = ssfNode.getParentCategory();

View file

@ -10,6 +10,7 @@
*******************************************************************************/ *******************************************************************************/
package org.eclipse.rse.tests.internal.testsubsystem; package org.eclipse.rse.tests.internal.testsubsystem;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.IStructuredSelection;
@ -124,7 +125,7 @@ public class TestSubSystemNodeAdapter extends AbstractSystemViewAdapter
/* (non-Javadoc) /* (non-Javadoc)
* @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getChildren(java.lang.Object) * @see org.eclipse.rse.ui.view.AbstractSystemViewAdapter#getChildren(java.lang.Object)
*/ */
public Object[] getChildren(Object element) { public Object[] getChildren(IProgressMonitor monitor, IAdaptable element) {
if (isTestSubSystemNodeContainer(element)) if (isTestSubSystemNodeContainer(element))
return ((ITestSubSystemNodeContainer)element).getChildNodes(); return ((ITestSubSystemNodeContainer)element).getChildNodes();
return null; return null;