Package com.pugh.sockso.gui

Source Code of com.pugh.sockso.gui.ForwardPortDialog

/*
* ForwardPortDialog.java
*
* Created on Jun 25, 2007, 9:54:35 PM
*
* A dialog for allowing the user to forward ports from UPNP enabled
* internet gateway devices
*
*/

package com.pugh.sockso.gui;

import com.pugh.sockso.UPNP;
import com.pugh.sockso.resources.Resources;
import com.pugh.sockso.web.Server;

import java.io.IOException;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JPanel;
import javax.swing.JDialog;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JList;
import javax.swing.DefaultListModel;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JOptionPane;
import javax.swing.border.EmptyBorder;
import javax.swing.JFrame;

import net.sbbi.upnp.impls.InternetGatewayDevice;

import org.apache.log4j.Logger;

public class ForwardPortDialog extends JDialog {

    private static Logger log = Logger.getLogger( ForwardPortDialog.class );
   
    private Server sv;
    private Resources r;
    private JButton nextButton = null;
    private JList deviceList = null;
    private DefaultListModel deviceListModel = null;
    private JLabel statusLabel = null;
   
    /**
     *  creates and shows the forward port wizard dialog modally
     *
     *  @param parent the parent frame
     *
     */
   
    public ForwardPortDialog( JFrame parent, Server sv, Resources r ) {
       
        super( parent, " Sockso - Internet Setup", true );

        this.sv = sv;
        this.r = r;

        // set up the dialog
        setDefaultCloseOperation( JDialog.DISPOSE_ON_CLOSE );
        setBounds( 30,30, 400,300 );
        setLocationRelativeTo( null );
        setResizable( false );

        // setup layout
        setLayout( new BorderLayout() );
        add( getMainPane(), BorderLayout.CENTER );
        add( getButtonPane(), BorderLayout.SOUTH );
        //pack();

        // probe for devices (don't hold up GUI)
        new Thread() {
            public void run() { loadDevices(); }
        }.start();

        // show!
        setVisible( true );
       
    }

    /**
     *  does a UPNP query to fetch the routers on the network and
     *  loads them into the main list component.
     *
     */
   
    private void loadDevices() {

        try {
           
            statusLabel.setText( "Probing for routers..." );
           
            InternetGatewayDevice[] devices = UPNP.getRouterDevices();
           
            if ( devices != null ) {
                for ( InternetGatewayDevice device : devices )
                    deviceListModel.addElement( device );
                statusLabel.setText( "Select a device" );
            }
           
            else statusLabel.setText( "Sorry, no devices found" );

        }
       
        catch ( IOException e ) {
            log.error( e.getMessage() );
        }

    }
   
    /**
     *  returns the main pane with the device list
     *
     *  @return the panel
     *
     */
   
    private JPanel getMainPane() {
       
        deviceListModel = new DefaultListModel();
        deviceList = new JList( deviceListModel );
        deviceList.setMinimumSize( new Dimension(400,300) );
       
        statusLabel = new JLabel( "Initializing..." );
        statusLabel.setBorder( new EmptyBorder(4,4,4,4) );
       
        JPanel p = new JPanel();
        p.setLayout( new BorderLayout() );
        p.add( new JScrollPane(deviceList), BorderLayout.CENTER );
        p.add( statusLabel, BorderLayout.SOUTH );
       
        return p;
       
    }
   
    /**
     *  the next button was clicked, see if a device has been selected, and if
     *  it has try to do some port forwarding.
     *
     */
   
    private void nextClicked() {
       
        Object item = deviceList.getSelectedValue();
       
        if ( item != null ) {

            boolean success = false;
           
            try {
                InternetGatewayDevice device = (InternetGatewayDevice) item;
                success = UPNP.forwardPort( device, sv.getPort() );
            }
            catch ( Exception e ) {}
           
            JOptionPane.showMessageDialog( this,
                success ? "Port forwarded successfully!" : "Ack... it didn't seem to work..." );
           
            close();

        }
       
        else JOptionPane.showMessageDialog( this, "You need to select a device first" );

    }
   
    /**
     *  the cancel button was clicked, close the window
     *
     */
   
    private void cancelClicked() {
        close();
    }
   
    /**
     *  close the window
     *
     */
   
    private void close() {
        setVisible( false );
        dispose();
    }
   
    /**
     *  creates and returns the button panel
     *
     *  @return the panel
     *
     */
   
    private JPanel getButtonPane() {
       
        JButton cancel = new JButton( "Cancel", new ImageIcon(r.getImage("icons/22x22/cancel.png")) );
        cancel.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent evt ) {
                ForwardPortDialog.this.cancelClicked();
            }
        });
       
        nextButton = new JButton( "Next", new ImageIcon(r.getImage("icons/22x22/ok.png")) );
        nextButton.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent evt ) {
                ForwardPortDialog.this.nextClicked();
            }
        });

        JPanel p = new JPanel();
        p.setLayout( new FlowLayout(FlowLayout.RIGHT) );
        p.add( cancel );
        p.add( nextButton );
        return p;
       
    }
   
}
TOP

Related Classes of com.pugh.sockso.gui.ForwardPortDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.