tmf: Move plugins to their own sub-directory
[deliverable/tracecompass.git] / tmf / org.eclipse.tracecompass.tmf.remote.core / src / org / eclipse / tracecompass / tmf / remote / core / proxy / RemoteSystemProxy.java
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 (file)
index 0000000..685aaad
--- /dev/null
@@ -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;
+            }
+        }
+    }
+
+}
This page took 0.025772 seconds and 5 git commands to generate.