17ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu/**
27ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu * Copyright (c) 2004-2011 QOS.ch
3f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * All rights reserved.
47ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
5f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * Permission is hereby granted, free  of charge, to any person obtaining
6f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * a  copy  of this  software  and  associated  documentation files  (the
7f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * "Software"), to  deal in  the Software without  restriction, including
8f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * without limitation  the rights to  use, copy, modify,  merge, publish,
9f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * distribute,  sublicense, and/or sell  copies of  the Software,  and to
10f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * permit persons to whom the Software  is furnished to do so, subject to
11f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * the following conditions:
127ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
13f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * The  above  copyright  notice  and  this permission  notice  shall  be
14f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * included in all copies or substantial portions of the Software.
157ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
16f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
17f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
18f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
19f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
22f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
237ba0605dc97fb81bde8311510d27b3ccba170008Ceki Gulcu *
24f54c28dddc46da1ceb61f60d587113aa0bd79fe1Ceki Gulcu */
2508d80efdfe56b525934e979431fa86449cb7a44bCeki Gulcupackage org.slf4j.migrator.internal;
2693e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu
2793e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport java.awt.event.ActionEvent;
2893e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport java.awt.event.ActionListener;
2993e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport java.io.File;
3093e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport java.util.ArrayList;
3193e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport java.util.List;
3293e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu
3393e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.ButtonGroup;
3493e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.JButton;
3593e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.JCheckBox;
3693e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.JFileChooser;
3793e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.JFrame;
3893e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.JLabel;
3993e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.JOptionPane;
40d9f9dd9227026e8113fe5e3b4fa056e435e0fa7dCeki Gulcuimport javax.swing.JProgressBar;
4193e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.JRadioButton;
4293e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.JTextField;
4393e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.SpringLayout;
4493e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcuimport javax.swing.WindowConstants;
4593e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu
4608d80efdfe56b525934e979431fa86449cb7a44bCeki Gulcuimport org.slf4j.migrator.Constant;
4708d80efdfe56b525934e979431fa86449cb7a44bCeki Gulcuimport org.slf4j.migrator.helper.SpringLayoutHelper;
4893e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu
4993e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu/**
5093e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
5193e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu * Builder, which is free for non-commercial use. If Jigloo is being used
5293e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu * commercially (ie, by a corporation, company or business for any purpose
5393e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu * whatever) then you should purchase a license for each developer using Jigloo.
5493e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu * Please visit www.cloudgarden.com for details. Use of Jigloo implies
5593e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
5693e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
5793e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu * ANY CORPORATE OR COMMERCIAL PURPOSE.
5893e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu */
59d9f9dd9227026e8113fe5e3b4fa056e435e0fa7dCeki Gulcupublic class MigratorFrame extends JFrame implements ActionListener {
6031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private static final long serialVersionUID = 1L;
6131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
6231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private static final int BASIC_PADDING = 10;
6331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private static final int FOLDER_COLUMNS = 40;
6431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private static final String MIGRATE_COMMAND = "MIGRATE_COMMAND";
6531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private static final String BROWSE_COMMAND = "BROWSE_COMMAND";
6631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    static final String EXIT_COMMAND = "EXIT_COMMAND";
6731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
6831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    static final int X_SIZE = 700;
6931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    static final int Y_SIZE = 400;
7031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
7131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private SpringLayout layoutManager = new SpringLayout();
7231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private SpringLayoutHelper slh = new SpringLayoutHelper(layoutManager, BASIC_PADDING);
7331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
7431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JLabel migrationLabel;
7531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
7631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JRadioButton radioLog4j;
7731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JRadioButton radioJCL;
7831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JRadioButton radioJUL;
7931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private ButtonGroup buttonGroup;
8031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
8131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JTextField folderTextField;
8231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JLabel warningLabel;
8331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    JButton migrateButton;
8431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JButton browseButton;
8531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JLabel folderLabel;
8631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
8731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JCheckBox awareCheckBox;
8831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JLabel awareLabel;
8931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
9031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    JLabel otherLabel;
9131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    JProgressBar progressBar;
9231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private JFileChooser fileChooser;
9331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
9431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public MigratorFrame() {
9531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        super();
9631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        initGUI();
9793e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu    }
9831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
9931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void initGUI() {
10031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        try {
10131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
10231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            getContentPane().setLayout(layoutManager);
10331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            this.setTitle("SLF4J migrator");
10431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
10531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            createComponents();
10631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            constrainAll();
10731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            addAllComponentsToContextPane();
10831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            pack();
10931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            this.setSize(700, 400);
11031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } catch (Exception e) {
11131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            e.printStackTrace();
112c5f9e2fcd9bcadb541d6f5bc601dfc298faac063Ceki Gulcu        }
11393e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu    }
114ef85615b647feea2efce398ae6e545199cf00282Ceki Gulcu
11531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createComponents() {
11631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createMigrationLabel();
11731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createRadioJCL();
11831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createRadioLog4j();
11931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createRadioJUL();
12031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createButtonGroup();
12131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createFolderLabel();
12231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createFolderTextField();
12331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createBrowseButton();
12431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createMigrateButton();
12531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createAwareCheckbox();
12631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createAwareLabel();
12731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createWarningLabel();
12831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createFileChooser();
12931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
13031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        otherLabel = new JLabel();
13131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        otherLabel.setText("");
13231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        createProgressBar();
13331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
13431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
13531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
13631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    /**
13731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     *
13831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu     */
13931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void constrainAll() {
14031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
14131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        // contrain migration label
14231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        layoutManager.putConstraint(SpringLayout.WEST, migrationLabel, BASIC_PADDING, SpringLayout.EAST, this);
14331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
14431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        layoutManager.putConstraint(SpringLayout.NORTH, migrationLabel, BASIC_PADDING, SpringLayout.NORTH, this);
14531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
14631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeToTheRight(migrationLabel, radioJCL, BASIC_PADDING, -BASIC_PADDING / 2);
14731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeBelow(radioJCL, radioLog4j, 0, 0);
14831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
14931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeBelow(radioLog4j, radioJUL, 0, 0);
15031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
15131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeBelow(migrationLabel, folderLabel, 0, BASIC_PADDING * 6);
15231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeToTheRight(folderLabel, folderTextField);
15331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeToTheRight(folderTextField, browseButton, BASIC_PADDING, -BASIC_PADDING / 2);
15431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
15531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeBelow(folderLabel, warningLabel, 0, BASIC_PADDING * 3);
15631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
15731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeBelow(warningLabel, awareCheckBox, 0, (int) (BASIC_PADDING * 1.5));
15831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeToTheRight(awareCheckBox, awareLabel);
15931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
16031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeBelow(awareCheckBox, migrateButton, 0, BASIC_PADDING * 3);
16131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
16231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeBelow(migrateButton, otherLabel, 0, BASIC_PADDING * 2);
16331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
16431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        slh.placeBelow(otherLabel, progressBar, 0, BASIC_PADDING);
16531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
16631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
16731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void addAllComponentsToContextPane() {
16831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(migrationLabel);
16931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(radioJCL);
17031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(radioLog4j);
17131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(radioJUL);
17231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
17331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(folderLabel);
17431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(folderTextField);
17531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(browseButton);
17631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(migrateButton);
17731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
17831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(awareCheckBox);
17931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(awareLabel);
18031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
18131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(warningLabel);
18231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
18331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(otherLabel);
18431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        getContentPane().add(progressBar);
18531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
18631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
18731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createButtonGroup() {
18831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        buttonGroup = new ButtonGroup();
18931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        buttonGroup.add(radioJCL);
19031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        buttonGroup.add(radioLog4j);
19131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        buttonGroup.add(radioJUL);
19231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
19331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
19431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createMigrationLabel() {
19531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        migrationLabel = new JLabel();
19631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        migrationLabel.setText("Migration Type");
19731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
19831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
19931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createRadioJCL() {
20031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioJCL = new JRadioButton();
20131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioJCL.setText("from Jakarta Commons Logging to SLF4J");
20231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioJCL.setToolTipText("Select this button if you wish to migrate a Java project using Jakarta Commons Logging to use SLF4J.");
20331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
20431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
20531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createRadioLog4j() {
20631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioLog4j = new JRadioButton();
20731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioLog4j.setText("from log4j to SLF4J ");
20831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioLog4j.setToolTipText("Select this button if you wish to migrate a Java project using log4j to use SLF4J.");
20931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
21031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
21131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createRadioJUL() {
21231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioJUL = new JRadioButton();
21331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioJUL.setText("from JUL to SLF4J ");
21431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioJUL.setToolTipText("Select this button if you wish to migrate a Java project using java.utl.logging (JUL) to use SLF4J.");
21531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
21631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
21731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createFolderLabel() {
21831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        folderLabel = new JLabel();
21931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        folderLabel.setText("Project Directory");
22093e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu    }
221ef85615b647feea2efce398ae6e545199cf00282Ceki Gulcu
22231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createFolderTextField() {
22331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        folderTextField = new JTextField();
22431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        folderTextField.setColumns(FOLDER_COLUMNS);
22531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
22693e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu
22731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createBrowseButton() {
22831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        browseButton = new JButton();
22931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        browseButton.setText("Browse");
23031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        browseButton.addActionListener(this);
23131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        browseButton.setActionCommand(BROWSE_COMMAND);
23231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        browseButton.setToolTipText("Click this button to browse the file systems on your computer.");
23393e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu    }
234ef85615b647feea2efce398ae6e545199cf00282Ceki Gulcu
23531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createAwareCheckbox() {
23631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        awareCheckBox = new JCheckBox();
23731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        awareCheckBox.setToolTipText("<html><p>Check this box of you understand that the migration tool<p>will <b>not</b> backup your Java source files.</html>");
23831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
239ef85615b647feea2efce398ae6e545199cf00282Ceki Gulcu
24031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createAwareLabel() {
24131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        awareLabel = new JLabel();
24231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        awareLabel.setText("<html>" + "<p>I am aware that this tool will directly modify all Java source files</p>"
24331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                        + "<p>in the selected folder without creating backup files.</p>" + "</html>");
24493e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu    }
245ef85615b647feea2efce398ae6e545199cf00282Ceki Gulcu
24631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createWarningLabel() {
24731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        warningLabel = new JLabel();
24831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        warningLabel.setText("<html>" + "<p><span color=\"red\">WARNING:</span> This SLF4J migration tool will directly modify all Java source files</p>"
24931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                        + "<p>in the selected project folder without creating a backup of the original files.</p>" + "</html>");
25093e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu    }
25131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
25231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createMigrateButton() {
25331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        migrateButton = new JButton();
25431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        migrateButton.setText("Migrate Project to SLF4J");
25531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        migrateButton.setToolTipText("Click this button to initiate migration of your project.");
25631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        migrateButton.addActionListener(this);
25731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        migrateButton.setActionCommand(MIGRATE_COMMAND);
25893e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu    }
259ef85615b647feea2efce398ae6e545199cf00282Ceki Gulcu
26031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createFileChooser() {
26131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        fileChooser = new JFileChooser();
26231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        fileChooser.setDialogTitle("Source folder selector");
26331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
26431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
265ef85615b647feea2efce398ae6e545199cf00282Ceki Gulcu
26631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    private void createProgressBar() {
26731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        progressBar = new JProgressBar(0, 1);
26831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        progressBar.setPreferredSize(new java.awt.Dimension((int) (X_SIZE * 0.8), 5));
26931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        progressBar.setVisible(false);
27093e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu    }
27131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
27231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void disableInput() {
27331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioJCL.setEnabled(false);
27431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        radioLog4j.setEnabled(false);
27531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
27631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        browseButton.setEnabled(false);
27731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
27831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        folderTextField.setEnabled(false);
27931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        awareCheckBox.setEnabled(false);
28031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        migrateButton.setText("Migration in progress");
28131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        migrateButton.setEnabled(false);
28231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
28331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
28431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
28531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    public void actionPerformed(ActionEvent e) {
28631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
28731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (MIGRATE_COMMAND.equals(e.getActionCommand())) {
28831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
28931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            List<String> errorList = doSanityAnalysis();
29031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            if (errorList.size() > 0) {
29131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                showDialogBox(errorList);
29231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            } else {
29331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
29431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                File projectFolder = new File(folderTextField.getText());
29531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                int conversionType;
29631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                if (radioJCL.isSelected()) {
29731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                    conversionType = Constant.JCL_TO_SLF4J;
29831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                } else if (radioLog4j.isSelected()) {
29931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                    conversionType = Constant.LOG4J_TO_SLF4J;
30031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                } else if (radioJUL.isSelected()) {
30131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                    conversionType = Constant.JUL_TO_SLF4J;
30231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                } else {
30331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                    // we cannot possibly reach here
30431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                    throw new IllegalStateException("One of JCL or log4j project must have been previously chosen.");
30531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                }
30631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                ConversionTask task = new ConversionTask(projectFolder, this, conversionType);
30731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu                task.launch();
30831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            }
30931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else if (BROWSE_COMMAND.equals(e.getActionCommand())) {
31031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            showFileChooser();
31131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else if (EXIT_COMMAND.equals(e.getActionCommand())) {
31231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            this.dispose();
31331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
31431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
31531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
31631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    void showFileChooser() {
31731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        int returnVal = fileChooser.showOpenDialog(this);
31831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (returnVal == JFileChooser.APPROVE_OPTION) {
31931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            File selectedFile = fileChooser.getSelectedFile();
32031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            folderTextField.setText(selectedFile.getAbsolutePath());
32131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
32231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
32331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
32431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    List<String> doSanityAnalysis() {
32531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
32631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        List<String> errorList = new ArrayList<String>();
32731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (!radioJCL.isSelected() && !radioLog4j.isSelected() && !radioJUL.isSelected()) {
32831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            errorList.add("Please select the migration type: JCL, log4j, or JUL to SLF4J.");
32931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
33031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
33131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        String folder = folderTextField.getText();
33231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
33331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (folder == null || folder.length() == 0) {
33431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            errorList.add("Please select the folder of the project to migrate");
33531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else if (!isDirectory(folder)) {
33631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            errorList.add("[" + folder + "] does not look like a valid folder");
33731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
33831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
33931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (!awareCheckBox.isSelected()) {
34031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            errorList.add("Cannot initiate migration unless you acknowledge<p>that files will be modified without creating backup files");
34131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
34231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        return errorList;
34331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
34431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
34531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    void showDialogBox(List<String> errorList) {
34631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        StringBuilder buf = new StringBuilder();
34731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        buf.append("<html>");
34831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        int i = 1;
34931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        for (String msg : errorList) {
35031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            buf.append("<p>");
35131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            buf.append(i);
35231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            buf.append(". ");
35331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            buf.append(msg);
35431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            buf.append("</p>");
35531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            i++;
35631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
35731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        buf.append("</html>");
35831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
35931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        JOptionPane.showMessageDialog(this, buf.toString(), "", JOptionPane.ERROR_MESSAGE);
36031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    }
36131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu
36231212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu    boolean isDirectory(String filename) {
36331212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (filename == null) {
36431212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return false;
36531212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
36631212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        File file = new File(filename);
36731212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        if (file.exists() && file.isDirectory()) {
36831212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return true;
36931212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        } else {
37031212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu            return false;
37131212435723e2dfd5d6716d1f6a7b0e66a1e6b38Ceki Gulcu        }
37293e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu    }
37393e9c733a5c00843909fc68c683fb3f2c9d741d0Ceki Gulcu}
374