Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'tmf/org.eclipse.tracecompass.tmf.remote.core/src/org/eclipse/tracecompass/tmf/remote/core/proxy/RemoteSystemProxy.java')
-rw-r--r--tmf/org.eclipse.tracecompass.tmf.remote.core/src/org/eclipse/tracecompass/tmf/remote/core/proxy/RemoteSystemProxy.java139
1 files changed, 139 insertions, 0 deletions
diff --git a/tmf/org.eclipse.tracecompass.tmf.remote.core/src/org/eclipse/tracecompass/tmf/remote/core/proxy/RemoteSystemProxy.java b/tmf/org.eclipse.tracecompass.tmf.remote.core/src/org/eclipse/tracecompass/tmf/remote/core/proxy/RemoteSystemProxy.java
new file mode 100644
index 0000000000..685aaad0dc
--- /dev/null
+++ b/tmf/org.eclipse.tracecompass.tmf.remote.core/src/org/eclipse/tracecompass/tmf/remote/core/proxy/RemoteSystemProxy.java
@@ -0,0 +1,139 @@
+/**********************************************************************
+ * Copyright (c) 2012, 2015 Ericsson
+ *
+ * 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
+ *
+ * Contributors:
+ * Bernd Hufmann - Initial API and implementation
+ * Markus Schorn - Bug 448058: Use org.eclipse.remote in favor of RSE
+ * Bernd Hufmann - Update to org.eclipse.remote API 2.0
+ **********************************************************************/
+package org.eclipse.tracecompass.tmf.remote.core.proxy;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jdt.annotation.NonNullByDefault;
+import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.remote.core.IRemoteConnection;
+import org.eclipse.remote.core.IRemoteConnectionChangeListener;
+import org.eclipse.remote.core.RemoteConnectionChangeEvent;
+import org.eclipse.remote.core.exception.RemoteConnectionException;
+import org.eclipse.tracecompass.internal.tmf.remote.core.shell.CommandShell;
+import org.eclipse.tracecompass.tmf.remote.core.shell.ICommandShell;
+
+/**
+ * <p>
+ * RemoteSystemProxy implementation.
+ * </p>
+ *
+ * @author Bernd Hufmann
+ */
+@NonNullByDefault
+public class RemoteSystemProxy implements IRemoteConnectionChangeListener {
+
+ // ------------------------------------------------------------------------
+ // Attributes
+ // ------------------------------------------------------------------------
+ private final IRemoteConnection fHost;
+ private boolean fExplicitConnect;
+
+ // ------------------------------------------------------------------------
+ // Constructors
+ // ------------------------------------------------------------------------
+
+ /**
+ * Constructor
+ *
+ * @param host
+ * The host of this proxy
+ */
+ public RemoteSystemProxy(IRemoteConnection host) {
+ fHost = host;
+ fHost.addConnectionChangeListener(this);
+ }
+
+ /**
+ * Returns the connection instance.
+ *
+ * @return the @link{IRemoteConnection} instance
+ */
+ public IRemoteConnection getRemoteConnection() {
+ return fHost;
+ }
+
+ // ------------------------------------------------------------------------
+ // Operations
+ // ------------------------------------------------------------------------
+
+ /**
+ * Connects the remote connection.
+ *
+ * @param monitor
+ * a monitor to report progress.
+ *
+ * @throws ExecutionException
+ * If the connection fails
+ */
+ public void connect(IProgressMonitor monitor) throws ExecutionException {
+ try {
+ if (!fHost.isOpen()) {
+ // Note that open() may trigger a RemoteConnectionChangeEvent
+ fHost.open(monitor);
+ fExplicitConnect = true;
+ }
+ } catch (RemoteConnectionException e) {
+ throw new ExecutionException("Cannot connect " + fHost.getName(), e); //$NON-NLS-1$
+ }
+ }
+
+ /**
+ * Disconnects from the remote connection, may close the connection.
+ */
+ public void disconnect() {
+ if (fExplicitConnect) {
+ fHost.close();
+ fExplicitConnect = false;
+ }
+ }
+
+ /**
+ * Disposes the proxy, may close the connection.
+ */
+ public void dispose() {
+ fHost.removeConnectionChangeListener(this);
+ disconnect();
+ }
+
+ /**
+ * Creates a command shell.
+ *
+ * @return the command shell implementation
+ */
+ public ICommandShell createCommandShell() {
+ return new CommandShell(fHost);
+ }
+
+ /**
+ * Returns the connection state.
+ *
+ * @return whether the remote host is currently connected.
+ */
+ public boolean isConnected() {
+ return fHost.isOpen();
+ }
+
+ @Override
+ public void connectionChanged(@Nullable RemoteConnectionChangeEvent event) {
+ if (event != null) {
+ int type = event.getType();
+ if (type == RemoteConnectionChangeEvent.CONNECTION_ABORTED ||
+ type == RemoteConnectionChangeEvent.CONNECTION_CLOSED) {
+ fExplicitConnect = false;
+ }
+ }
+ }
+
+}

Back to the top