diff --git a/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/connectorservice/DaytimeConnectorService.java b/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/connectorservice/DaytimeConnectorService.java index 8d8a39da841..4d10049fe62 100644 --- a/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/connectorservice/DaytimeConnectorService.java +++ b/rse/examples/org.eclipse.rse.examples.daytime/src/org/eclipse/rse/examples/daytime/connectorservice/DaytimeConnectorService.java @@ -12,6 +12,7 @@ * * Contributors: * Martin Oberhuber (Wind River) - adapted template for daytime example. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.examples.daytime.connectorservice; @@ -71,19 +72,6 @@ public class DaytimeConnectorService extends AbstractConnectorService { public void internalDisconnect(IProgressMonitor monitor) throws Exception { fIsConnected = false; - super.internalDisconnect(monitor); - } - - public boolean hasRemoteServerLauncherProperties() { - return false; - } - - public boolean supportsRemoteServerLaunching() { - return false; - } - - public boolean supportsServerLaunchProperties() { - return false; } /** diff --git a/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/subsystems/DeveloperConnectorService.java b/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/subsystems/DeveloperConnectorService.java index 14b1b640a7d..fbc9cc2f92d 100644 --- a/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/subsystems/DeveloperConnectorService.java +++ b/rse/examples/org.eclipse.rse.examples.tutorial/src/samples/subsystems/DeveloperConnectorService.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2006, 2007 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 @@ -12,6 +12,7 @@ * * Contributors: * Martin Oberhuber (Wind River) - Adapted original tutorial code to Open RSE. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package samples.subsystems; @@ -57,7 +58,6 @@ public class DeveloperConnectorService extends AbstractConnectorService { */ protected void internalConnect(IProgressMonitor monitor) throws Exception { - super.internalConnect(monitor); // pretend. Normally, we'd connect to our remote server-side code here connected=true; } @@ -67,35 +67,10 @@ public class DeveloperConnectorService extends AbstractConnectorService { */ public void internalDisconnect(IProgressMonitor monitor) throws Exception { - super.internalDisconnect(monitor); // pretend. Normally, we'd disconnect from our remote server-side code here connected=false; } - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#supportsRemoteServerLaunching() - */ - public boolean supportsRemoteServerLaunching() - { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#hasRemoteServerLauncherProperties() - */ - public boolean hasRemoteServerLauncherProperties() - { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#supportsServerLaunchProperties() - */ - public boolean supportsServerLaunchProperties() - { - return false; - } - /** * @return false * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#supportsPassword() diff --git a/rse/plugins/org.eclipse.rse.connectorservice.dstore/src/org/eclipse/rse/connectorservice/dstore/DStoreConnectorService.java b/rse/plugins/org.eclipse.rse.connectorservice.dstore/src/org/eclipse/rse/connectorservice/dstore/DStoreConnectorService.java index 347417442fe..09753f666d9 100644 --- a/rse/plugins/org.eclipse.rse.connectorservice.dstore/src/org/eclipse/rse/connectorservice/dstore/DStoreConnectorService.java +++ b/rse/plugins/org.eclipse.rse.connectorservice.dstore/src/org/eclipse/rse/connectorservice/dstore/DStoreConnectorService.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2002, 2007 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 @@ -11,7 +11,7 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.connectorservice.dstore; @@ -85,6 +85,8 @@ public class DStoreConnectorService extends AbstractConnectorService implements private ClientConnection clientConnection = null; private ConnectionStatusListener _connectionStatusListener = null; + private IServerLauncher starter = null; + private IServerLauncherProperties _remoteServerLauncherProperties = null; // Shortcut to sysInfo to save time private transient DataElement sysInfo = null; @@ -93,10 +95,6 @@ public class DStoreConnectorService extends AbstractConnectorService implements private static String DSTORE_PACKAGE = "org.eclipse.dstore.core"; //$NON-NLS-1$ private Exception connectException; - //private Hashtable restrictedTypes = null; - private IServerLauncher starter; - - private class ShowConnectMessage implements Runnable { private SystemMessage _msg; @@ -448,6 +446,7 @@ public class DStoreConnectorService extends AbstractConnectorService implements */ public IServerLauncher getRemoteServerLauncher() { + if (starter == null) starter = new RexecDstoreServer(); ((RexecDstoreServer)starter).setClientConnection(clientConnection); @@ -455,6 +454,22 @@ public class DStoreConnectorService extends AbstractConnectorService implements return starter; } + public IServerLauncherProperties getRemoteServerLauncherProperties() { + return _remoteServerLauncherProperties; + } + + public void setRemoteServerLauncherProperties(IServerLauncherProperties newRemoteServerLauncher) { + if (_remoteServerLauncherProperties != newRemoteServerLauncher) + { + _remoteServerLauncherProperties = newRemoteServerLauncher; + setDirty(true); + } + } + + public boolean hasRemoteServerLauncherProperties() { + return _remoteServerLauncherProperties != null; + } + /** @@ -1303,20 +1318,11 @@ public class DStoreConnectorService extends AbstractConnectorService implements // } // } - public boolean hasRemoteServerLauncherProperties() - { - return getRemoteServerLauncherProperties() != null; - } - - - public boolean supportsRemoteServerLaunching() { return true; } - - public boolean supportsServerLaunchProperties() { return true; diff --git a/rse/plugins/org.eclipse.rse.connectorservice.local/src/org/eclipse/rse/internal/connectorservice/local/LocalConnectorService.java b/rse/plugins/org.eclipse.rse.connectorservice.local/src/org/eclipse/rse/internal/connectorservice/local/LocalConnectorService.java index 75b69955f2f..1643ed4a661 100644 --- a/rse/plugins/org.eclipse.rse.connectorservice.local/src/org/eclipse/rse/internal/connectorservice/local/LocalConnectorService.java +++ b/rse/plugins/org.eclipse.rse.connectorservice.local/src/org/eclipse/rse/internal/connectorservice/local/LocalConnectorService.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2002, 2007 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 @@ -11,7 +11,7 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.internal.connectorservice.local; @@ -94,24 +94,6 @@ public class LocalConnectorService extends AbstractConnectorService return System.getProperty("java.io.tmpdir"); //$NON-NLS-1$ } - - - - public boolean hasRemoteServerLauncherProperties() - { - return false; - } - - public boolean supportsRemoteServerLaunching() - { - return false; - } - - public boolean supportsServerLaunchProperties() - { - return false; - } - /** * @return false * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#supportsPassword() diff --git a/rse/plugins/org.eclipse.rse.connectorservice.ssh/src/org/eclipse/rse/internal/connectorservice/ssh/SshConnectorService.java b/rse/plugins/org.eclipse.rse.connectorservice.ssh/src/org/eclipse/rse/internal/connectorservice/ssh/SshConnectorService.java index 55b695aa550..102fd47873e 100644 --- a/rse/plugins/org.eclipse.rse.connectorservice.ssh/src/org/eclipse/rse/internal/connectorservice/ssh/SshConnectorService.java +++ b/rse/plugins/org.eclipse.rse.connectorservice.ssh/src/org/eclipse/rse/internal/connectorservice/ssh/SshConnectorService.java @@ -7,6 +7,7 @@ * * Contributors: * Martin Oberhuber (Wind River) - initial API and implementation + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies *******************************************************************************/ package org.eclipse.rse.internal.connectorservice.ssh; @@ -703,18 +704,6 @@ public class SshConnectorService extends AbstractConnectorService implements ISs return false; } - public boolean hasRemoteServerLauncherProperties() { - return false; - } - - public boolean supportsRemoteServerLaunching() { - return false; - } - - public boolean supportsServerLaunchProperties() { - return false; - } - /** * @return false * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#requiresPassword() diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/RSEModelResources.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/RSEModelResources.java index e103982c542..5a2db0f2511 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/RSEModelResources.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/RSEModelResources.java @@ -11,7 +11,7 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.core.model; @@ -33,6 +33,14 @@ public class RSEModelResources extends NLS { public static String RESID_MODELOBJECTS_SERVERLAUNCHER_DESCRIPTION; public static String RESID_MODELOBJECTS_FILTER_DESCRIPTION; public static String RESID_MODELOBJECTS_FILTERPOOL_DESCRIPTION; + + public static String RESID_PROP_SERVERLAUNCHER_MEANS_LABEL; + public static String RESID_PROP_SERVERLAUNCHER_PATH; + public static String RESID_PROP_SERVERLAUNCHER_INVOCATION; + public static String RESID_CONNECTION_DAEMON_PORT_LABEL; + public static String RESID_CONNECTION_PORT_LABEL; + public static String RESID_SUBSYSTEM_AUTODETECT_LABEL; + static { // load message values from bundle file diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/RSEModelResources.properties b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/RSEModelResources.properties index 0ce05bf24a1..f20991271f6 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/RSEModelResources.properties +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/RSEModelResources.properties @@ -11,7 +11,7 @@ # Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. # # Contributors: -# {Name} (company) - description of contribution. +# David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ################################################################################ # NLS_MESSAGEFORMAT_VAR @@ -25,3 +25,10 @@ RESID_MODELOBJECTS_PROFILE_DESCRIPTION=Your profile is the object with which all RESID_MODELOBJECTS_SERVERLAUNCHER_DESCRIPTION=The Server Launcher is an object for storing configuration details about how to launch servers on the remote host. RESID_MODELOBJECTS_FILTER_DESCRIPTION=A filter is a collection of filter strings that determines which files will pass through it. RESID_MODELOBJECTS_FILTERPOOL_DESCRIPTION=A filter pool is a group of filters. There is one filter pool associated with each profile. + +RESID_SUBSYSTEM_AUTODETECT_LABEL=Auto-detect SSL +RESID_PROP_SERVERLAUNCHER_MEANS_LABEL=Launcher +RESID_PROP_SERVERLAUNCHER_PATH=Path to installed server on host +RESID_PROP_SERVERLAUNCHER_INVOCATION=Server launch command +RESID_CONNECTION_PORT_LABEL=Port +RESID_CONNECTION_DAEMON_PORT_LABEL=Daemon Port diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/SystemSignonInformation.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/SystemSignonInformation.java index 86e998dff67..bac55ea8849 100644 --- a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/SystemSignonInformation.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/model/SystemSignonInformation.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2002, 2007 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 @@ -11,11 +11,13 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.core.model; +import org.eclipse.rse.core.subsystems.ICredentials; + /** * This class encapsulates the signon information required for a remote system. This class * must be secure and never disclose the password for the remote system in its unencrypted form. @@ -24,7 +26,7 @@ package org.eclipse.rse.core.model; * * @author yantzi */ -public final class SystemSignonInformation { +public final class SystemSignonInformation implements ICredentials { private String _hostname; private String _userid; diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/ICredentials.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/ICredentials.java new file mode 100644 index 00000000000..62aed2eb8d1 --- /dev/null +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/ICredentials.java @@ -0,0 +1,13 @@ +/******************************************************************************** + * Copyright (c) 2007 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: + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies + ********************************************************************************/ +package org.eclipse.rse.core.subsystems; + +public interface ICredentials { +} diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/ICredentialsProvider.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/ICredentialsProvider.java new file mode 100644 index 00000000000..3fd0fe91349 --- /dev/null +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/ICredentialsProvider.java @@ -0,0 +1,13 @@ +/******************************************************************************** + * Copyright (c) 2007 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: + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies + ********************************************************************************/ +package org.eclipse.rse.core.subsystems; + +public interface ICredentialsProvider { +} diff --git a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/RemoteServerLauncher.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/RemoteServerLauncher.java similarity index 90% rename from rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/RemoteServerLauncher.java rename to rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/RemoteServerLauncher.java index 657c06208b7..0bd2622c0dc 100644 --- a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/RemoteServerLauncher.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/RemoteServerLauncher.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2004, 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2004, 2007 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 @@ -11,20 +11,19 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.core.subsystems; import java.util.Arrays; import java.util.List; -import org.eclipse.rse.core.internal.subsystems.RemoteServerLauncherConstants; -import org.eclipse.rse.core.internal.subsystems.ServerLauncher; import org.eclipse.rse.core.model.IProperty; import org.eclipse.rse.core.model.IPropertySet; import org.eclipse.rse.core.model.IPropertyType; import org.eclipse.rse.core.model.PropertyType; -import org.eclipse.rse.ui.SystemResources; +import org.eclipse.rse.core.model.RSEModelResources; +import org.eclipse.rse.internal.core.subsystems.ServerLauncher; /** @@ -36,7 +35,7 @@ import org.eclipse.rse.ui.SystemResources; * user a number of ways to start that remote server from the client, as well to connect * to it if it is already running. This class encapsulates the properties to support that. *

- * Create instances via {@link org.eclipse.rse.core.subsystems.SubSystemConfiguration#createServerLauncher(IConnectorService)} + * Create instances via {@link ISubSystemConfiguration#createServerLauncher(IConnectorService)} * *

* The following features are implemented: @@ -97,7 +96,7 @@ public class RemoteServerLauncher extends ServerLauncher implements IRemoteServe protected IPropertyType _serverLauncherEnumType; - protected RemoteServerLauncher(String name, IConnectorService connectorService) + public RemoteServerLauncher(String name, IConnectorService connectorService) { super(name, connectorService); } @@ -140,14 +139,14 @@ public class RemoteServerLauncher extends ServerLauncher implements IRemoteServe try { IProperty launchTypeProperty = set.getProperty(KEY_SERVER_LAUNCH_TYPE_NAME); - launchTypeProperty.setLabel(SystemResources.RESID_PROP_SERVERLAUNCHER_MEANS_LABEL); + launchTypeProperty.setLabel(RSEModelResources.RESID_PROP_SERVERLAUNCHER_MEANS_LABEL); String launchTypeName = launchTypeProperty.getValue(); _serverLaunchType = ServerLaunchType.get(launchTypeName); IProperty daemonPortProperty = set.getProperty(KEY_DAEMON_PORT); boolean daemon = _serverLaunchType == null || _serverLaunchType.getType() == ServerLaunchType.DAEMON; daemonPortProperty.setEnabled(daemon); - daemonPortProperty.setLabel(SystemResources.RESID_CONNECTION_DAEMON_PORT_LABEL); + daemonPortProperty.setLabel(RSEModelResources.RESID_CONNECTION_DAEMON_PORT_LABEL); _daemonPort = Integer.parseInt(daemonPortProperty.getValue()); @@ -156,7 +155,7 @@ public class RemoteServerLauncher extends ServerLauncher implements IRemoteServe { boolean autoDetect = _serverLaunchType == null || _serverLaunchType.getType() == ServerLaunchType.REXEC; autoDetectProperty.setEnabled(autoDetect); - autoDetectProperty.setLabel(SystemResources.RESID_SUBSYSTEM_AUTODETECT_LABEL); + autoDetectProperty.setLabel(RSEModelResources.RESID_SUBSYSTEM_AUTODETECT_LABEL); _autoDetectSSL = Boolean.getBoolean(autoDetectProperty.getValue()); } @@ -164,18 +163,18 @@ public class RemoteServerLauncher extends ServerLauncher implements IRemoteServe boolean usingRexec = _serverLaunchType != null && _serverLaunchType.getType() == ServerLaunchType.REXEC; IProperty rexecPortProperty = set.getProperty(KEY_REXEC_PORT); rexecPortProperty.setEnabled(usingRexec); - rexecPortProperty.setLabel(SystemResources.RESID_CONNECTION_PORT_LABEL); + rexecPortProperty.setLabel(RSEModelResources.RESID_CONNECTION_PORT_LABEL); _rexecPort = Integer.parseInt(rexecPortProperty.getValue()); IProperty serverPathProperty = set.getProperty(KEY_SERVER_PATH); serverPathProperty.setEnabled(usingRexec); - serverPathProperty.setLabel(SystemResources.RESID_PROP_SERVERLAUNCHER_PATH); + serverPathProperty.setLabel(RSEModelResources.RESID_PROP_SERVERLAUNCHER_PATH); _serverPath = serverPathProperty.getValue(); IProperty serverScriptProperty = set.getProperty(KEY_SERVER_SCRIPT); serverScriptProperty.setEnabled(usingRexec); - serverScriptProperty.setLabel(SystemResources.RESID_PROP_SERVERLAUNCHER_INVOCATION); + serverScriptProperty.setLabel(RSEModelResources.RESID_PROP_SERVERLAUNCHER_INVOCATION); _serverScript = serverScriptProperty.getValue(); _hasSetServerLaunchType = true; @@ -199,28 +198,28 @@ public class RemoteServerLauncher extends ServerLauncher implements IRemoteServe if (_serverLaunchType == null) _serverLaunchType = ServerLaunchType.get(ServerLaunchType.DAEMON); IProperty launchTypeProperty = set.addProperty(KEY_SERVER_LAUNCH_TYPE_NAME, _serverLaunchType.getName(), getServerLauncherPropertyType()); - launchTypeProperty.setLabel(SystemResources.RESID_PROP_SERVERLAUNCHER_MEANS_LABEL); + launchTypeProperty.setLabel(RSEModelResources.RESID_PROP_SERVERLAUNCHER_MEANS_LABEL); IProperty daemonPortProperty = set.addProperty(KEY_DAEMON_PORT, ""+_daemonPort, PropertyType.getIntegerPropertyType()); //$NON-NLS-1$ daemonPortProperty.setEnabled(_serverLaunchType.getType() == ServerLaunchType.DAEMON); - daemonPortProperty.setLabel(SystemResources.RESID_CONNECTION_DAEMON_PORT_LABEL); + daemonPortProperty.setLabel(RSEModelResources.RESID_CONNECTION_DAEMON_PORT_LABEL); IProperty rexecPortProperty = set.addProperty(KEY_REXEC_PORT, ""+_rexecPort, PropertyType.getIntegerPropertyType()); //$NON-NLS-1$ boolean usingRexec = _serverLaunchType.getType() == ServerLaunchType.REXEC; rexecPortProperty.setEnabled(usingRexec); - rexecPortProperty.setLabel(SystemResources.RESID_CONNECTION_PORT_LABEL); + rexecPortProperty.setLabel(RSEModelResources.RESID_CONNECTION_PORT_LABEL); IProperty autoDetectSSLProperty = set.addProperty(KEY_AUTODETECT_SSL, ""+_autoDetectSSL, PropertyType.getBooleanPropertyType()); //$NON-NLS-1$ autoDetectSSLProperty.setEnabled(usingRexec); - autoDetectSSLProperty.setLabel(SystemResources.RESID_SUBSYSTEM_AUTODETECT_LABEL); + autoDetectSSLProperty.setLabel(RSEModelResources.RESID_SUBSYSTEM_AUTODETECT_LABEL); IProperty serverPathProperty = set.addProperty(KEY_SERVER_PATH, ""+_serverPath); //$NON-NLS-1$ - serverPathProperty.setLabel(SystemResources.RESID_PROP_SERVERLAUNCHER_PATH); + serverPathProperty.setLabel(RSEModelResources.RESID_PROP_SERVERLAUNCHER_PATH); serverPathProperty.setEnabled(usingRexec); IProperty serverScriptProperty = set.addProperty(KEY_SERVER_SCRIPT, ""+_serverScript); //$NON-NLS-1$ serverScriptProperty.setEnabled(usingRexec); - serverScriptProperty.setLabel(SystemResources.RESID_PROP_SERVERLAUNCHER_INVOCATION); + serverScriptProperty.setLabel(RSEModelResources.RESID_PROP_SERVERLAUNCHER_INVOCATION); } @@ -430,7 +429,7 @@ public class RemoteServerLauncher extends ServerLauncher implements IRemoteServe * If {@link #enableServerLaunchType(ServerLaunchType,boolean)} has not been * called for this server launch type, then we defer to the subsystem factory's * method: - * {@link org.eclipse.rse.core.subsystems.SubSystemConfiguration#supportsServerLaunchType(ServerLaunchType)}. + * {@link ISubSystemConfiguration#supportsServerLaunchType(ServerLaunchType)}. * @see org.eclipse.rse.core.subsystems.ServerLaunchType */ public boolean isEnabledServerLaunchType(ServerLaunchType serverLaunchType) diff --git a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/RemoteServerLauncherConstants.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/RemoteServerLauncherConstants.java similarity index 89% rename from rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/RemoteServerLauncherConstants.java rename to rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/RemoteServerLauncherConstants.java index 963f86291ea..bd403025c93 100644 --- a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/RemoteServerLauncherConstants.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/RemoteServerLauncherConstants.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2006, 2007 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 @@ -11,10 +11,10 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ -package org.eclipse.rse.core.internal.subsystems; +package org.eclipse.rse.core.subsystems; /** * This interface defines constants for the Remote Server Launcher. diff --git a/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/SuperAbstractConnectorService.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/SuperAbstractConnectorService.java new file mode 100644 index 00000000000..72c636217ad --- /dev/null +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/core/subsystems/SuperAbstractConnectorService.java @@ -0,0 +1,365 @@ +/******************************************************************************** + * Copyright (c) 2002, 2007 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, Kushal Munir, + * Michael Berger, David Dykstal, Phil Coulthard, Don Yantzi, Eric Simpson, + * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. + * + * Contributors: + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies + ********************************************************************************/ +package org.eclipse.rse.core.subsystems; + +import java.util.ArrayList; +import java.util.List; +import java.util.Vector; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.rse.core.RSECorePlugin; +import org.eclipse.rse.core.model.IHost; +import org.eclipse.rse.core.model.RSEModelObject; + +public abstract class SuperAbstractConnectorService extends RSEModelObject implements IConnectorService { + + private Vector commListeners = new Vector(5); + private ISubSystem _primarySubSystem = null; + private List _registeredSubSystems = new ArrayList(); + private IHost _host; + private String _description; + private String _name; + private int _port; + private boolean _usingSSL; + /** + * The result of calling launch in the server launcher object, in the connect method + */ + protected Object launchResult; + /** + * The result of calling connect in the server launcher object, in the connect method + */ + protected Object connectResult; + + public SuperAbstractConnectorService(String name, String description, IHost host, int port) { + _name = name; + _description = description; + _host = host; + _port = port; + } + + public boolean supportsRemoteServerLaunching() { + return false; + } + + public boolean supportsServerLaunchProperties() { + return false; + } + + public IServerLauncherProperties getRemoteServerLauncherProperties() { + return null; + } + + public void setRemoteServerLauncherProperties(IServerLauncherProperties newRemoteServerLauncher) { + } + + public boolean hasRemoteServerLauncherProperties() { + return false; + } + + /** + * Fully implemented, no need to override.
+ * @see IConnectorService#addCommunicationsListener(ICommunicationsListener) + */ + public void addCommunicationsListener(ICommunicationsListener listener) { + if (!commListeners.contains(listener)) { + commListeners.add(listener); + } + } + + /** + * Fully implemented, no need to override.
+ * @see IConnectorService#removeCommunicationsListener(ICommunicationsListener) + */ + public void removeCommunicationsListener(ICommunicationsListener listener) { + commListeners.remove(listener); + } + + /** + * Private - used internally.
+ * Returns the count of active communication listeners (i.e. excludes + * passive listeners.) + */ + protected int getCommunicationListenerCount() { + int count = 0; + for (int i = 0; i < commListeners.size(); i++) + { + if (!((ICommunicationsListener) commListeners.get(i)).isPassiveCommunicationsListener()) + { + count++; + } + } + + return count; + } + + /** + * Private - used internally.
+ */ + protected void clearCommunicationListeners() { + commListeners.clear(); + } + + public final IHost getHost() { + return _host; + } + + public final void setHost(IHost host) { + _host = host; + } + + /** + * Private - used internally.
+ * Helper method for firing communication events + */ + protected void fireCommunicationsEvent(int eventType) { + CommunicationsEvent e = new CommunicationsEvent(this, eventType); + + Object[] items = commListeners.toArray(); + + for (int loop=0; loop < items.length; loop++) { + ((ICommunicationsListener) items[loop]).communicationsStateChange(e); + } + + } + + public final String getDescription() { + return _description; + } + + /** + * + */ + public final String getName() { + return _name; + } + + public void setPort(int port) { + if (port != _port) + { + _port = port; + setDirty(true); + } + } + + public int getPort() { + return _port; + } + + public final ISubSystem getPrimarySubSystem() { + if (_primarySubSystem == null) + { + if (_registeredSubSystems.size() == 0) + { + + } + else + { + ISubSystem ss = (ISubSystem)_registeredSubSystems.get(0); + _primarySubSystem = ss.getPrimarySubSystem(); + } + } + return _primarySubSystem; + } + + /** + * Set the subsystem, when its not known at constructor time + */ + public void registerSubSystem(ISubSystem ss) { + if (!_registeredSubSystems.contains(ss)) + { + _registeredSubSystems.add(ss); + } + } + + /** + * Removes the subsystem from teh list + * @param ss + */ + public final void deregisterSubSystem(ISubSystem ss) { + _registeredSubSystems.remove(ss); + } + + public boolean commit() { + return RSECorePlugin.getThePersistenceManager().commit(getHost()); + } + + /** + * Not implemented, you should override if possible.
+ * Return the home directory of the remote system for the current user, if available. + *

+ * Up to each implementer to decide how to implement, and if this will be cached. + *

+ * Returns an empty string by default, override if possible + */ + public String getHomeDirectory() { + return ""; //$NON-NLS-1$ + } + + /** + * Useful utility method. Fully implemented, do not override.
+ * Returns the system type for this connection:
getSubSystem().getSystemConnection().getSystemType() + */ + public final String getHostType() { + return getHost().getSystemType(); + } + + /** + * Useful utility method. Fully implemented, do not override.
+ * Returns the host name for the connection this system's subsystem is associated with:
+ * getSubSystem().getSystemConnection().getHostName() + */ + public final String getHostName() { + return getHost().getHostName(); + } + + /** + * Not implemented, you should override if possible.
+ * Return the version, release, modification of the remote system, + * if connected, if applicable and if available. Else return null. It + * is up to each subsystem to decide how to interpret what is returned.
+ * This is used to show the VRM in the property sheet, when the subsystem is selected. + *

+ * Up to each implementer to decide if this will be cached. + *

+ * Returns an empty string by default, override if possible + */ + public String getVersionReleaseModification() { + return ""; //$NON-NLS-1$ + } + + protected void intializeSubSystems(IProgressMonitor monitor) { + for (int i = 0; i < _registeredSubSystems.size(); i++) + { + ISubSystem ss = (ISubSystem)_registeredSubSystems.get(i); + ss.initializeSubSystem(monitor); + } + } + + protected void unintializeSubSystems(IProgressMonitor monitor) { + for (int i = 0; i < _registeredSubSystems.size(); i++) + { + ISubSystem ss = (ISubSystem)_registeredSubSystems.get(i); + ss.uninitializeSubSystem(monitor); + } + } + + /** + * Optionally override if you add any instance variables.
+ * The following is called whenever a system is redefined or disconnected. + * Each subsystem needs to be informed so it can clear out any expansions, etc. + * By default it does nothing. Override if you have an internal object that must be nulled out. + */ + public void reset() { + } + + public void notifyDisconnection() { + + // Fire comm event to signal state changed + if (!isConnected()) fireCommunicationsEvent(CommunicationsEvent.AFTER_DISCONNECT); + } + + public void notifyConnection() { + if (isConnected()) fireCommunicationsEvent(CommunicationsEvent.AFTER_CONNECT); + } + + public void notifyError() { + fireCommunicationsEvent(CommunicationsEvent.CONNECTION_ERROR); + + } + + public boolean isUsingSSL() { + return _usingSSL; + } + + public void setIsUsingSSL(boolean flag) { + if (_usingSSL != flag) + { + _usingSSL = flag; + setDirty(true); + } + } + + /** + * Return the port to use for connecting to the remote server, once it is running. + * By default, this is the subsystem's port property, via {@link #getPort()}. + * Override if appropriate. + *
This is called by the default implementation of {@link #connect(IProgressMonitor)}, if + * subsystem.getParentSubSystemConfiguration().supportsServerLaunchProperties() is true. + */ + protected int getConnectPort() { + return getPort(); + } + + public final ISubSystem[] getSubSystems() { + return (ISubSystem[])_registeredSubSystems.toArray(new ISubSystem[_registeredSubSystems.size()]); + } + + /** + * Not implemented, you should override if possible.
+ * Return the temp directory of the remote system for the current user, if available. + *

+ * Up to each implementer to decide how to implement, and if this will be cached. + *

+ * Returns an empty string by default, override if possible + */ + public String getTempDirectory() { + return ""; //$NON-NLS-1$ + } + + /** + * This methods returns the enablement state per server launch type. + * If {@link RemoteServerLauncher#enableServerLaunchType(ServerLaunchType, boolean)} has not been + * called for this server launch type, then it is enabled by default. + * @see org.eclipse.rse.core.subsystems.ServerLaunchType + */ + protected boolean isEnabledServerLaunchType(ISubSystem subsystem, ServerLaunchType serverLaunchType) { + IServerLauncherProperties sl = getRemoteServerLauncherProperties(); + if (sl instanceof RemoteServerLauncher) + { + RemoteServerLauncher isl = (RemoteServerLauncher)sl; + return isl.isEnabledServerLaunchType(serverLaunchType); + } + else + return subsystem.getSubSystemConfiguration().supportsServerLaunchType(serverLaunchType); + } + + /** + * Return the remote server launcher, which implements IServerLauncher. + * This is called by the default implementation of connect() and disconnect(), if + * subsystem.getParentSubSystemConfiguration().supportsServerLaunchProperties returns true. + *

This returns null be default! + */ + public IServerLauncher getRemoteServerLauncher() { + return null; + } + + /** + * You must override + * unless subsystem.getParentSubSystemConfiguration().supportsServerLaunchProperties + * returns true. + *

+ * Attempt to connect to the remote system.
+ * If the subsystem supports server launch, + * the default behavior is to get the remote server launcher by + * {@link #getRemoteServerLauncher()}, and if {@link IServerLauncher#isLaunched()} + * returns false, to call {@link IServerLauncher#launch(IProgressMonitor)}. + *

+ * This is called, by default, from the connect(...) methods of the subsystem. + */ + protected abstract void internalConnect(IProgressMonitor monitor) throws Exception; + + protected abstract void internalDisconnect(IProgressMonitor monitor) throws Exception; +} \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/ServerLauncher.java b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/subsystems/ServerLauncher.java similarity index 91% rename from rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/ServerLauncher.java rename to rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/subsystems/ServerLauncher.java index 6a30cdbddc8..451b6748bbe 100644 --- a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/ServerLauncher.java +++ b/rse/plugins/org.eclipse.rse.core/src/org/eclipse/rse/internal/core/subsystems/ServerLauncher.java @@ -11,16 +11,16 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ -package org.eclipse.rse.core.internal.subsystems; +package org.eclipse.rse.internal.core.subsystems; +import org.eclipse.rse.core.RSECorePlugin; import org.eclipse.rse.core.model.IPropertySet; import org.eclipse.rse.core.model.RSEModelObject; import org.eclipse.rse.core.model.RSEModelResources; import org.eclipse.rse.core.subsystems.IConnectorService; import org.eclipse.rse.core.subsystems.IServerLauncherProperties; -import org.eclipse.rse.ui.RSEUIPlugin; public abstract class ServerLauncher extends RSEModelObject implements IServerLauncherProperties @@ -101,7 +101,7 @@ public abstract class ServerLauncher extends RSEModelObject implements IServerLa public boolean commit() { - return RSEUIPlugin.getThePersistenceManager().commit(getConnectorService().getHost()); + return RSECorePlugin.getThePersistenceManager().commit(getConnectorService().getHost()); } diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.ftp/src/org/eclipse/rse/internal/subsystems/files/ftp/connectorservice/FTPConnectorService.java b/rse/plugins/org.eclipse.rse.subsystems.files.ftp/src/org/eclipse/rse/internal/subsystems/files/ftp/connectorservice/FTPConnectorService.java index 984060925c8..2425af630eb 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.ftp/src/org/eclipse/rse/internal/subsystems/files/ftp/connectorservice/FTPConnectorService.java +++ b/rse/plugins/org.eclipse.rse.subsystems.files.ftp/src/org/eclipse/rse/internal/subsystems/files/ftp/connectorservice/FTPConnectorService.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2006, 2007 IBM Corporation. All rights reserved. + * Copyright (c) 2006, 2007 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 @@ -14,6 +14,7 @@ * Javier Montalvo Orus (Symbian) - Bug 140348 - FTP did not use port number * Javier Montalvo Orus (Symbian) - Bug 161209 - Need a Log of ftp commands * Javier Montalvo Orus (Symbian) - Bug 169680 - [ftp] FTP files subsystem and service should use passive mode + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.internal.subsystems.files.ftp.connectorservice; @@ -103,26 +104,9 @@ public class FTPConnectorService extends AbstractConnectorService _ftpService.disconnect(); } - - public boolean hasRemoteServerLauncherProperties() - { - return false; - } - - public boolean supportsRemoteServerLaunching() - { - return false; - } - - public boolean isConnected() + public boolean isConnected() { return (_ftpService != null && _ftpService.isConnected()); } - public boolean supportsServerLaunchProperties() - { - return false; - } - - } \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/SystemConnectionForm.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/SystemConnectionForm.java index f20178d6df4..f1aaf0ebaa3 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/SystemConnectionForm.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/SystemConnectionForm.java @@ -14,6 +14,7 @@ * David Dykstal (IBM) - moved SystemPreferencesManager to a new package * - created and used RSEPreferencesManager * Uwe Stieber (Wind River) - bugfixing and reworked new connection wizard + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.ui; @@ -911,14 +912,14 @@ public class SystemConnectionForm implements Listener, IRSEUserIdConstants, Sele } // --------------------------------------------------- - // connection name: Don't set during context creation! + // connection name // --------------------------------------------------- - if (defaultConnectionName != null && contentsCreated) + if (defaultConnectionName != null) textConnectionName.setText(defaultConnectionName); textConnectionName.setTextLimit(connectionNameLength); // ----------- - // host name + // host name (address) // ----------- if (defaultHostName != null) { textHostName.setText(defaultHostName); diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/widgets/RemoteBaseServerLauncherForm.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/widgets/RemoteBaseServerLauncherForm.java index 7708d4c4bd8..1bcd8d85622 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/widgets/RemoteBaseServerLauncherForm.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/widgets/RemoteBaseServerLauncherForm.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2002, 2007 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 @@ -11,13 +11,13 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David Dykstal (IBM) - refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.ui.widgets; -import org.eclipse.rse.core.internal.subsystems.RemoteServerLauncherConstants; import org.eclipse.rse.core.subsystems.IServerLauncherProperties; +import org.eclipse.rse.core.subsystems.RemoteServerLauncherConstants; import org.eclipse.rse.core.subsystems.ServerLaunchType; import org.eclipse.rse.ui.RSEUIPlugin; import org.eclipse.rse.ui.SystemBaseForm; diff --git a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/AbstractConnectorService.java b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/AbstractConnectorService.java index 8378731b578..b062602a159 100644 --- a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/AbstractConnectorService.java +++ b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/AbstractConnectorService.java @@ -1,5 +1,5 @@ /******************************************************************************** - * Copyright (c) 2002, 2006 IBM Corporation. All rights reserved. + * Copyright (c) 2002, 2007 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 @@ -11,13 +11,12 @@ * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * * Contributors: - * {Name} (company) - description of contribution. + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.core.subsystems; import java.util.ArrayList; import java.util.List; -import java.util.Vector; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.rse.core.IRSEUserIdConstants; @@ -25,7 +24,6 @@ import org.eclipse.rse.core.PasswordPersistenceManager; import org.eclipse.rse.core.SystemBasePlugin; import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.ISystemRegistry; -import org.eclipse.rse.core.model.RSEModelObject; import org.eclipse.rse.core.model.SystemSignonInformation; import org.eclipse.rse.core.subsystems.util.ISubSystemConfigurationAdapter; import org.eclipse.rse.logging.Logger; @@ -75,41 +73,12 @@ import org.eclipse.ui.PlatformUI; * * @see org.eclipse.rse.core.subsystems.AbstractConnectorServiceManager */ -public abstract class AbstractConnectorService extends RSEModelObject implements IConnectorService, IRSEUserIdConstants +public abstract class AbstractConnectorService extends SuperAbstractConnectorService implements IRSEUserIdConstants { - private ISubSystem _primarySubSystem; - private List _registeredSubSystems; - private String _name, _description; - private int _port; private String _userId; - private boolean _usingSSL; - private IHost _host; - - /** - * The cached value of the '{@link #getRemoteServerLauncher() Remote Server Launcher}' containment reference. - * - * - * @see #getRemoteServerLauncher() - * @generated - * @ordered - */ - protected IServerLauncherProperties _remoteServerLauncherProperties = null; - - private transient SystemSignonInformation _passwordInfo; protected Shell shell; - private Vector commListeners = new Vector(5); - private IServerLauncher starter; - /** - * The result of calling launch in the server launcher object, in the connect method - */ - protected Object launchResult; - /** - * The result of calling connect in the server launcher object, in the connect method - */ - protected Object connectResult; - // dy: March 24, 2003 Added _suppressSignonPrompt flag to suppress prompting the // user to signon if they already cancelled signon. Then intent is to allows tools // writers to prevent multiple signon prompts during a "transaction" if the user cancel @@ -119,142 +88,10 @@ public abstract class AbstractConnectorService extends RSEModelObject implements public AbstractConnectorService(String name, String description, IHost host, int port) { - super(); - _name = name; - _description = description; - _port = port; - _host = host; - _registeredSubSystems = new ArrayList(); + super(name, description, host, port); } - /** - * Not implemented, you should override if possible.
- * Return the version, release, modification of the remote system, - * if connected, if applicable and if available. Else return null. It - * is up to each subsystem to decide how to interpret what is returned.
- * This is used to show the VRM in the property sheet, when the subsystem is selected. - *

- * Up to each implementer to decide if this will be cached. - *

- * Returns an empty string by default, override if possible - */ - public String getVersionReleaseModification() - { - return ""; //$NON-NLS-1$ - } - /** - * Not implemented, you should override if possible.
- * Return the home directory of the remote system for the current user, if available. - *

- * Up to each implementer to decide how to implement, and if this will be cached. - *

- * Returns an empty string by default, override if possible - */ - public String getHomeDirectory() - { - return ""; //$NON-NLS-1$ - } - /** - * Not implemented, you should override if possible.
- * Return the temp directory of the remote system for the current user, if available. - *

- * Up to each implementer to decide how to implement, and if this will be cached. - *

- * Returns an empty string by default, override if possible - */ - public String getTempDirectory() - { - return ""; //$NON-NLS-1$ - } - - /** - * Set the subsystem, when its not known at constructor time - */ - public void registerSubSystem(ISubSystem ss) - { - if (!_registeredSubSystems.contains(ss)) - { - _registeredSubSystems.add(ss); - } - } - - /** - * Removes the subsystem from teh list - * @param ss - */ - public void deregisterSubSystem(ISubSystem ss) - { - _registeredSubSystems.remove(ss); - } - - // ------------------ - // Utility methods... - // ------------------ - - final public ISubSystem[] getSubSystems() - { - return (ISubSystem[])_registeredSubSystems.toArray(new ISubSystem[_registeredSubSystems.size()]); - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#getPrimarySubSystem() - */ - final public ISubSystem getPrimarySubSystem() - { - if (_primarySubSystem == null) - { - if (_registeredSubSystems.size() == 0) - { - - } - else - { - ISubSystem ss = (ISubSystem)_registeredSubSystems.get(0); - _primarySubSystem = ss.getPrimarySubSystem(); - } - } - return _primarySubSystem; - } - - final public IHost getHost() - { - return _host; - } - - /** - * Useful utility method. Fully implemented, do not override.
- * Returns the system type for this connection:
getSubSystem().getSystemConnection().getSystemType() - */ - final public String getHostType() - { - return getHost().getSystemType(); - } - - /** - * - */ - final public String getName() - { - return _name; - } - - final public String getDescription() - { - return _description; - } - - /** - * Useful utility method. Fully implemented, do not override.
- * Returns the host name for the connection this system's subsystem is associated with:
- * getSubSystem().getSystemConnection().getHostName() - */ - final public String getHostName() - { - return getHost().getHostName(); - } - - /** * Useful utility method. Fully implemented, do not override.
* Returns the active userId if we are connected. @@ -302,13 +139,6 @@ public abstract class AbstractConnectorService extends RSEModelObject implements } } - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#setHost(org.eclipse.rse.model.IHost) - */ - final public void setHost(IHost host) { - _host = host; - } - /** * Useful utility method. Fully implemented, do not override.
* Clear internal userId cache. Called when user uses the property dialog to @@ -431,27 +261,6 @@ public abstract class AbstractConnectorService extends RSEModelObject implements return true; } - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#supportsRemoteServerLaunching() - */ - public boolean supportsRemoteServerLaunching() { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#hasRemoteServerLauncherProperties() - */ - public boolean hasRemoteServerLauncherProperties() { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#supportsServerLaunchProperties() - */ - public boolean supportsServerLaunchProperties() { - return false; - } - /** * Return true if this connector service can share it's uid and password * with other connector services in this host (connection). @@ -836,73 +645,30 @@ public abstract class AbstractConnectorService extends RSEModelObject implements intializeSubSystems(monitor); } - protected void intializeSubSystems(IProgressMonitor monitor) - { - for (int i = 0; i < _registeredSubSystems.size(); i++) - { - ISubSystem ss = (ISubSystem)_registeredSubSystems.get(i); - ss.initializeSubSystem(monitor); - } - } - - protected void unintializeSubSystems(IProgressMonitor monitor) - { - for (int i = 0; i < _registeredSubSystems.size(); i++) - { - ISubSystem ss = (ISubSystem)_registeredSubSystems.get(i); - ss.uninitializeSubSystem(monitor); - } - } - - /** - * You must override - * unless subsystem.getParentSubSystemConfiguration().supportsServerLaunchProperties - * returns true. - *

- * Attempt to connect to the remote system.
- * If the subsystem supports server launch, - * the default behavior is to get the remote server launcher by - * {@link #getRemoteServerLauncher()}, and if {@link IServerLauncher#isLaunched()} - * returns false, to call {@link IServerLauncher#launch(IProgressMonitor)}. - *

- * This is called, by default, from the connect(...) methods of the subsystem. - */ - protected void internalConnect(IProgressMonitor monitor) throws Exception - { - if (supportsServerLaunchProperties()) - { - starter = getRemoteServerLauncher(); - starter.setSignonInformation(getPasswordInformation()); - starter.setServerLauncherProperties(getRemoteServerLauncherProperties()); - launchResult = null; - if (!starter.isLaunched()) - { - try { - launchResult = starter.launch(monitor); - } catch (Exception exc) { - throw new java.lang.reflect.InvocationTargetException(exc); - } - } - connectResult = null; - try { - connectResult = starter.connect(monitor, getConnectPort()); - } catch (Exception exc) { - throw new java.lang.reflect.InvocationTargetException(exc); - } - } - } - /** - * Return the port to use for connecting to the remote server, once it is running. - * By default, this is the subsystem's port property, via {@link #getPort()}. - * Override if appropriate. - *
This is called by the default implementation of {@link #connect(IProgressMonitor)}, if - * subsystem.getParentSubSystemConfiguration().supportsServerLaunchProperties() is true. - */ - protected int getConnectPort() - { - return getPort(); - } - + // protected void internalConnect(IProgressMonitor monitor) throws Exception +// { +// if (supportsServerLaunchProperties()) +// { +// IServerLauncher starter = getRemoteServerLauncher(); +// starter.setSignonInformation(getPasswordInformation()); +// starter.setServerLauncherProperties(getRemoteServerLauncherProperties()); +// launchResult = null; +// if (!starter.isLaunched()) +// { +// try { +// launchResult = starter.launch(monitor); +// } catch (Exception exc) { +// throw new java.lang.reflect.InvocationTargetException(exc); +// } +// } +// connectResult = null; +// try { +// connectResult = starter.connect(monitor, getConnectPort()); +// } catch (Exception exc) { +// throw new java.lang.reflect.InvocationTargetException(exc); +// } +// } +// } /** * Disconnects from the remote system. *

@@ -925,109 +691,7 @@ public abstract class AbstractConnectorService extends RSEModelObject implements clearPasswordCache(); } - public void internalDisconnect(IProgressMonitor monitor) throws Exception - { - if (supportsServerLaunchProperties() &&(starter != null)) - { - try { - starter.disconnect(); - starter = null; // for now, to be safe. Maybe we could optimize. - } catch (Exception exc) { - throw new java.lang.reflect.InvocationTargetException(exc); - } - } - } - - - // ----------------------------------------------------- - // Methods that should be overridden by child classes... - // ----------------------------------------------------- - /** - * Return the remote server launcher, which implements IServerLauncher. - * This is called by the default implementation of connect() and disconnect(), if - * subsystem.getParentSubSystemConfiguration().supportsServerLaunchProperties returns true. - *

This returns null be default! - */ - public IServerLauncher getRemoteServerLauncher() - { - return null; - } - - /** - * Optionally override if you add any instance variables.
- * The following is called whenever a system is redefined or disconnected. - * Each subsystem needs to be informed so it can clear out any expansions, etc. - * By default it does nothing. Override if you have an internal object that must be nulled out. - */ - public void reset() - { - } - - - /** - * Fully implemented, no need to override.
- * @see IConnectorService#addCommunicationsListener(ICommunicationsListener) - */ - public void addCommunicationsListener(ICommunicationsListener listener) - { - if (!commListeners.contains(listener)) { - commListeners.add(listener); - } - } - - /** - * Fully implemented, no need to override.
- * @see IConnectorService#removeCommunicationsListener(ICommunicationsListener) - */ - public void removeCommunicationsListener(ICommunicationsListener listener) - { - commListeners.remove(listener); - } - - - /** - * Private - used internally.
- * Helper method for firing communication events - */ - protected void fireCommunicationsEvent(int eventType) - { - CommunicationsEvent e = new CommunicationsEvent(this, eventType); - - Object[] items = commListeners.toArray(); - - for (int loop=0; loop < items.length; loop++) { - ((ICommunicationsListener) items[loop]).communicationsStateChange(e); - } - - } - - /** - * Private - used internally.
- * Returns the count of active communication listeners (i.e. excludes - * passive listeners.) - */ - protected int getCommunicationListenerCount() - { - int count = 0; - for (int i = 0; i < commListeners.size(); i++) - { - if (!((ICommunicationsListener) commListeners.get(i)).isPassiveCommunicationsListener()) - { - count++; - } - } - - return count; - } - /** - * Private - used internally.
- */ - protected void clearCommunicationListeners() - { - commListeners.clear(); - } - - /** + /** * Returns the suppressSignonPrompt flag. If this is set to true then the user * will not be prompted to signon, instead an InterruptedException will be thrown * by the promptForPassword method. @@ -1056,129 +720,6 @@ public abstract class AbstractConnectorService extends RSEModelObject implements _suppressSignonPrompt = suppressSignonPrompt; } - // ------------------------- - // PRIVATE HELPER METHODS... - // ------------------------- -// /** -// * Call this method to identify specific server launch types that are not to be permitted. -// *

-// * You normally do not call this! Rather, your subsystem factory class will override -// * {@link org.eclipse.rse.core.subsystems.SubSystemConfiguration#supportsServerLaunchType(ServerLaunchType)}. -// * However, this method is needed by ISVs that re-use predefined subsystem factories, -// * and merely supply their own IConnectorService object via the "systemClass" attribute of the -// * subsystemConfigurations extension point. -// * -// * @see org.eclipse.rse.core.subsystems.ServerLaunchType -// */ -// protected void enableServerLaunchType(ISubSystem subsystem, ServerLaunchType serverLaunchType, boolean enable) -// { -// IServerLauncherProperties sl =getRemoteServerLauncherProperties(); -// if (sl instanceof RemoteServerLauncher) -// { -// RemoteServerLauncher isl = (RemoteServerLauncher)sl; -// isl.enableServerLaunchType(serverLaunchType, enable); -// } -// } - /** - * This methods returns the enablement state per server launch type. - * If {@link RemoteServerLauncher#enableServerLaunchType(ServerLaunchType, boolean)} has not been - * called for this server launch type, then it is enabled by default. - * @see org.eclipse.rse.core.subsystems.ServerLaunchType - */ - protected boolean isEnabledServerLaunchType(ISubSystem subsystem, ServerLaunchType serverLaunchType) - { - IServerLauncherProperties sl = getRemoteServerLauncherProperties(); - if (sl instanceof RemoteServerLauncher) - { - RemoteServerLauncher isl = (RemoteServerLauncher)sl; - return isl.isEnabledServerLaunchType(serverLaunchType); - } - else - return subsystem.getSubSystemConfiguration().supportsServerLaunchType(serverLaunchType); - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#notifyDisconnection() - */ - public void notifyDisconnection() - { - - // Fire comm event to signal state changed - if (!isConnected()) fireCommunicationsEvent(CommunicationsEvent.AFTER_DISCONNECT); - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#notifyConnection() - */ - public void notifyConnection() - { - if (isConnected()) fireCommunicationsEvent(CommunicationsEvent.AFTER_CONNECT); - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.IConnectorService#notifyError() - */ - public void notifyError() - { - fireCommunicationsEvent(CommunicationsEvent.CONNECTION_ERROR); - - } - - - public void setPort(int port) - { - if (port != _port) - { - _port = port; - setDirty(true); - } - } - - public int getPort() - { - return _port; - } - - public boolean isUsingSSL() - { - return _usingSSL; - } - - public void setIsUsingSSL(boolean flag) - { - if (_usingSSL != flag) - { - _usingSSL = flag; - setDirty(true); - } - } - - - public IServerLauncherProperties getRemoteServerLauncherProperties() - { - return _remoteServerLauncherProperties; - } - - - public void setRemoteServerLauncherProperties(IServerLauncherProperties newRemoteServerLauncher) - { - if (_remoteServerLauncherProperties != newRemoteServerLauncher) - { - _remoteServerLauncherProperties = newRemoteServerLauncher; - setDirty(true); - } - } - - public boolean hasRemoteSearchLauncherProperties() - { - return _remoteServerLauncherProperties != null; - } - - public boolean commit() - { - return RSEUIPlugin.getThePersistenceManager().commit(getHost()); - } - private void logException(Throwable t) { Logger log = LoggerFactory.getLogger(RSEUIPlugin.getDefault()); log.logError("Unexpected exception", t); //$NON-NLS-1$ diff --git a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/SubSystemConfiguration.java b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/SubSystemConfiguration.java index d3414b018b3..27e00f5dafc 100644 --- a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/SubSystemConfiguration.java +++ b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/SubSystemConfiguration.java @@ -12,6 +12,7 @@ * * Contributors: * David Dykstal (IBM) - 168870: moved SystemPreferencesManager to a new package + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies ********************************************************************************/ package org.eclipse.rse.core.subsystems; @@ -41,7 +42,6 @@ import org.eclipse.rse.core.filters.ISystemFilterPoolReferenceManager; import org.eclipse.rse.core.filters.ISystemFilterSavePolicies; import org.eclipse.rse.core.filters.ISystemFilterString; import org.eclipse.rse.core.filters.SystemFilterPoolManager; -import org.eclipse.rse.core.internal.subsystems.RemoteServerLauncherConstants; import org.eclipse.rse.core.internal.subsystems.SubSystemConfigurationProxy; import org.eclipse.rse.core.model.IHost; import org.eclipse.rse.core.model.ISystemModelChangeEvents; diff --git a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorService.java b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorService.java index 443929a65be..32f20a56c3c 100644 --- a/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorService.java +++ b/rse/tests/org.eclipse.rse.tests/src/org/eclipse/rse/tests/internal/testsubsystem/TestSubSystemConnectorService.java @@ -7,6 +7,7 @@ * * Contributors: * Tobias Schwarz (Wind River) - initial API and implementation + * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies *******************************************************************************/ package org.eclipse.rse.tests.internal.testsubsystem; @@ -40,7 +41,6 @@ public class TestSubSystemConnectorService extends AbstractConnectorService { * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#internalConnect(org.eclipse.core.runtime.IProgressMonitor) */ protected void internalConnect(IProgressMonitor monitor) throws Exception { - super.internalConnect(monitor); connected = true; } @@ -48,31 +48,9 @@ public class TestSubSystemConnectorService extends AbstractConnectorService { * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#internalDisconnect(org.eclipse.core.runtime.IProgressMonitor) */ public void internalDisconnect(IProgressMonitor monitor) throws Exception { - super.internalDisconnect(monitor); connected = false; } - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#supportsRemoteServerLaunching() - */ - public boolean supportsRemoteServerLaunching() { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#hasRemoteServerLauncherProperties() - */ - public boolean hasRemoteServerLauncherProperties() { - return false; - } - - /* (non-Javadoc) - * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#supportsServerLaunchProperties() - */ - public boolean supportsServerLaunchProperties() { - return false; - } - /* (non-Javadoc) * @see org.eclipse.rse.core.subsystems.AbstractConnectorService#supportsPassword() */