package com.compomics.util.experiment.massspectrometry.proteowizard.gui;
import com.compomics.util.Util;
import com.compomics.util.examples.BareBonesBrowserLaunch;
import com.compomics.util.experiment.massspectrometry.proteowizard.MsConvertParameters;
import com.compomics.util.experiment.massspectrometry.proteowizard.MsFormat;
import com.compomics.util.experiment.massspectrometry.proteowizard.ProteoWizardFilter;
import com.compomics.util.gui.renderers.AlignedListCellRenderer;
import com.compomics.util.preferences.UtilitiesUserPreferences;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
/**
* Dialog for the creation and edition of msconvert parameters.
*
* @author Marc Vaudel
*/
public class MsConvertParametersDialog extends javax.swing.JDialog {
/**
* Boolean indicating whether the editing was canceled.
*/
private boolean canceled = false;
/**
* Map of the filters to use.
*/
private HashMap<Integer, String> filters;
/**
* List of the indexes of the filters to use.
*/
private ArrayList<Integer> filterIndexes;
/**
* The selected folder.
*/
private String lastSelectedFolder = "";
/**
* The utilities preferences.
*/
private UtilitiesUserPreferences utilitiesUserPreferences;
/**
* Constructor.
*
* @param parent the parent frame
* @param msConvertParameters initial parameters, ignored if null
*/
public MsConvertParametersDialog(java.awt.Frame parent, MsConvertParameters msConvertParameters) {
super(parent, true);
initComponents();
setUpGUI(msConvertParameters);
setLocationRelativeTo(parent);
setVisible(true);
}
/**
* Sets up the GUI components.
*
* @param msConvertParameters parameters to display on the interface,
* ignored if null
*/
private void setUpGUI(MsConvertParameters msConvertParameters) {
filtersTableScrollPane.getViewport().setOpaque(false);
filtersTable.getTableHeader().setReorderingAllowed(false);
if (msConvertParameters != null) {
outputFormatCmb.setSelectedItem(msConvertParameters.getMsFormat());
filters = (HashMap<Integer, String>) msConvertParameters.getFiltersMap().clone();
} else {
outputFormatCmb.setSelectedItem(MsFormat.mzML);
filters = new HashMap<Integer, String>(2);
}
filterIndexes = new ArrayList<Integer>(filters.keySet());
Collections.sort(filterIndexes);
DefaultTableModel tableModel = new FiltersTableModel();
filtersTable.setModel(tableModel);
TableColumnModel tableColumnModel = filtersTable.getColumnModel();
tableColumnModel.getColumn(0).setMinWidth(50);
tableColumnModel.getColumn(0).setMaxWidth(50);
TableColumn filterColumn = tableColumnModel.getColumn(1);
filterColumn.setMinWidth(200);
filterColumn.setMaxWidth(200);
JComboBox comboBox = new JComboBox(ProteoWizardFilter.values());
filterColumn.setCellEditor(new DefaultCellEditor(comboBox));
for (final ProteoWizardFilter tempFilter : ProteoWizardFilter.values()) {
JMenuItem tempFilterMenuItem = new javax.swing.JMenuItem(tempFilter.name);
tempFilterMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
if (!filters.containsKey(tempFilter.number)) {
filters.put(tempFilter.number, "");
updateTable();
}
}
});
addFilterMenu.add(tempFilterMenuItem);
}
outputFormatCmb.setRenderer(new AlignedListCellRenderer(SwingConstants.CENTER));
utilitiesUserPreferences = UtilitiesUserPreferences.loadUserPreferences();
if (utilitiesUserPreferences.getProteoWizardPath() == null) {
int option = JOptionPane.showConfirmDialog(this, "Cannot find ProteoWizard. Do you want to download it now?", "Download ProteoWizard?", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
openWebPage();
}
}
// display the current path
if (utilitiesUserPreferences != null) {
installationJTextField.setText(utilitiesUserPreferences.getProteoWizardPath());
lastSelectedFolder = utilitiesUserPreferences.getProteoWizardPath();
}
}
/**
* Updates the table.
*/
private void updateTable() {
filterIndexes = new ArrayList<Integer>(filters.keySet());
Collections.sort(filterIndexes);
((DefaultTableModel) filtersTable.getModel()).fireTableDataChanged();
}
/**
* 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() {
filtersPopupMenu = new javax.swing.JPopupMenu();
removeFilterMenuItem = new javax.swing.JMenuItem();
addFilterMenu = new javax.swing.JMenu();
backgourdPanel = new javax.swing.JPanel();
cancelButton = new javax.swing.JButton();
okButton = new javax.swing.JButton();
msconvertParameters = new javax.swing.JPanel();
outputFormatLbl = new javax.swing.JLabel();
outputFormatCmb = new javax.swing.JComboBox();
filtersLbl = new javax.swing.JLabel();
filtersTableScrollPane = new javax.swing.JScrollPane();
filtersTable = new javax.swing.JTable();
filterHelpLabel = new javax.swing.JLabel();
installationPanel = new javax.swing.JPanel();
installationJTextField = new javax.swing.JTextField();
browseButton = new javax.swing.JButton();
folderHelpLabel = new javax.swing.JLabel();
removeFilterMenuItem.setText("Remove Filter");
removeFilterMenuItem.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
removeFilterMenuItemMouseReleased(evt);
}
});
filtersPopupMenu.add(removeFilterMenuItem);
addFilterMenu.setText("Add Filter");
filtersPopupMenu.add(addFilterMenu);
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("MSConvert Settings");
setMinimumSize(new java.awt.Dimension(400, 400));
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
backgourdPanel.setBackground(new java.awt.Color(230, 230, 230));
cancelButton.setText("Cancel");
cancelButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
cancelButtonActionPerformed(evt);
}
});
okButton.setText("OK");
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
msconvertParameters.setBorder(javax.swing.BorderFactory.createTitledBorder("Settings"));
msconvertParameters.setOpaque(false);
outputFormatLbl.setText("Output Format");
outputFormatCmb.setMaximumRowCount(10);
outputFormatCmb.setModel(new DefaultComboBoxModel(MsFormat.getDataFormats(null, true)));
filtersLbl.setText("Filters (right click in the table to edit)");
filtersTableScrollPane.setOpaque(false);
filtersTableScrollPane.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
filtersTableScrollPaneMouseReleased(evt);
}
});
filtersTable.setModel(new FiltersTableModel());
filtersTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
filtersTableMouseReleased(evt);
}
});
filtersTableScrollPane.setViewportView(filtersTable);
javax.swing.GroupLayout msconvertParametersLayout = new javax.swing.GroupLayout(msconvertParameters);
msconvertParameters.setLayout(msconvertParametersLayout);
msconvertParametersLayout.setHorizontalGroup(
msconvertParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(msconvertParametersLayout.createSequentialGroup()
.addContainerGap()
.addGroup(msconvertParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(filtersTableScrollPane, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 682, Short.MAX_VALUE)
.addGroup(msconvertParametersLayout.createSequentialGroup()
.addComponent(filtersLbl)
.addGap(0, 507, Short.MAX_VALUE))
.addGroup(msconvertParametersLayout.createSequentialGroup()
.addComponent(outputFormatLbl)
.addGap(18, 18, 18)
.addComponent(outputFormatCmb, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
.addContainerGap())
);
msconvertParametersLayout.setVerticalGroup(
msconvertParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, msconvertParametersLayout.createSequentialGroup()
.addContainerGap()
.addGroup(msconvertParametersLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(outputFormatLbl)
.addComponent(outputFormatCmb, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(filtersLbl)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(filtersTableScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE)
.addContainerGap())
);
filterHelpLabel.setText("<html><a href>Help with the msconvert filters</a></html>");
filterHelpLabel.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseEntered(java.awt.event.MouseEvent evt) {
filterHelpLabelMouseEntered(evt);
}
public void mouseExited(java.awt.event.MouseEvent evt) {
filterHelpLabelMouseExited(evt);
}
public void mouseReleased(java.awt.event.MouseEvent evt) {
filterHelpLabelMouseReleased(evt);
}
});
installationPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("ProteoWizard Folder"));
installationPanel.setOpaque(false);
installationJTextField.setEditable(false);
installationJTextField.setToolTipText("The folder containing the PeptideShaker jar file.");
browseButton.setText("Browse");
browseButton.setToolTipText("The folder containing the PeptideShaker jar file.");
browseButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
browseButtonActionPerformed(evt);
}
});
folderHelpLabel.setFont(folderHelpLabel.getFont().deriveFont((folderHelpLabel.getFont().getStyle() | java.awt.Font.ITALIC)));
folderHelpLabel.setText("Please locate the ProteoWizard installation folder");
javax.swing.GroupLayout installationPanelLayout = new javax.swing.GroupLayout(installationPanel);
installationPanel.setLayout(installationPanelLayout);
installationPanelLayout.setHorizontalGroup(
installationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, installationPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(installationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(installationJTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 609, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, installationPanelLayout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(folderHelpLabel)
.addGap(11, 11, 11)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(browseButton)
.addContainerGap())
);
installationPanelLayout.setVerticalGroup(
installationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(installationPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(installationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(installationJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(browseButton))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(folderHelpLabel)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
javax.swing.GroupLayout backgourdPanelLayout = new javax.swing.GroupLayout(backgourdPanel);
backgourdPanel.setLayout(backgourdPanelLayout);
backgourdPanelLayout.setHorizontalGroup(
backgourdPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(backgourdPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(backgourdPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(backgourdPanelLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(filterHelpLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cancelButton))
.addComponent(msconvertParameters, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(installationPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
backgourdPanelLayout.setVerticalGroup(
backgourdPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, backgourdPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(installationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(msconvertParameters, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(backgourdPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(cancelButton)
.addComponent(okButton)
.addComponent(filterHelpLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap())
);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(backgourdPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(backgourdPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
/**
* Cancel the dialog without saving.
*
* @param evt
*/
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
canceled = true;
dispose();
}//GEN-LAST:event_cancelButtonActionPerformed
/**
* Close the dialog.
*
* @param evt
*/
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
boolean formatCheck = true;
if (((MsFormat) outputFormatCmb.getSelectedItem()) != MsFormat.mgf) {
int value = JOptionPane.showConfirmDialog(this, "Mgf is the only format compatible with SearchGUI. Proceed anyway?",
"Output Format Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
// int value = JOptionPane.showConfirmDialog(this, "Mgf is the only format compatible with PeptideShaker. Proceed anyway?",
// "Output Format Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
if (value == JOptionPane.NO_OPTION) {
formatCheck = false;
}
}
if (formatCheck) {
utilitiesUserPreferences.setProteoWizardPath(installationJTextField.getText());
try {
UtilitiesUserPreferences.saveUserPreferences(utilitiesUserPreferences);
dispose();
} catch (Exception e) {
e.printStackTrace();
JOptionPane.showMessageDialog(this, "An error occurred while saving the preferences.", "Error", JOptionPane.WARNING_MESSAGE);
}
}
}//GEN-LAST:event_okButtonActionPerformed
/**
* Remove an item from the filters.
*
* @param evt
*/
private void removeFilterMenuItemMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_removeFilterMenuItemMouseReleased
int row = filtersTable.getSelectedRow();
if (row >= 0) {
String itemName = filtersTable.getValueAt(row, 1).toString();
ProteoWizardFilter proteoWizardFilter = ProteoWizardFilter.getFilter(itemName);
if (proteoWizardFilter != null) {
filters.remove(proteoWizardFilter.number);
updateTable();
}
}
}//GEN-LAST:event_removeFilterMenuItemMouseReleased
/**
* Show the filter popup menu.
*
* @param evt
*/
private void filtersTableMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_filtersTableMouseReleased
if (evt != null && filtersTable.rowAtPoint(evt.getPoint()) != -1) {
int row = filtersTable.rowAtPoint(evt.getPoint());
filtersTable.setRowSelectionInterval(row, row);
}
if (evt != null && evt.getButton() == MouseEvent.BUTTON3) {
removeFilterMenuItem.setVisible(filtersTable.getSelectedRow() != -1);
filtersPopupMenu.show(filtersTable, evt.getX(), evt.getY());
}
}//GEN-LAST:event_filtersTableMouseReleased
/**
* Close the dialog.
*
* @param evt
*/
private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
cancelButtonActionPerformed(null);
}//GEN-LAST:event_formWindowClosing
/**
* Change the cursor to a hand icon.
*
* @param evt
*/
private void filterHelpLabelMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_filterHelpLabelMouseEntered
setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
}//GEN-LAST:event_filterHelpLabelMouseEntered
/**
* Change the cursor back to the default icon.
*
* @param evt
*/
private void filterHelpLabelMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_filterHelpLabelMouseExited
setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
}//GEN-LAST:event_filterHelpLabelMouseExited
/**
* Open the msConvert filters helps.
*
* @param evt
*/
private void filterHelpLabelMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_filterHelpLabelMouseReleased
BareBonesBrowserLaunch.openURL("http://proteowizard.sourceforge.net/tools/filters.html");
}//GEN-LAST:event_filterHelpLabelMouseReleased
/**
* Open the filter popup menu.
*
* @param evt
*/
private void filtersTableScrollPaneMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_filtersTableScrollPaneMouseReleased
filtersTableMouseReleased(evt);
}//GEN-LAST:event_filtersTableScrollPaneMouseReleased
/**
* Open a file chooser were the user can select the installation folder.
*
* @param evt
*/
private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed
File selectedFile = Util.getUserSelectedFolder(this, "ProteoWizard Installation Folder", lastSelectedFolder, "ProteoWizard installation folder", "OK", true);
if (selectedFile != null) {
// check if it is a valid folder
if (!(new File(selectedFile, "msconvert.exe").exists() || new File(selectedFile, "msconvert").exists())) {
JOptionPane.showMessageDialog(this, "The selected folder is not a valid ProteoWizard folder!", "Wrong Folder Selected", JOptionPane.WARNING_MESSAGE);
okButton.setEnabled(false);
} else {
// assumed to be valid folder
lastSelectedFolder = selectedFile.getPath();
installationJTextField.setText(lastSelectedFolder);
okButton.setEnabled(true);
}
}
}//GEN-LAST:event_browseButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JMenu addFilterMenu;
private javax.swing.JPanel backgourdPanel;
private javax.swing.JButton browseButton;
private javax.swing.JButton cancelButton;
private javax.swing.JLabel filterHelpLabel;
private javax.swing.JLabel filtersLbl;
private javax.swing.JPopupMenu filtersPopupMenu;
private javax.swing.JTable filtersTable;
private javax.swing.JScrollPane filtersTableScrollPane;
private javax.swing.JLabel folderHelpLabel;
private javax.swing.JTextField installationJTextField;
private javax.swing.JPanel installationPanel;
private javax.swing.JPanel msconvertParameters;
private javax.swing.JButton okButton;
private javax.swing.JComboBox outputFormatCmb;
private javax.swing.JLabel outputFormatLbl;
private javax.swing.JMenuItem removeFilterMenuItem;
// End of variables declaration//GEN-END:variables
/**
* Indicates whether the editing was canceled by the user.
*
* @return a boolean indicating whether the editing was canceled by the user
*/
public boolean isCanceled() {
return canceled;
}
/**
* Returns the parameters as created by the user.
*
* @return the parameters as created by the user
*/
public MsConvertParameters getMsConvertParameters() {
MsConvertParameters msConvertParameters = new MsConvertParameters();
msConvertParameters.setMsFormat((MsFormat) outputFormatCmb.getSelectedItem());
for (Integer filterIndex : filters.keySet()) {
msConvertParameters.addFilter(filterIndex, filters.get(filterIndex));
}
return msConvertParameters;
}
/**
* Table model for the filters.
*/
private class FiltersTableModel extends DefaultTableModel {
public FiltersTableModel() {
}
@Override
public int getRowCount() {
if (filters == null) {
return 0;
}
return filters.size();
}
@Override
public int getColumnCount() {
return 3;
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return " ";
case 1:
return "Name";
case 2:
return "Value";
default:
return "";
}
}
@Override
public Object getValueAt(int row, int column) {
switch (column) {
case 0:
return row + 1;
case 1:
Integer index = filterIndexes.get(row);
ProteoWizardFilter proteoWizardFilter = ProteoWizardFilter.getFilter(index);
String itemName = proteoWizardFilter.name;
return itemName;
case 2:
index = filterIndexes.get(row);
String value = filters.get(index);
if (value == null) {
value = null;
}
return value;
default:
return "";
}
}
@Override
public void setValueAt(Object value, int row, int column) {
switch (column) {
case 1:
Integer index = filterIndexes.get(row);
filters.remove(index);
ProteoWizardFilter proteoWizardFilter = (ProteoWizardFilter) value;
filters.put(proteoWizardFilter.number, "");
break;
case 2:
index = filterIndexes.get(row);
filters.put(index, (String) value);
break;
}
updateTable();
}
@Override
public Class getColumnClass(int columnIndex) {
for (int i = 0; i < getRowCount(); i++) {
if (getValueAt(i, columnIndex) != null) {
return getValueAt(i, columnIndex).getClass();
}
}
return String.class;
}
@Override
public boolean isCellEditable(int row, int column) {
return column > 0;
}
}
/**
* Opens the ProteoWizard web page.
*/
private void openWebPage() {
this.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
BareBonesBrowserLaunch.openURL("http://proteowizard.sourceforge.net");
this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
}
}