com.intuit.tank.proxy.settings.ui.ProxyConfigDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.intuit.tank.proxy.settings.ui.ProxyConfigDialog.java

Source

package com.intuit.tank.proxy.settings.ui;

/*
 * #%L
 * proxy-extension
 * %%
 * Copyright (C) 2011 - 2015 Intuit Inc.
 * %%
 * 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
 * #L%
 */

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.Set;

import javax.swing.Box;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JToolBar;

import org.apache.commons.lang.StringUtils;

import com.intuit.tank.proxy.config.CommonsProxyConfiguration;
import com.intuit.tank.proxy.config.ConfigInclusionExclusionRule;
import com.intuit.tank.proxy.config.MatchType;
import com.intuit.tank.proxy.config.ProxyConfiguration;
import com.intuit.tank.proxy.config.TransactionPart;

public class ProxyConfigDialog extends JDialog {

    private static final long serialVersionUID = 1L;
    private JToolBar toolbar;
    private ProxyConfigPanel proxyConfigPanel;
    private ConfigHandler configHandler = new ConfigHandler();

    public ProxyConfigDialog(JFrame parent) {
        super(parent, true);
        configHandler = new ConfigHandler();
        initialize();
    }

    private void initialize() {
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(getProxyConfigPanel(), BorderLayout.CENTER);
        getContentPane().add(getToolbar(), BorderLayout.NORTH);
        setPreferredSize(new Dimension(600, 300));
        setMinimumSize(new Dimension(600, 300));
    }

    private ProxyConfigPanel getProxyConfigPanel() {
        if (proxyConfigPanel == null) {
            proxyConfigPanel = new ProxyConfigPanel(configHandler, this);
        }
        return proxyConfigPanel;
    }

    public static void main(String[] args) {
        ProxyConfigDialog pcd = new ProxyConfigDialog(null);
        pcd.showDialog();
    }

