be.ac.ua.comp.scarletnebula.gui.windows.AddFirewallRuleWindow.java Source code

Java tutorial

Introduction

Here is the source code for be.ac.ua.comp.scarletnebula.gui.windows.AddFirewallRuleWindow.java

Source

/*
 * Copyright (C) 2011  Ives van der Flaas
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * 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
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package be.ac.ua.comp.scarletnebula.gui.windows;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collection;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import org.dasein.cloud.network.Firewall;
import org.dasein.cloud.network.Protocol;

import be.ac.ua.comp.scarletnebula.core.CloudProvider;
import be.ac.ua.comp.scarletnebula.gui.ButtonFactory;
import be.ac.ua.comp.scarletnebula.gui.InteractiveFirewallPanel;
import be.ac.ua.comp.scarletnebula.gui.inputverifiers.IpAddressVerifier;
import be.ac.ua.comp.scarletnebula.gui.inputverifiers.LoudInputVerifier;
import be.ac.ua.comp.scarletnebula.gui.inputverifiers.PortRangeInputVerifier;

import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;

public class AddFirewallRuleWindow extends JDialog {
    public interface AddFirewallRuleWindowClosedListener {
        public void addRuleWindowClosed(Firewall firewall, int beginPort, int endPort, Protocol protocol,
                String CIDR);
    };

    private final class OkActionListener implements ActionListener {
        @Override
        public void actionPerformed(final ActionEvent e) {
            final LoudInputVerifier inputVerifier = new IpAddressVerifier(ipField, "E.g. 84.5.40.160 or 0.0.0.0/0");
            ipField.setInputVerifier(inputVerifier);
            if (inputVerifier.shouldYieldFocus(ipField)
                    && portRangeField.getInputVerifier().shouldYieldFocus(portRangeField)) {
                final InteractiveFirewallPanel.PortRange range = new InteractiveFirewallPanel.PortRange(
                        portRangeField.getText());

                for (final AddFirewallRuleWindowClosedListener listener : listeners) {
                    listener.addRuleWindowClosed(firewall, range.startPort, range.endPort,
                            Protocol.valueOf((String) protocolDropdown.getSelectedItem()), ipField.getText());
                }

                dispose();
            }
        }
    }

    private final class CancelActionListener implements ActionListener {
        @Override
        public void actionPerformed(final ActionEvent e) {
            dispose();
        }
    }

    private static final long serialVersionUID = 1L;
    private final Collection<AddFirewallRuleWindowClosedListener> listeners = new ArrayList<AddFirewallRuleWindowClosedListener>();
    private final JTextField portRangeField = new JTextField("22");
    private final JComboBox protocolDropdown = new JComboBox(new Object[] { "TCP", "UDP", "ICMP" });
    private final JTextField ipField = new JTextField("0.0.0.0/0");
    private final Firewall firewall;

    public AddFirewallRuleWindow(final JDialog parent, final CloudProvider provider, final Firewall firewall) {
        super(parent, "Add Rule", true);
        this.firewall = firewall;
        setLayout(new BorderLayout());
        setSize(400, 250);
        setLocationRelativeTo(null);
        setLocationByPlatform(true);

        final FormLayout layout = new FormLayout("right:max(40dlu;p), 4dlu, min(50dlu;p):grow", "");
        // add rows dynamically
        final DefaultFormBuilder builder = new DefaultFormBuilder(layout);
        builder.setDefaultDialogBorder();
        builder.appendSeparator("New Rule");
        portRangeField.setInputVerifier(new PortRangeInputVerifier(portRangeField));
        builder.append("Port range", portRangeField);

        builder.append("Protocol", protocolDropdown);

        builder.append("IP", ipField);

        final JPanel mainPanel = new JPanel(new BorderLayout());
        mainPanel.add(builder.getPanel(), BorderLayout.CENTER);
        final JLabel bottomLabel = new JLabel(
                "<html><font size=\"6pt\" color=\"#657383\">Note: Use the IP address 0.0.0.0/0 to allow "
                        + "traffic from and to everyone. </font></html>");
        bottomLabel.setBorder(BorderFactory.createEmptyBorder(0, 10, 10, 10));
        mainPanel.add(bottomLabel, BorderLayout.PAGE_END);

        add(mainPanel, BorderLayout.CENTER);

        final JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.LINE_AXIS));
        buttonPanel.add(Box.createHorizontalGlue());
        final JButton cancelButton = ButtonFactory.createCancelButton();
        cancelButton.addActionListener(new CancelActionListener());
        buttonPanel.add(cancelButton);
        buttonPanel.add(Box.createHorizontalStrut(5));
        final JButton okButton = ButtonFactory.createOkButton();
        okButton.addActionListener(new OkActionListener());
        buttonPanel.add(okButton);
        buttonPanel.add(Box.createHorizontalStrut(10));
        buttonPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 10, 0));
        add(buttonPanel, BorderLayout.PAGE_END);

    }

    public void addAddFirewallRuleWindowClosed(final AddFirewallRuleWindowClosedListener listener) {
        listeners.add(listener);
    }
}