Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemFetchOperation.java')
-rw-r--r--rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemFetchOperation.java572
1 files changed, 0 insertions, 572 deletions
diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemFetchOperation.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemFetchOperation.java
deleted file mode 100644
index 24ae5cc50..000000000
--- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/operations/SystemFetchOperation.java
+++ /dev/null
@@ -1,572 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2008 IBM Corporation and others.
- * 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, Kushal Munir,
- * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson,
- * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
- *
- * Contributors:
- * Martin Oberhuber (Wind River) - [186128] Move IProgressMonitor last in all API
- * Martin Oberhuber (Wind River) - [186773] split ISystemRegistryUI from ISystemRegistry
- * Martin Oberhuber (Wind River) - [189272] exception when canceling ssh connect
- * David Dykstal (IBM) - [189483] add notification when canceling password prompting
- * David McKnight (IBM) - [225747] [dstore] Trying to connect to an "Offline" system throws an NPE
- * David McKnight (IBM) - [231964] [ssh] SSH login dialog appears twice after cancel, when doing Refresh on a node
- * David McKnight (IBM) - [235164] SystemView should allow to create filter in disconnected mode
- * David McKnight (IBM) - [239368] Expand to action ignores the filter string
- * David McKnight (IBM) - [244270] Explicit check for isOffline and just returning block implementing a cache for Work Offline
- * David McKnight (IBM) - [233160] [dstore] SSL/non-SSL alert are not appropriate
- * David McKnight (IBM) - [243263] NPE on expanding a filter
- *******************************************************************************/
-
-package org.eclipse.rse.ui.operations;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
-
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.jobs.ISchedulingRule;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.core.runtime.jobs.JobChangeAdapter;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.rse.core.RSECorePlugin;
-import org.eclipse.rse.core.model.ISystemMessageObject;
-import org.eclipse.rse.core.model.ISystemRegistry;
-import org.eclipse.rse.core.model.SystemMessageObject;
-import org.eclipse.rse.core.subsystems.SubSystem;
-import org.eclipse.rse.core.subsystems.SubSystem.DisplayErrorMessageJob;
-import org.eclipse.rse.internal.ui.GenericMessages;
-import org.eclipse.rse.internal.ui.view.SystemView;
-import org.eclipse.rse.internal.ui.view.SystemViewPart;
-import org.eclipse.rse.services.clientserver.messages.SystemMessage;
-import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
-import org.eclipse.rse.ui.ISystemMessages;
-import org.eclipse.rse.ui.RSEUIPlugin;
-import org.eclipse.rse.ui.SystemBasePlugin;
-import org.eclipse.rse.ui.messages.SystemMessageDialog;
-import org.eclipse.rse.ui.view.IContextObject;
-import org.eclipse.rse.ui.view.ISystemRemoteElementAdapter;
-import org.eclipse.rse.ui.view.ISystemViewElementAdapter;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPart;
-import org.eclipse.ui.IWorkbenchSite;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.progress.IElementCollector;
-
-
-/**
- * A SystemFetchOperation is used to perform a query of a remote system on behalf of a subsystem. The operation
- * has some knowledge of the containing user interface, e.g. the workbench part which is responsible for
- * issuing the query. It is created with a "collector" that will contain the results of the query.
- * <p>
- * This class may be subclassed but usually is used directly.
- */
-public class SystemFetchOperation extends JobChangeAdapter implements IRunnableWithProgress
-{
- protected IWorkbenchPart _part;
- protected Object _remoteObject;
- protected IElementCollector _collector;
- private IRunnableContext context;
- protected ISystemViewElementAdapter _adapter;
- protected boolean _canRunAsJob;
- protected InvocationTargetException _exc;
-
- /**
- * Creates an instance of this fetch operation. This instance cannot be run in a job, but must be invoked directly.
- * @param part the workbench part associated with this fetch.
- * @param remoteObject the remote object that provides the context for this fetch
- * @param adapter the adapter that can be used to extract information from the remote objects that will be retrieved by this fetch.
- * @param collector the collector for the fetch results.
- */
- public SystemFetchOperation(IWorkbenchPart part, Object remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector)
- {
- _part = part;
- _remoteObject = remoteObject;
- _collector = collector;
- _adapter = adapter;
- _canRunAsJob = false;
- }
-
- /**
- * Creates an instance of this fetch operation.
- * @param part the workbench part associated with this fetch.
- * @param remoteObject the remote object that provides the context for this fetch
- * @param adapter the adapter that can be used to extract information from the remote objects that will be retrieved by this fetch.
- * @param collector the collector for the fetch results.
- * @param canRunAsJob true if this fetch operation can be run in a job of its own, false otherwise
- */
- public SystemFetchOperation(IWorkbenchPart part, Object remoteObject, ISystemViewElementAdapter adapter, IElementCollector collector, boolean canRunAsJob)
- {
- _part = part;
- _remoteObject = remoteObject;
- _collector = collector;
- _adapter = adapter;
- _canRunAsJob = canRunAsJob;
- }
-
- public void setException(InvocationTargetException exc)
- {
- _exc = exc;
- }
-
- /**
- * Return the part that is associated with this operation.
- *
- * @return Returns the part or <code>null</code>
- */
- public IWorkbenchPart getPart() {
- return _part;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
- */
- public final void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
- startOperation();
- try {
- monitor = Policy.monitorFor(monitor);
- monitor.beginTask(null, 100);
- monitor.setTaskName(getTaskName());
- execute(Policy.subMonitorFor(monitor, 100));
- endOperation();
- } catch (InterruptedException e) { // operation was cancelled
- endOperation();
- monitor.setCanceled(true);
- throw e;
- } catch (Exception e) {
- // TODO: errors may not be empty (i.e. endOperation has not been executed)
- throw new InvocationTargetException(e);
- } finally {
- monitor.done();
- }
- }
-
- protected void startOperation() {
- //statusCount = 0;
- //resetErrors();
- //confirmOverwrite = true;
- }
-
- protected void endOperation() {
- //handleErrors((IStatus[]) errors.toArray(new IStatus[errors.size()]));
- }
-
-
- /**
- * An action that prompts the user for credentials to connect the subsystem that is issued the fetch.
- * <p>
- * This class is listed as public, but should not be used/referenced by others.
- */
- public class PromptForPassword implements Runnable
- {
- public SubSystem _ss;
- private volatile boolean isCancelled = false;
- public PromptForPassword(SubSystem ss)
- {
- _ss = ss;
- }
-
- public void run()
- {
- try
- {
- isCancelled = false;
- _ss.promptForPassword();
- }
- catch (InterruptedException e) {
- isCancelled = true;
- }
- catch (OperationCanceledException e) {
- isCancelled = true;
- }
- catch (Exception e)
- {
-
- }
- }
-
- /**
- * Test whether this operation is cancelled.
- *
- * This method was renamed from isCanceled to isCancelled in RSE 3.0.
- *
- * @since org.eclipse.rse.ui 3.0
- * @return true if cancelled
- */
- public boolean isCancelled() {
- return isCancelled;
- }
- }
-
- /**
- * A sub-operation that broadcasts any connection status change.
- * <p>
- * Listed as public, but should not be used or referenced by others.
- */
- public class UpdateRegistry implements Runnable
- {
- private SubSystem _ss;
- public UpdateRegistry(SubSystem ss)
- {
- _ss = ss;
- }
-
- public void run()
- {
- ISystemRegistry registry = RSECorePlugin.getTheSystemRegistry();
- registry.connectedStatusChange(_ss, true, false);
- }
- }
-
- /**
- * Subclasses must override this method to perform the operation.
- * Clients should never call this method directly.
- *
- * @param monitor
- * @throws Exception
- * @throws InterruptedException
- */
- protected void execute(IProgressMonitor monitor) throws Exception, InterruptedException
- {
- SubSystem ss = null;
- Object actualRemoteObj = _remoteObject;
- if (_remoteObject instanceof IContextObject)
- {
- ss = (SubSystem)((IContextObject)_remoteObject).getSubSystem();
- actualRemoteObj = ((IContextObject)_remoteObject).getModelObject();
- }
- else
- {
- ss = (SubSystem)_adapter.getSubSystem(_remoteObject);
- }
-
-
- boolean isPromptable = false;
-
- if (actualRemoteObj instanceof IAdaptable){
- ISystemViewElementAdapter adapter = (ISystemViewElementAdapter)((IAdaptable)actualRemoteObj).getAdapter(ISystemViewElementAdapter.class);
- if (adapter != null){
- isPromptable = adapter.isPromptable(actualRemoteObj);
- }
- }
-
- synchronized (ss.getConnectorService())
- {
- if (!ss.isConnected() && !isPromptable &&
- !ss.isOffline()) // skip the connect if offline, but still follow through because we need to follow through in the subsystem
- {
-
- Display dis = Display.getDefault();
- PromptForPassword prompter = new PromptForPassword(ss);
- dis.syncExec(prompter);
- if (prompter.isCancelled()) {
- SystemMessage cancelledMessage = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_EXPAND_CANCELLED);
- SystemMessageObject cancelledMessageObject = new SystemMessageObject(cancelledMessage, ISystemMessageObject.MSGTYPE_CANCEL, _remoteObject);
- _collector.add(cancelledMessageObject, monitor);
- throw new InterruptedException();
- }
- try
- {
- ss.getConnectorService().connect(monitor);
- if (_exc != null)
- {
- showOperationErrorMessage(null, _exc, ss);
- }
- }
- catch (InvocationTargetException exc)
- {
- showOperationErrorMessage(null, exc, ss);
- return;
- }
- catch (Exception e)
- {
- showOperationErrorMessage(null, e, ss);
- return;
- }
-
- dis.asyncExec(new UpdateRegistry(ss));
-
- }
- }
-
- Object[] children = null;
- // we first test to see if this is an expand-to filter in effect for this
- // object, and if so use it...
- if ((_part==null || _part instanceof SystemViewPart) && _adapter instanceof ISystemRemoteElementAdapter)
- {
- class GetExpandToFilter implements Runnable
- {
- private String expandToFilter = null;
- public void run()
- {
- // fetching part here ourselves, because the correct part can not always be determined from a background Thread
- // see bug 244454 for details
- IWorkbenchPart activePart = _part;
- if (activePart==null) {
- IWorkbenchWindow win = SystemBasePlugin.getActiveWorkbenchWindow();
- if (win != null){
- IWorkbenchPage page = win.getActivePage();
- if (page != null){
- activePart = page.getActivePart();
- if (activePart != null){
- _part = activePart;
- }
- }
- }
- }
-
- if (activePart instanceof SystemViewPart){
- SystemView viewer = ((SystemViewPart)activePart).getSystemView();
- if (_remoteObject instanceof IContextObject){
- expandToFilter = viewer.getExpandToFilter(((IContextObject)_remoteObject).getModelObject());
- }
- else {
- expandToFilter = viewer.getExpandToFilter(_remoteObject);
- }
- }
- }
-
- public String getExpandToFilter()
- {
- return expandToFilter;
- }
- }
-
- Display dis = Display.getDefault();
- GetExpandToFilter getExpandTo = new GetExpandToFilter();
- dis.syncExec(getExpandTo);
- String expandToFilter = getExpandTo.getExpandToFilter();
-
- if (expandToFilter != null){
- if (_remoteObject instanceof IContextObject){
- children = _adapter.getChildrenUsingExpandToFilter(((IContextObject)_remoteObject).getModelObject(), expandToFilter);
- }
- else {
- children = _adapter.getChildrenUsingExpandToFilter(_remoteObject, expandToFilter);
- }
- }
- }
- if (children == null){
- if (_remoteObject instanceof IContextObject)
- {
- children = _adapter.getChildren((IContextObject)_remoteObject, monitor);
- }
- else
- {
- children = _adapter.getChildren((IAdaptable)_remoteObject, monitor);
- }
- }
- _collector.add(children, monitor);
- monitor.done();
- }
-
- /**
- * Show an error message as a result of running this operation.
- * Uses the user interface knowledge of this operation to show the message.
- * <p>
- * May be overridden by subclasses but it usually used directly.
- * @param shell The parent shell for a message dialog box.
- * @param exc the exception that was recieved and should be shown
- * @param ss the subsystem that this operation is being issued for
- */
- protected void showOperationErrorMessage(Shell shell, Throwable exc, SubSystem ss)
- {
- if (exc instanceof InvocationTargetException) {
- exc = ((InvocationTargetException)exc).getTargetException();
- }
- if (exc instanceof OperationCanceledException) {
- return; //don't log or display user cancellation
- }
- SystemMessage sysMsg = null;
- if (exc instanceof SystemMessageException)
- {
- displayAsyncMsg(ss, (SystemMessageException)exc);
- //sysMsg = ((SystemMessageException)exc).getSystemMessage();
- }
- else
- {
- String excMsg = exc.getMessage();
- if ((excMsg == null) || (excMsg.length()==0))
- excMsg = "Exception " + exc.getClass().getName(); //$NON-NLS-1$
- sysMsg = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_OPERATION_FAILED);
- sysMsg.makeSubstitution(excMsg);
-
- SystemMessageDialog.displayErrorMessage(shell, sysMsg, exc);
- }
-
- }
-
- /**
- * Display message on message thread
- */
- protected void displayAsyncMsg(SubSystem ss, org.eclipse.rse.services.clientserver.messages.SystemMessageException msg)
- {
- DisplayErrorMessageJob job = new DisplayErrorMessageJob(null, msg);
- job.setPriority(Job.INTERACTIVE);
- job.setSystem(true);
- job.schedule();
- }
-
- protected String getTaskName()
- {
- return GenericMessages.RSEQuery_task;
- }
-
- /**
- * Run the operation in a context that is determined by the {@link #canRunAsJob()}
- * hint. If this operation can run as a job then it will be run in a background thread.
- * Otherwise it will run in the foreground and block the caller.
- */
- public final void run() throws InvocationTargetException, InterruptedException {
- if (shouldRun()) {
- getRunnableContext().run(this);
- }
- }
-
- /**
- * This method is invoked from the <code>run()</code> method before
- * the operation is run in the operation's context. Subclasses may
- * override in order to perform prechecks to determine if the operation
- * should run. This may include prompting the user for information, etc.
- *
- * @return whether the operation should be run.
- */
- protected boolean shouldRun() {
- return true;
- }
-
- /**
- * Returns the scheduling rule that is to be obtained before this
- * operation is executed by it's context or <code>null</code> if
- * no scheduling rule is to be obtained. If the operation is run
- * as a job, the schdulin rule is used as the schduling rule of the
- * job. Otherwise, it is obtained before execution of the operation
- * occurs.
- * <p>
- * By default, no scheduling
- * rule is obtained. Sublcasses can override to in order ot obtain a
- * scheduling rule or can obtain schduling rules withing their operation
- * if finer grained schduling is desired.
- *
- * @return the schduling rule to be obtained by this operation
- * or <code>null</code>.
- */
- protected ISchedulingRule getSchedulingRule() {
- return null;
- }
-
- /**
- * Return whether the auto-build should be postponed until after
- * the operation is complete. The default is to postpone the auto-build.
- * subclas can override.
- *
- * @return whether to postpone the auto-build while the operation is executing.
- */
- protected boolean isPostponeAutobuild() {
- return true;
- }
-
-
- /**
- * If this operation can safely be run in the background, then subclasses can
- * override this method and return <code>true</code>. This will make their
- * action run in a {@link org.eclipse.core.runtime.jobs.Job}.
- * Subsclass that override this method should
- * also override the <code>getJobName()</code> method.
- *
- * @return <code>true</code> if this action can be run in the background and
- * <code>false</code> otherwise.
- */
- protected boolean canRunAsJob() {
- return _canRunAsJob;
- }
-
- /**
- * Return the job name to be used if the action can run as a job. (i.e.
- * if <code>canRunAsJob()</code> returns <code>true</code>).
- *
- * @return the string to be used as the job name
- */
- protected String getJobName() {
- return ""; //$NON-NLS-1$
- }
-
- /**
- * This method is called to allow subclasses to configure an action that could be run to show
- * the results of the action to the user. Default is to return null.
- *
- * @return an action that could be run to see the results of this operation
- */
- protected IAction getGotoAction() {
- return null;
- }
-
- /**
- * This method is called to allow subclasses to configure an icon to show when running this
- * operation.
- *
- * @return an URL to an icon
- */
- protected URL getOperationIcon() {
- return null;
- }
-
- /**
- * This method is called to allow subclasses to have the operation remain in the progress
- * indicator even after the job is done.
- *
- * @return <code>true</code> to keep the operation and <code>false</code> otherwise.
- */
- protected boolean getKeepOperation() {
- return false;
- }
-
- /**
- * Return a shell that can be used by the operation to display dialogs, etc.
- *
- * @return a shell
- */
- protected Shell getShell()
- {
- return SystemBasePlugin.getActiveWorkbenchShell();
- }
-
- private ISystemRunnableContext getRunnableContext() {
- if (context == null && canRunAsJob()) {
- SystemJobRunnableContext context = new SystemJobRunnableContext(getJobName(), getOperationIcon(), getGotoAction(), getKeepOperation(), this, getSite());
- context.setPostponeBuild(isPostponeAutobuild());
- context.setSchedulingRule(getSchedulingRule());
- return context;
- } else {
- SystemProgressDialogRunnableContext context = new SystemProgressDialogRunnableContext(getShell());
- context.setPostponeBuild(isPostponeAutobuild());
- context.setSchedulingRule(getSchedulingRule());
- if (this.context != null) {
- context.setRunnableContext(this.context);
- }
- return context;
- }
- }
-
-
-
-
- private IWorkbenchSite getSite() {
- IWorkbenchSite site = null;
- if(_part != null) {
- site = _part.getSite();
- }
- return site;
- }
-}

Back to the top