    private JToolBar getToolbar() {
        if (toolbar == null) {
            toolbar = new JToolBar();
            JButton saveButton = new JButton("Save",
                    new ImageIcon(ProxyConfigDialog.class.getResource("/icons/16/save_as.png")));
            saveButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        saveConfig(false);
                    } catch (IOException e1) {
                        throw new IllegalArgumentException(e1);
                    }
                }
            });
            JButton saveasButton = new JButton("Save As...",
                    new ImageIcon(ProxyConfigDialog.class.getResource("/icons/16/save_as.png")));
            saveasButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    try {
                        saveConfig(true);
                    } catch (IOException e1) {
                        throw new IllegalArgumentException(e1);
                    }
                }
            });
            JButton openButton = new JButton("Open",
                    new ImageIcon(ProxyConfigDialog.class.getResource("/icons/16/open_folder.png")));
            openButton.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    openConfig();
                }
            });
            toolbar.add(Box.createHorizontalStrut(5));
            toolbar.add(openButton);
            toolbar.add(Box.createHorizontalStrut(5));
            toolbar.add(saveButton);
            toolbar.add(Box.createHorizontalStrut(5));
            toolbar.add(saveasButton);
        }

        return toolbar;
    }

    protected void openConfig() {
        JFileChooser fileChooser = new JFileChooser();
        File file = new File(".");
        fileChooser.setCurrentDirectory(file);
        fileChooser.setAcceptAllFileFilterUsed(false);
        fileChooser.setFileFilter(new XmlFileFilter());
        int showOpenDialog = fileChooser.showOpenDialog(this);

        if (showOpenDialog == JFileChooser.APPROVE_OPTION) {
            configHandler.setConfigFile(fileChooser.getSelectedFile().getAbsolutePath());
            getProxyConfigPanel().update();
        }
    }

    protected void saveConfig(boolean saveAs) throws IOException {

        int port = getProxyConfigPanel().getPort();
        boolean followRedirecs = getProxyConfigPanel().getFollowRedirects();
        String outputFile = getProxyConfigPanel().getOutputFileName();

        File file = new File(outputFile);

        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }

        if (file.isDirectory()) {
            file = new File(file, CommonsProxyConfiguration.SUGGESTED_CONFIG_NAME);
        } else if (!file.getName().toLowerCase().endsWith(".xml")) {
            String fileName = file.getName();
            if (StringUtils.isEmpty(file.getName())) {
                fileName = CommonsProxyConfiguration.SUGGESTED_CONFIG_NAME;
            } else {
                fileName = file.getName() + ".xml";
            }
            file = new File(file.getParentFile(), fileName);
        }
        if ((file.exists() && !file.canWrite()) || !file.getParentFile().canWrite()) {
            JOptionPane.showMessageDialog(this, "Cannot write to file - " + file.getCanonicalPath(), "Error",
                    JOptionPane.ERROR_MESSAGE);
            return;
        }

        outputFile = file.getCanonicalPath();

        Set<ConfigInclusionExclusionRule> inclusions = getProxyConfigPanel().getInclusionData();
        Set<ConfigInclusionExclusionRule> exclusions = getProxyConfigPanel().getExclusionData();
        Set<ConfigInclusionExclusionRule> bodyInclusions = getProxyConfigPanel().getBodyInclusionData();
        Set<ConfigInclusionExclusionRule> bodyExclusions = getProxyConfigPanel().getBodyExclusionData();
        String configFile = saveAs ? null : configHandler.getConfigFile();
        save(port, followRedirecs, outputFile, inclusions, exclusions, bodyInclusions, bodyExclusions, configFile);
    }

    public Set<ConfigInclusionExclusionRule> getExclusions() {
        return getProxyConfigPanel().getExclusionData();
    }

    public Set<ConfigInclusionExclusionRule> getInclusions() {
        return getProxyConfigPanel().getInclusionData();
    }

    private void save(int port, boolean followRedirecs, String outputFile,
            Set<ConfigInclusionExclusionRule> inclusions, Set<ConfigInclusionExclusionRule> exclusions,
            Set<ConfigInclusionExclusionRule> bodyInclusions, Set<ConfigInclusionExclusionRule> bodyExclusions,
            String configFileName) {
        String fileName = "";
        if (StringUtils.isEmpty(configFileName)) {
            JFileChooser fileChooser = new JFileChooser();
            File file = new File(".");
            fileChooser.setCurrentDirectory(file);
            fileChooser.setAcceptAllFileFilterUsed(false);
            fileChooser.setFileFilter(new XmlFileFilter());
            int showSaveDialog = fileChooser.showSaveDialog(this);
            if (showSaveDialog == JFileChooser.APPROVE_OPTION) {
                String selectedFile = fileChooser.getSelectedFile().getName();
                if (!selectedFile.endsWith(".xml")) {
                    selectedFile = selectedFile + ".xml";
                }
                fileName = fileChooser.getSelectedFile().getParent() + "/" + selectedFile;
                configHandler.setConfigFile(fileName);
            } else {
                return;
            }
        } else {
            fileName = configFileName;
        }
        CommonsProxyConfiguration.save(port, followRedirecs, outputFile, inclusions, exclusions, bodyInclusions,
                bodyExclusions, fileName);
        getProxyConfigPanel().update();
        configHandler.setConfigFile(fileName);
    }

    public void showDialog() {
        setDefaultCloseOperation(JDialog.HIDE_ON_CLOSE);
        setVisible(true);
    }

    public ProxyConfiguration getConfiguration() {
        return configHandler.getConfiguration();
    }

    public void addHostRule(String match, IncludeType include) {
        GeneralInclusionPanel rulePanel = proxyConfigPanel.getRulePanel(include);
        rulePanel.addRule(
                new ConfigInclusionExclusionRule(TransactionPart.request, "host", MatchType.equals, match));
    }

}