com.audiveris.installer.FolderSelector.java Source code

Java tutorial

Introduction

Here is the source code for com.audiveris.installer.FolderSelector.java

Source

//----------------------------------------------------------------------------//
//                                                                            //
//                        F o l d e r S e l e c t o r                         //
//                                                                            //
//----------------------------------------------------------------------------//
// <editor-fold defaultstate="collapsed" desc="hdr">                          //
//  Copyright  Herv Bitteur and others 2000-2013. All rights reserved.      //
//  This software is released under the GNU General Public License.           //
//  Goto http://kenai.com/projects/audiveris to report bugs or suggestions.   //
//----------------------------------------------------------------------------//
// </editor-fold>
package com.audiveris.installer;

import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * Class {@code FolderSelector} displays the default install folder,
 * and let the user choose another one, if any.
 *
 * NOTA: THIS CLASS IS NOT USED FOR THE TIME BEING
 * Since the notion of installation folder is not clear!
 * - With Java Web Start, appli "program data" is located in Java cache
 * - On Linux, appli "user config" and appli "user data" do not have the same
 * parent
 *
 * @author Herv Bitteur
 */
@Deprecated
public class FolderSelector implements ActionListener {
    //~ Static fields/initializers ---------------------------------------------

    /** Usual logger utility */
    private static final Logger logger = LoggerFactory.getLogger(FolderSelector.class);

    /** Environment descriptor. */
    private static final Descriptor descriptor = DescriptorFactory.getDescriptor();

    //~ Instance fields --------------------------------------------------------
    /** The containing bundle. */
    private final Bundle bundle;

    /** The swing component. */
    private JComponent component;

    /** Text field for folder path. */
    private JTextField path = new JTextField();

    //~ Constructors -----------------------------------------------------------
    //----------------//
    // FolderSelector //
    //----------------//
    /**
     * Creates a new FolderSelector object.
     */
    public FolderSelector(Bundle bundle) {
        this.bundle = bundle;

        component = defineLayout();

        ///////path.setText(descriptor.getInstallFolder().getAbsolutePath());
        path.addActionListener(this);
    }

    //~ Methods ----------------------------------------------------------------
    //-----------------//
    // actionPerformed //
    //-----------------//
    /**
     * Triggered from path JTextField.
     *
     * @param e the action event
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        logger.debug("Got event {}", e);
        checkFolder(new File(path.getText()));
    }

    //--------------//
    // getComponent //
    //--------------//
    /**
     * @return the component
     */
    public JComponent getComponent() {
        return component;
    }

    //-------------//
    // checkFolder //
    //-------------//
    /**
     * Make sure the provided candidate is OK
     *
     * @param file the candidate folder
     */
    private void checkFolder(File candidate) {
        try {
            if (!candidate.exists()) {
                // Make sure all directories are created
                if (candidate.mkdirs()) {
                    logger.info("Created folder {}", candidate.getAbsolutePath());
                }
            } else {
                if (!candidate.isDirectory()) {
                    throw new IllegalStateException("Not a directory");
                }
            }

            // All tests are OK
            path.setText(candidate.getAbsolutePath());
            ////////bundle.setInstallFolder(candidate);
        } catch (Exception ex) {
            if (Installer.hasUI()) {
                JOptionPane.showMessageDialog(Installer.getFrame(), "Invalid folder: " + ex, "Folder selection",
                        JOptionPane.WARNING_MESSAGE);
            }
        }
    }

    //--------------//
    // defineLayout //
    private JComponent defineLayout() {
        final JPanel comp = new JPanel();
        final FormLayout layout = new FormLayout("right:36dlu, $lcgap, fill:0:grow, $lcgap, 31dlu", "pref");
        final CellConstraints cst = new CellConstraints();
        final PanelBuilder builder = new PanelBuilder(layout, comp);

        // Label on left side
        builder.addROLabel("Folder", cst.xy(1, 1));

        // Path to folder
        builder.add(path, cst.xy(3, 1));

        // "Select" button on left side
        builder.add(new JButton(new BrowseAction()), cst.xy(5, 1));

        return comp;
    }

    //~ Inner Classes ----------------------------------------------------------
    //--------------//
    // BrowseAction //
    //--------------//
    private class BrowseAction extends AbstractAction {
        //~ Constructors -------------------------------------------------------

        public BrowseAction() {
            putValue(AbstractAction.NAME, "Select");
            putValue(AbstractAction.SHORT_DESCRIPTION, "Select another installation folder");
        }

        //~ Methods ------------------------------------------------------------
        @Override
        public void actionPerformed(ActionEvent e) {
            //            // We always launch browsing from default installation folder
            //            JFileChooser chooser = new JFileChooser(
            //                    descriptor.getInstallFolder());
            //            chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            //
            //            int opt = chooser.showDialog(
            //                    Installer.getFrame(),
            //                    "Select install folder");
            //
            //            if (opt == JFileChooser.APPROVE_OPTION) {
            //                checkFolder(chooser.getSelectedFile());
            //            }
        }
    }
}