Package com.tulskiy.musique.plugins.discogs.dialog

Source Code of com.tulskiy.musique.plugins.discogs.dialog.SettingsDialog

package com.tulskiy.musique.plugins.discogs.dialog;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Window;
import java.awt.Dialog.ModalityType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FilenameFilter;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import com.tulskiy.musique.gui.dialogs.TreeFileChooser;
import com.tulskiy.musique.plugins.discogs.DiscogsCaller;
import com.tulskiy.musique.plugins.discogs.DiscogsPlugin;
import com.tulskiy.musique.system.Application;

public class SettingsDialog extends JDialog {
 
  private final String CACHE_FILE_NAME_END_MASK = DiscogsPlugin.API_KEY + ".xml";

  private final JPanel contentPanel = new JPanel();
  private JTextField txtSystemTempFolder;
  private JTextField txtApplicationFolder;
  private JTextField txtCustomFolder;
 
  JCheckBox chckbxCacheenabled;
  JRadioButton rdbtnSystemTempFolder;
  JRadioButton rdbtnApplicationFolder;
  JRadioButton rdbtnCustomFolder;

  /**
   * Create the dialog.
   */
  public SettingsDialog(Window owner) {
        super(owner, ModalityType.APPLICATION_MODAL);

        setMinimumSize(new Dimension(500, 300));
    final FilenameFilter filter = new FilenameFilter() {
      @Override
      public boolean accept(File dir, String name) {
        return name.endsWith(CACHE_FILE_NAME_END_MASK);
      }
    };
   
    setTitle("Settings");
    setBounds(100, 100, 600, 300);
    getContentPane().setLayout(new BorderLayout());
    contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
    getContentPane().add(contentPanel, BorderLayout.CENTER);
    contentPanel.setLayout(new BorderLayout(0, 0));

    JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
    tabbedPane.setEnabled(true);
    contentPanel.add(tabbedPane, BorderLayout.CENTER);

    JPanel tabCache = new JPanel();
    tabbedPane.addTab("Cache", null, tabCache, null);
    tabCache.setLayout(new BorderLayout(0, 0));

    JPanel panelLocation = new JPanel();
    panelLocation.setToolTipText("Location where cache folder is.");
    panelLocation.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "Location", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(51, 51, 51)));
    tabCache.add(panelLocation, BorderLayout.CENTER);

    rdbtnSystemTempFolder = new JRadioButton("System temp folder");
    rdbtnSystemTempFolder.setToolTipText("Path to system temp files folder. Can't be edited.");
    rdbtnSystemTempFolder.setSelected(DiscogsPlugin.getCacheDirType() == 1);

    rdbtnApplicationFolder = new JRadioButton("Application folder");
    rdbtnApplicationFolder.setToolTipText("Path to application configuration files folder. Can't be edited.");
    rdbtnApplicationFolder.setSelected(DiscogsPlugin.getCacheDirType() == 2);

    rdbtnCustomFolder = new JRadioButton("Custom folder");
    rdbtnCustomFolder.setToolTipText("Path to any user chosen folder.");
    rdbtnCustomFolder.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent arg0) {
        txtCustomFolder.setEnabled(rdbtnCustomFolder.isSelected());
      }
    });
    rdbtnCustomFolder.setSelected(DiscogsPlugin.getCacheDirType() == 3);

    ButtonGroup group = new ButtonGroup();
      group.add(rdbtnSystemTempFolder);
      group.add(rdbtnApplicationFolder);
      group.add(rdbtnCustomFolder);
     
      txtSystemTempFolder = new JTextField();
      txtSystemTempFolder.setToolTipText("Path to system temp files folder. Can't be edited.");
      txtSystemTempFolder.setEnabled(false);
      txtSystemTempFolder.setColumns(10);
      txtSystemTempFolder.setText(DiscogsPlugin.DEFAULT_CACHE_ROOT_DIR);
     
      txtApplicationFolder = new JTextField();
      txtApplicationFolder.setToolTipText("Path to application configuration files folder. Can't be edited.");
      txtApplicationFolder.setEnabled(false);
      txtApplicationFolder.setColumns(10);
      txtApplicationFolder.setText(Application.getInstance().CONFIG_HOME.getPath());
     
      txtCustomFolder = new JTextField();
      txtCustomFolder.setToolTipText("Path to any user chosen folder.");
      txtCustomFolder.setMinimumSize(new Dimension(120, 19));
      txtCustomFolder.setEnabled(rdbtnCustomFolder.isSelected());
      txtCustomFolder.setColumns(10);
      txtCustomFolder.setText(DiscogsPlugin.getCacheRootDir());
     
      final JButton btnBrowse = new JButton("Browse...");
      btnBrowse.setToolTipText("Choose custom folder via File Chooser dialog.");
      btnBrowse.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
              TreeFileChooser fc = new TreeFileChooser(btnBrowse, "Open folder", false);
              File[] files = fc.showOpenDialog();
              if (files != null) {
                try {
            txtCustomFolder.setText(files[0].getCanonicalPath());
          } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }
              }
        }
      });

      GroupLayout gl_panelLocation = new GroupLayout(panelLocation);
      gl_panelLocation.setHorizontalGroup(
        gl_panelLocation.createParallelGroup(Alignment.LEADING)
          .addGroup(gl_panelLocation.createSequentialGroup()
            .addContainerGap()
            .addGroup(gl_panelLocation.createParallelGroup(Alignment.LEADING)
              .addComponent(rdbtnCustomFolder, GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE)
              .addComponent(rdbtnApplicationFolder, GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE)
              .addComponent(rdbtnSystemTempFolder, GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE))
            .addGroup(gl_panelLocation.createParallelGroup(Alignment.LEADING)
              .addGroup(gl_panelLocation.createSequentialGroup()
                .addGap(18)
                .addComponent(txtSystemTempFolder, GroupLayout.DEFAULT_SIZE, 368, Short.MAX_VALUE))
              .addGroup(gl_panelLocation.createSequentialGroup()
                .addGap(18)
                .addComponent(txtApplicationFolder, GroupLayout.DEFAULT_SIZE, 368, Short.MAX_VALUE))
              .addGroup(gl_panelLocation.createSequentialGroup()
                .addGap(18)
                .addComponent(txtCustomFolder, GroupLayout.DEFAULT_SIZE, 260, Short.MAX_VALUE)
                .addPreferredGap(ComponentPlacement.RELATED)
                .addComponent(btnBrowse)))
            .addContainerGap())
      );
      gl_panelLocation.setVerticalGroup(
        gl_panelLocation.createParallelGroup(Alignment.LEADING)
          .addGroup(gl_panelLocation.createSequentialGroup()
            .addGroup(gl_panelLocation.createParallelGroup(Alignment.BASELINE)
              .addComponent(rdbtnSystemTempFolder)
              .addComponent(txtSystemTempFolder, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(ComponentPlacement.UNRELATED)
            .addGroup(gl_panelLocation.createParallelGroup(Alignment.BASELINE)
              .addComponent(rdbtnApplicationFolder)
              .addComponent(txtApplicationFolder, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
            .addPreferredGap(ComponentPlacement.UNRELATED)
            .addGroup(gl_panelLocation.createParallelGroup(Alignment.BASELINE)
              .addComponent(rdbtnCustomFolder)
              .addComponent(btnBrowse)
              .addComponent(txtCustomFolder, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
            .addGap(135))
      );
      gl_panelLocation.setAutoCreateGaps(true);
      panelLocation.setLayout(gl_panelLocation);
     
      JPanel panelGeneral = new JPanel();
      panelGeneral.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "General", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(51, 51, 51)));
      tabCache.add(panelGeneral, BorderLayout.NORTH);

    chckbxCacheenabled = new JCheckBox("Cache query results");
    chckbxCacheenabled.setToolTipText("If checked, caching of Discogs query results is enabled. One file per particular artist or release.");
    chckbxCacheenabled.setSelected(DiscogsPlugin.isCacheEnabled());
   
    final JLabel lblCacheStats = new JLabel(getLabelStats(filter));
    lblCacheStats.setToolTipText("Number of files already presented in cache and total size of cache.");
    lblCacheStats.setHorizontalAlignment(SwingConstants.TRAILING);
    lblCacheStats.setPreferredSize(new Dimension(140, 15));
   
    JButton btnClearCache = new JButton("Clear cache");
    panelGeneral.setLayout(new BoxLayout(panelGeneral, BoxLayout.X_AXIS));
   
    Component horizontalStrut_5 = Box.createHorizontalStrut(15);
    panelGeneral.add(horizontalStrut_5);
    panelGeneral.add(chckbxCacheenabled);
   
    Component horizontalStrut_3 = Box.createHorizontalStrut(20);
    panelGeneral.add(horizontalStrut_3);
   
    Component horizontalGlue_1 = Box.createHorizontalGlue();
    panelGeneral.add(horizontalGlue_1);
    panelGeneral.add(lblCacheStats);
   
    Component horizontalStrut_1 = Box.createHorizontalStrut(20);
    panelGeneral.add(horizontalStrut_1);
    panelGeneral.add(btnClearCache);
   
    Component horizontalStrut_4 = Box.createHorizontalStrut(15);
    panelGeneral.add(horizontalStrut_4);
    btnClearCache.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        File cacheDir = new File(DiscogsPlugin.getCacheDir());
        File[] cacheFiles = cacheDir.listFiles(filter);
        if (cacheFiles != null) {
          for (File cacheFile : cacheFiles) {
            cacheFile.delete();
          }
          lblCacheStats.setText(getLabelStats(filter));
        }
      }
    });

    JPanel buttonPane = new JPanel();
    buttonPane.setPreferredSize(new Dimension(10, 50));
    getContentPane().add(buttonPane, BorderLayout.SOUTH);
    buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.X_AXIS));

    Component horizontalGlue = Box.createHorizontalGlue();
    buttonPane.add(horizontalGlue);

    JButton btnSave = new JButton("Save");
    btnSave.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
        int locationType;
        String location;

        if (rdbtnApplicationFolder.isSelected()) {
          locationType = 2;
          location = txtApplicationFolder.getText();
        }
        else if (rdbtnCustomFolder.isSelected()) {
          locationType = 3;
          location = txtCustomFolder.getText();
        }
        else {
          locationType = 1;
          location = txtSystemTempFolder.getText();
        }

        DiscogsPlugin.setCacheEnabled(chckbxCacheenabled.isSelected());
        DiscogsPlugin.setCacheDirType(locationType);
        DiscogsPlugin.setCacheRootDir(location);
       
        DiscogsCaller.updateCachingConfiguration();

        setVisible(false);
            dispose();
      }
    });
    btnSave.setPreferredSize(new Dimension(81, 0));
    buttonPane.add(btnSave);

    Component horizontalStrut = Box.createHorizontalStrut(20);
    horizontalStrut.setPreferredSize(new Dimension(10, 0));
    buttonPane.add(horizontalStrut);

    JButton btnCancel = new JButton("Cancel");
    btnCancel.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent arg0) {
          setVisible(false);
            dispose();
      }
    });
    btnCancel.setPreferredSize(new Dimension(81, 0));
    buttonPane.add(btnCancel);

    Component horizontalStrut_2 = Box.createHorizontalStrut(20);
    buttonPane.add(horizontalStrut_2);
  }
 
  private String getLabelStats(FilenameFilter filter) {
    return calculateStats(DiscogsPlugin.getCacheDir(), filter);
  }
 
  private String calculateStats(String s, FilenameFilter filter) {
    int totalAmount = 0;
    long totalSize = 0;

    File dir = new File(s);
    File[] files = dir.listFiles(filter);
    if (files != null) {
      for (File file : files) {
        totalAmount++;
        totalSize += file.length();
      }
    }
   
    return String.format("%.2f MB in %d file(s)", totalSize == 0 ? 0 : (double) totalSize / 1048576, totalAmount);
  }
}
TOP

Related Classes of com.tulskiy.musique.plugins.discogs.dialog.SettingsDialog

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.