Package com.pugh.sockso.gui.controls

Source Code of com.pugh.sockso.gui.controls.RescanButton

package com.pugh.sockso.gui.controls;

import com.pugh.sockso.db.Database;
import com.pugh.sockso.gui.AppFrame;
import com.pugh.sockso.music.Collection;
import com.pugh.sockso.music.CollectionManager;
import com.pugh.sockso.resources.Locale;
import com.pugh.sockso.resources.Resources;

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

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;

import org.apache.log4j.Logger;

import com.google.inject.Inject;

/**
* Button for handling rescanning the collection.  When clicked it prompts the
* user to either scan the entire collection, or just a particular folder.
*
*/
public class RescanButton extends JButton implements ActionListener {
   
    private final static Logger log = Logger.getLogger( RescanButton.class );
   
    private final CollectionManager cm;
    private final Resources r;
    private final JFrame parentFrame;
    private final Database db;
    private final Locale locale;
   
    private JPopupMenu menu;
   
    /**
     *  Create a new rescan button
     *
     *  @param r
     *  @param cm
     *
     */

    @Inject
    public RescanButton( final Resources r, final CollectionManager cm,
                         final AppFrame parentFrame, final Database db, final Locale locale ) {
       
        super(
            locale.getString("gui.label.rescanCollection"),
            new ImageIcon( r.getImage("icons/16x16/rescan.png") )
        );

        this.r = r;
        this.cm = cm;
        this.parentFrame = parentFrame;
        this.db = db;
        this.locale = locale;
       
    }
   
    /**
     *  Initialise the button
     *
     */
   
    public void init() {

        addActionListener( this );
       
        initMenu();

    }
   
    /**
     *  Initialise the popup menu used to select what to scan
     *
     */
   
    protected void initMenu() {

        menu = new JPopupMenu();
       
        final JMenuItem entireCollection = new JMenuItem( locale.getString("gui.label.scanEntireCollection") );
        entireCollection.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent evt ) {
                scanEntireCollection();
            }
        });

        final JMenuItem selectFolder = new JMenuItem( locale.getString("gui.label.scanSelectFolder") );
        selectFolder.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent evt ) {
                scanSelectFolder();
            }
        });

        final JMenuItem rescanTags = new JMenuItem( locale.getString("gui.label.rescanTags") );
        rescanTags.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent evt ) {
                rescanTags();
            }
        });

        menu.add( entireCollection );
        menu.add( selectFolder );
        menu.add( rescanTags );

    }
   
    /**
     *  Button has been clicked, show menu for selecting the scan type
     *
     *  @param evt
     *
     */
   
    public void actionPerformed( final ActionEvent evt ) {
       
        menu.show(
            (JButton) evt.getSource(),
            0,
            this.getHeight()
        );
       
    }
   
    /**
     *  Start a scan on the entire collection
     *
     */
   
    protected void scanEntireCollection() {

        new Thread() {
           
            @Override
            public void run() { cm.checkCollection(); }
           
        }.start();

    }
   
    /**
     *  Allow the user to select a folder to scan
     *
     */
   
    protected void scanSelectFolder() {
       
        final File folderToScan = getFolderToScan();
       
        if ( folderToScan != null ) {

            try {
           
                final Collection collection = Collection.findByPath( db, folderToScan.getAbsolutePath() );
               
                if ( collection != null ) {
                    new Thread() {
                        @Override
                        public void run() {
                            cm.scanDirectory(
                                collection.getId(),
                                folderToScan
                            );
                        }
                    }.start();
                }
               
                else {
                    JOptionPane.showMessageDialog(
                        parentFrame,
                        locale.getString("gui.error.directoryNotInCollection"),
                        "Error scanning folder",
                        JOptionPane.ERROR_MESSAGE
                    );
                }
           
            }
           
            catch ( final SQLException e ) {
                log.debug( e.getMessage() );
            }
           
        }
       
    }

    /**
     *  Start a rescan on the entire collection
     *
     */

    protected void rescanTags() {

        new Thread() {

            @Override
            public void run() { cm.rescanTags(); }

        }.start();

    }

    /**
     *  Prompts the user to select a folder to scan and returns the one they
     *  select, or null if then cancel the dialog
     *
     *  @return
     *
     */
   
    protected File getFolderToScan() {
       
        final JFileChooser chooser = new JFileChooser();
       
        chooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY );
       
        return chooser.showOpenDialog(parentFrame) == JFileChooser.APPROVE_OPTION
            ? chooser.getSelectedFile()
            : null;

    }

}
TOP

Related Classes of com.pugh.sockso.gui.controls.RescanButton

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.