com.sshtools.common.ui.SshToolsConnectionProxyTab.java Source code

Java tutorial

Introduction

Here is the source code for com.sshtools.common.ui.SshToolsConnectionProxyTab.java

Source

/*
 *  SSHTools - Java SSH2 API
 *
 *  Copyright (C) 2002 Lee David Painter.
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Library General Public License
 *  as published by the Free Software Foundation; either version 2 of
 *  the License, or (at your option) any later version.
 *
 *  You may also distribute it and/or modify it under the terms of the
 *  Apache style J2SSH Software License. A copy of which should have
 *  been provided with the distribution.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  License document supplied with your distribution for more details.
 *
 */

package com.sshtools.common.ui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.sshtools.common.configuration.SshToolsConnectionProfile;

/**
 *
 *
 * @author $author$
 * @version $Revision: 1.1.1.1 $
 */
public class SshToolsConnectionProxyTab extends JPanel implements SshToolsConnectionTab {
    /**  */
    public final static String PROXY_ICON = "/com/sshtools/common/ui/proxy.png";

    /**  */
    protected JRadioButton noProxy = new JRadioButton("No proxy");

    /**  */
    protected JRadioButton httpProxy = new JRadioButton("HTTP");

    /**  */
    protected JRadioButton socks4Proxy = new JRadioButton("SOCKS 4");

    /**  */
    protected JRadioButton socks5Proxy = new JRadioButton("SOCKS 5");

    /**  */
    protected ButtonGroup group = new ButtonGroup();

    /**  */
    protected JPanel proxyframe = new JPanel(new GridBagLayout());

    /**  */
    protected JTextField username = new JTextField();

    /**  */
    protected JPasswordField password = new JPasswordField();

    /**  */
    protected JTextField proxy = new JTextField();

    /**  */
    protected NumericTextField port = new NumericTextField(new Integer(1), new Integer(65535));

    /**  */
    protected SshToolsConnectionProfile profile;

    /**  */
    protected Log log = LogFactory.getLog(SshToolsConnectionProxyTab.class);

    /**
     * Creates a new SshToolsConnectionProxyTab object.
     */
    public SshToolsConnectionProxyTab() {
        super();
        group.add(noProxy);
        group.add(httpProxy);
        group.add(socks4Proxy);
        group.add(socks5Proxy);

        ChangeListener listener = new ChangeListener() {
            public void stateChanged(ChangeEvent e) {
                if (noProxy.isSelected()) {
                    username.setEnabled(false);
                    password.setEnabled(false);
                    proxy.setEnabled(false);

                    //port.setEnabled(false);
                    port.setForeground(Color.white);
                } else {
                    username.setEnabled(true);
                    password.setEnabled(true);
                    proxy.setEnabled(true);

                    //port.setEnabled(true);
                    port.setForeground(Color.black);

                    if (httpProxy.isSelected()) {
                        port.setText("80");
                    } else {
                        port.setText("1080");
                    }
                }
            }
        };

        noProxy.getModel().addChangeListener(listener);
        httpProxy.getModel().addChangeListener(listener);
        socks4Proxy.getModel().addChangeListener(listener);
        socks5Proxy.getModel().addChangeListener(listener);

        //  Create the main connection details panel
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.NORTH;
        gbc.insets = new Insets(0, 2, 2, 2);
        gbc.weightx = 1.0;
        proxyframe.setBorder(BorderFactory.createTitledBorder("Connect using the following proxy"));

        //  No proxy label
        gbc.insets = new Insets(2, 10, 2, 2);
        UIUtil.jGridBagAdd(proxyframe, noProxy, gbc, GridBagConstraints.RELATIVE);

        // Socks 4 label
        gbc.insets = new Insets(2, 15, 2, 2);
        UIUtil.jGridBagAdd(proxyframe, socks4Proxy, gbc, GridBagConstraints.REMAINDER);

        //gbc.fill = GridBagConstraints.HORIZONTAL;
        // Http Proxy
        gbc.insets = new Insets(2, 10, 2, 2);
        UIUtil.jGridBagAdd(proxyframe, httpProxy, gbc, GridBagConstraints.RELATIVE);

        // Socks 5 label
        gbc.insets = new Insets(2, 15, 2, 2);
        UIUtil.jGridBagAdd(proxyframe, socks5Proxy, gbc, GridBagConstraints.REMAINDER);

        gbc.insets = new Insets(2, 10, 2, 10);

        JPanel connect = new JPanel(new GridBagLayout());
        connect.setBorder(BorderFactory.createTitledBorder("Proxy Details"));
        UIUtil.jGridBagAdd(connect, new JLabel("Host"), gbc, GridBagConstraints.REMAINDER);

        UIUtil.jGridBagAdd(connect, proxy, gbc, GridBagConstraints.REMAINDER);

        UIUtil.jGridBagAdd(connect, new JLabel("Port"), gbc, GridBagConstraints.REMAINDER);
        gbc.anchor = GridBagConstraints.WEST;
        gbc.fill = GridBagConstraints.NONE;

        UIUtil.jGridBagAdd(connect, port, gbc, GridBagConstraints.REMAINDER);
        gbc.fill = GridBagConstraints.HORIZONTAL;

        UIUtil.jGridBagAdd(connect, new JLabel("Username"), gbc, GridBagConstraints.REMAINDER);

        UIUtil.jGridBagAdd(connect, username, gbc, GridBagConstraints.REMAINDER);

        UIUtil.jGridBagAdd(connect, new JLabel("Password"), gbc, GridBagConstraints.REMAINDER);
        gbc.insets = new Insets(2, 10, 10, 10);
        UIUtil.jGridBagAdd(connect, password, gbc, GridBagConstraints.REMAINDER);

        JPanel main = new JPanel(new GridBagLayout());
        gbc.insets = new Insets(2, 2, 2, 2);
        UIUtil.jGridBagAdd(main, proxyframe, gbc, GridBagConstraints.REMAINDER);
        UIUtil.jGridBagAdd(main, connect, gbc, GridBagConstraints.REMAINDER);

        IconWrapperPanel iconProxyDetailsPanel = new IconWrapperPanel(new ResourceIcon(PROXY_ICON), main);
        noProxy.setSelected(true);

        //  This panel
        setLayout(new BorderLayout());
        setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
        gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.anchor = GridBagConstraints.NORTH;
        gbc.insets = new Insets(2, 2, 2, 2);
        gbc.weightx = 1.0;
        add(iconProxyDetailsPanel, BorderLayout.NORTH);
    }

