/*******************************************************************************
* Copyright (c) 2013 Zend Technologies Ltd.
* 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:
* Zend Technologies Ltd. - initial API and implementation
*******************************************************************************/
package org.zend.php.zendserver.deployment.debug.ui.actions;
import java.lang.reflect.InvocationTargetException;
import java.text.MessageFormat;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.zend.core.notifications.NotificationManager;
import org.zend.core.notifications.ui.INotificationChangeListener;
import org.zend.php.zendserver.deployment.core.tunnel.SSHTunnel.State;
import org.zend.php.zendserver.deployment.core.tunnel.SSHTunnelConfiguration;
import org.zend.php.zendserver.deployment.core.tunnel.SSHTunnelManager;
import org.zend.php.zendserver.deployment.core.tunnel.TunnelException;
import org.zend.php.zendserver.deployment.debug.ui.Messages;
import org.zend.php.zendserver.monitor.core.Activator;
import com.jcraft.jsch.JSchException;
/**
* @author Wojciech Galanciak, 2013
*
*/
public abstract class AbstractTunnelHelper {
protected void openTunnel(final SSHTunnelConfiguration config) {
NotificationManager.registerProgress(Messages.OpenTunnelCommand_Title,
Messages.OpenTunnelCommand_Message,
new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException,
InterruptedException {
monitor.beginTask(Messages.OpenTunnelCommand_Message,
IProgressMonitor.UNKNOWN);
doOpenTunnel(config);
monitor.done();
}
}, false);
}
protected void openTunnel(final SSHTunnelConfiguration config,
final INotificationChangeListener listener) {
NotificationManager.registerProgress(Messages.OpenTunnelCommand_Title,
Messages.OpenTunnelCommand_Message,
new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException,
InterruptedException {
monitor.beginTask(Messages.OpenTunnelCommand_Message,
IProgressMonitor.UNKNOWN);
doOpenTunnel(config);
monitor.done();
}
}, false, listener);
}
protected void closeTunnel(final String host) {
NotificationManager.registerProgress(Messages.OpenTunnelCommand_Title,
"Closing SSH Tunnel...", new IRunnableWithProgress() {
public void run(IProgressMonitor monitor)
throws InvocationTargetException,
InterruptedException {
monitor.beginTask("Closing SSH Tunnel...",
IProgressMonitor.UNKNOWN);
SSHTunnelManager.getManager().disconnect(host);
monitor.done();
}
}, false);
}
private boolean doOpenTunnel(SSHTunnelConfiguration config) {
try {
State result = null;
if (config.isEnabled()
&& !SSHTunnelManager.getManager().isConnected(
config.getHost())) {
result = SSHTunnelManager.getManager().connect(config);
}
switch (result) {
case CONNECTED:
String message = MessageFormat.format(
Messages.OpenTunnelCommand_TunnelOpenedMessage,
config.getHost());
NotificationManager.registerInfo(
Messages.OpenTunnelCommand_OpenTunnelTitle, message,
4000);
break;
case CONNECTING:
message = MessageFormat.format(
Messages.OpenTunnelCommand_SuccessMessage,
config.getHost());
NotificationManager.registerInfo(
Messages.OpenTunnelCommand_OpenTunnelTitle, message,
4000);
break;
case NOT_SUPPORTED:
NotificationManager.registerWarning(
Messages.OpenTunnelCommand_OpenTunnelTitle,
Messages.OpenTunnelCommand_NotSupportedMessage, 4000);
break;
case ERROR:
message = MessageFormat.format(
Messages.DeploymentHandler_sshTunnelErrorTitle,
config.getHost());
NotificationManager.registerError(
Messages.OpenTunnelCommand_OpenTunnelTitle, message,
4000);
default:
break;
}
return true;
} catch (TunnelException e) {
Activator.log(e);
String message = e.getMessage();
NotificationManager.registerError(
Messages.OpenTunnelCommand_OpenTunnelTitle, message, 5000);
} catch (JSchException e) {
Activator.log(e);
String message = MessageFormat.format(
Messages.DeploymentHandler_sshTunnelErrorTitle,
config.getHost(), e.getMessage());
NotificationManager.registerError(
Messages.OpenTunnelCommand_OpenTunnelTitle, message, 5000);
}
return false;
}
}