package com.compomics.util.gui.protein;
import com.compomics.util.Util;
import com.compomics.util.preferences.UtilitiesUserPreferences;
import java.io.File;
import java.util.ArrayList;
import javax.swing.JOptionPane;
/**
* A dialog for advanced database settings.
*
* @author Marc Vaudel
*/
public class AdvancedProteinDatabaseDialog extends javax.swing.JDialog {
/**
* The database folder.
*/
private File dbFolder;
/**
* The user preferences.
*/
private UtilitiesUserPreferences userPreferences;
/**
* Creates a new AdvancedProteinDatabaseDialog.
*
* @param parent the parent frame
*/
public AdvancedProteinDatabaseDialog(java.awt.Frame parent) {
super(parent, true);
initComponents();
initGUI();
setLocationRelativeTo(parent);
setVisible(true);
}
/**
* Initiates the GUI.
*/
private void initGUI() {
userPreferences = UtilitiesUserPreferences.loadUserPreferences();
dbFolder = userPreferences.getProteinTreeFolder();
updateText();
}
/**
* Updates the text in the text field.
*/
private void updateText() {
if (dbFolder != null) {
databasesFolderTxt.setText(dbFolder.getAbsolutePath());
}
fastaSuffixTxt.setText(userPreferences.getTargetDecoyFileNameSuffix());
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
backgroundPanel = new javax.swing.JPanel();
folderPanel = new javax.swing.JPanel();
clearDatabaseFolderButton = new javax.swing.JButton();
browseDatabaseFolderButton = new javax.swing.JButton();
databasesFolderTxt = new javax.swing.JTextField();
okButton = new javax.swing.JButton();
cancelButton = new javax.swing.JButton();
fileProcessingPanel = new javax.swing.JPanel();
fastaSuffixTxt = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Database Details");
backgroundPanel.setBackground(new java.awt.Color(230, 230, 230));
folderPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Databases Folder"));
folderPanel.setOpaque(false);
clearDatabaseFolderButton.setText("Clear");
clearDatabaseFolderButton.setPreferredSize(new java.awt.Dimension(75, 25));
clearDatabaseFolderButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
clearDatabaseFolderButtonActionPerformed(evt);
}
});
browseDatabaseFolderButton.setText("Browse");
browseDatabaseFolderButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
browseDatabaseFolderButtonActionPerformed(evt);
}
});
databasesFolderTxt.setEditable(false);
javax.swing.GroupLayout folderPanelLayout = new javax.swing.GroupLayout(folderPanel);
folderPanel.setLayout(folderPanelLayout);
folderPanelLayout.setHorizontalGroup(
folderPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, folderPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(databasesFolderTxt, javax.swing.GroupLayout.DEFAULT_SIZE, 432, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(browseDatabaseFolderButton)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(clearDatabaseFolderButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
folderPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {browseDatabaseFolderButton, clearDatabaseFolderButton});
folderPanelLayout.setVerticalGroup(
folderPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(folderPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(folderPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(clearDatabaseFolderButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(browseDatabaseFolderButton)
.addComponent(databasesFolderTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
folderPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {browseDatabaseFolderButton, clearDatabaseFolderButton});
okButton.setText("OK");
okButton.setPreferredSize(new java.awt.Dimension(75, 25));
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
cancelButton.setText("Cancel");
cancelButton.setPreferredSize(new java.awt.Dimension(75, 25));
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
fileProcessingPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("FASTA File Decoy Suffix"));
fileProcessingPanel.setOpaque(false);
fastaSuffixTxt.setHorizontalAlignment(javax.swing.JTextField.CENTER);
javax.swing.GroupLayout fileProcessingPanelLayout = new javax.swing.GroupLayout(fileProcessingPanel);
fileProcessingPanel.setLayout(fileProcessingPanelLayout);
fileProcessingPanelLayout.setHorizontalGroup(
fileProcessingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, fileProcessingPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(fastaSuffixTxt)
.addContainerGap())
);
fileProcessingPanelLayout.setVerticalGroup(
fileProcessingPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(fileProcessingPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(fastaSuffixTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout backgroundPanelLayout = new javax.swing.GroupLayout(backgroundPanel);
backgroundPanel.setLayout(backgroundPanelLayout);
backgroundPanelLayout.setHorizontalGroup(
backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(backgroundPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(folderPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, backgroundPanelLayout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(fileProcessingPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
backgroundPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {cancelButton, okButton});
backgroundPanelLayout.setVerticalGroup(
backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(backgroundPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(folderPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(fileProcessingPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(backgroundPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(backgroundPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
/**
* Save the settings and close the dialog.
*
* @param evt
*/
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
UtilitiesUserPreferences tempUserPreferences = UtilitiesUserPreferences.loadUserPreferences();
tempUserPreferences.setProteinTreeFolder(dbFolder);
tempUserPreferences.setTargetDecoyFileNameSuffix(fastaSuffixTxt.getText().trim());
UtilitiesUserPreferences.saveUserPreferences(tempUserPreferences);
dispose();
}//GEN-LAST:event_okButtonActionPerformed
/**
* Close the dialog without saving the settings.
*
* @param evt
*/
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
dispose();
}//GEN-LAST:event_cancelButtonActionPerformed
/**
* Open a file chooser where the user can select where to save the protein
* tree.
*
* @param evt
*/
private void browseDatabaseFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseDatabaseFolderButtonActionPerformed
dbFolder = Util.getUserSelectedFolder(this, "Please select new folder", dbFolder.getAbsolutePath(), "Databases Folder", "OK", false);
updateText();
}//GEN-LAST:event_browseDatabaseFolderButtonActionPerformed
/**
* Clear the database folder.
*
* @param evt
*/
private void clearDatabaseFolderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clearDatabaseFolderButtonActionPerformed
int outcome = JOptionPane.showConfirmDialog(this, "This operation cannot be undone, continue?", "Warning", JOptionPane.WARNING_MESSAGE);
if (outcome == JOptionPane.YES_OPTION) {
ArrayList<String> notDeleted = new ArrayList<String>();
for (File file : dbFolder.listFiles()) {
boolean success = false;
try {
success = Util.deleteDir(file);
} catch (Exception e) {
e.printStackTrace();
}
if (!success) {
notDeleted.add(file.getName());
}
}
if (!notDeleted.isEmpty()) {
String report = "An error occurred when deleting ";
boolean first = true;
for (String name : notDeleted) {
if (first) {
first = false;
} else {
report += ", ";
}
report += name;
}
JOptionPane.showMessageDialog(this, report, "Error when emptying folder", JOptionPane.WARNING_MESSAGE);
}
}
}//GEN-LAST:event_clearDatabaseFolderButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JPanel backgroundPanel;
private javax.swing.JButton browseDatabaseFolderButton;
private javax.swing.JButton cancelButton;
private javax.swing.JButton clearDatabaseFolderButton;
private javax.swing.JTextField databasesFolderTxt;
private javax.swing.JTextField fastaSuffixTxt;
private javax.swing.JPanel fileProcessingPanel;
private javax.swing.JPanel folderPanel;
private javax.swing.JButton okButton;
// End of variables declaration//GEN-END:variables
}