    /**
     *
     *
     * @param profile
     */
    public void setConnectionProfile(SshToolsConnectionProfile profile) {
        this.profile = profile;

        if (profile.getTransportProvider() == SshToolsConnectionProfile.USE_HTTP_PROXY) {
            httpProxy.setSelected(true);
        } else if (profile.getTransportProvider() == SshToolsConnectionProfile.USE_SOCKS4_PROXY) {
            socks4Proxy.setSelected(true);
        } else if (profile.getTransportProvider() == SshToolsConnectionProfile.USE_SOCKS5_PROXY) {
            socks5Proxy.setSelected(true);
        }

        proxy.setText(profile.getProxyHost());

        if (profile.getProxyPort() > 0) {
            port.setValue(new Integer(profile.getProxyPort()));
        }

        username.setText(profile.getProxyUsername());
        password.setText(profile.getProxyPassword());
    }

    /**
     *
     *
     * @return
     */
    public SshToolsConnectionProfile getConnectionProfile() {
        return profile;
    }

    /**
     *
     *
     * @return
     */
    public String getTabContext() {
        return "Connection";
    }

    /**
     *
     *
     * @return
     */
    public Icon getTabIcon() {
        return null;
    }

    /**
     *
     *
     * @return
     */
    public String getTabTitle() {
        return "Proxy";
    }

    /**
     *
     *
     * @return
     */
    public String getTabToolTipText() {
        return "Configure the proxy connection.";
    }

    /**
     *
     *
     * @return
     */
    public int getTabMnemonic() {
        return 'p';
    }

    /**
     *
     *
     * @return
     */
    public Component getTabComponent() {
        return this;
    }

    /**
     *
     *
     * @return
     */
    public boolean validateTab() {
        return true;
    }

    /**
     *
     */
    public void applyTab() {
        if (httpProxy.isSelected()) {
            profile.setTransportProvider(SshToolsConnectionProfile.USE_HTTP_PROXY);
        } else if (socks4Proxy.isSelected()) {
            profile.setTransportProvider(SshToolsConnectionProfile.USE_SOCKS4_PROXY);
        } else if (socks5Proxy.isSelected()) {
            profile.setTransportProvider(SshToolsConnectionProfile.USE_SOCKS5_PROXY);
        } else {
            profile.setTransportProvider(SshToolsConnectionProfile.USE_STANDARD_SOCKET);
        }

        profile.setProxyHost(proxy.getText());
        profile.setProxyPort(port.getValue().intValue());
        profile.setProxyUsername(username.getText());
        profile.setProxyPassword(new String(password.getPassword()));
    }

    /**
     *
     */
    public void tabSelected() {
    }
}