package com.compomics.util.gui.export.report;
import com.compomics.util.io.export.ExportFactory;
import com.compomics.util.io.export.ExportFeature;
import com.compomics.util.io.export.ExportScheme;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import no.uib.jsparklines.extra.NimbusCheckBoxRenderer;
/**
* Dialog for editing reports.
*
* @author Marc Vaudel
* @author Harald Barsnes
*/
public class ReportEditor extends javax.swing.JDialog {
/**
* The export factory.
*/
private ExportFactory exportFactory;
/**
* The original name of the report.
*/
private String oldName;
/**
* A boolean indicating whether the report can be edited.
*/
private boolean editable = true;
/**
* The original selection.
*/
private HashMap<String, ArrayList<ExportFeature>> selection = new HashMap<String, ArrayList<ExportFeature>>();
/**
* The selected section name.
*/
private String sectionName = null;
/**
* The list of implemented features for the selected section.
*/
private ArrayList<ExportFeature> featuresList;
/**
* Constructor.
*
* @param parent the parent frame
* @param exportFactory the export factory containing the implemented
* exports for the running software
* @param exportSchemeName the name of the export scheme to edit
* @param editable if the report is editable
*/
public ReportEditor(java.awt.Frame parent, ExportFactory exportFactory, String exportSchemeName, boolean editable) {
super(parent, true);
this.exportFactory = exportFactory;
this.editable = editable;
initComponents();
oldName = exportSchemeName;
selection = new HashMap<String, ArrayList<ExportFeature>>();
ExportScheme exportScheme = exportFactory.getExportScheme(exportSchemeName);
for (String section : exportScheme.getSections()) {
if (!selection.containsKey(section)) {
selection.put(section, new ArrayList<ExportFeature>());
}
selection.get(section).addAll(exportScheme.getExportFeatures(section));
}
setUpGUI();
this.setLocationRelativeTo(parent);
setVisible(true);
}
/**
* Constructor.
*
* @param parent the parent frame
* @param exportFactory the export factory containing the implemented
* exports for the running software
*/
public ReportEditor(java.awt.Frame parent, ExportFactory exportFactory) {
super(parent, true);
this.exportFactory = exportFactory;
initComponents();
setUpGUI();
this.setLocationRelativeTo(parent);
setVisible(true);
}
/**
* Sets up the GUI components.
*/
private void setUpGUI() {
sectionsTable.getTableHeader().setReorderingAllowed(false);
featuresTable.getTableHeader().setReorderingAllowed(false);
sectionsTable.getColumn(" ").setMaxWidth(30);
sectionsTable.getColumn(" ").setMinWidth(30);
featuresTable.getColumn(" ").setMaxWidth(30);
featuresTable.getColumn(" ").setMinWidth(30);
featuresTable.getColumn(" ").setMaxWidth(30);
featuresTable.getColumn(" ").setMinWidth(30);
featuresTable.getColumn(" ").setCellRenderer(new NimbusCheckBoxRenderer());
nameTxt.setEnabled(editable);
maintTitleCheckBox.setEnabled(editable);
tabRadioButton.setEnabled(editable);
semicolonRadioButton.setEnabled(editable);
commaRadioButton.setEnabled(editable);
spaceRadioButton.setEnabled(editable);
sectionTitleCheckBox.setEnabled(editable);
separationLinesSpinner.setEnabled(editable);
sectionsTable.setEnabled(editable);
featuresTable.setEnabled(editable);
lineNumberCheckBox.setEnabled(editable);
headerCheckBox.setEnabled(editable);
validatedCheck.setEnabled(editable);
decoysCheck.setEnabled(editable);
// make sure that the scroll panes are see-through
featuresScrollPane.getViewport().setOpaque(false);
sectionsScrollPane.getViewport().setOpaque(false);
if (oldName != null) {
nameTxt.setText(oldName);
ExportScheme exportScheme = exportFactory.getExportScheme(oldName);
if (exportScheme.getMainTitle() != null) {
maintTitleCheckBox.setSelected(true);
mainTitleTxt.setText(exportScheme.getMainTitle());
}
if (exportScheme.getSeparator().equalsIgnoreCase("\\t")) {
tabRadioButton.setSelected(true);
} else if (exportScheme.getSeparator().equalsIgnoreCase(";")) {
semicolonRadioButton.setSelected(true);
} else if (exportScheme.getSeparator().equalsIgnoreCase(",")) {
commaRadioButton.setSelected(true);
} else if (exportScheme.getSeparator().equalsIgnoreCase(" ")) {
spaceRadioButton.setSelected(true);
}
sectionTitleCheckBox.setSelected(exportScheme.isIncludeSectionTitles());
separationLinesSpinner.setValue(exportScheme.getSeparationLines());
lineNumberCheckBox.setSelected(exportScheme.isIndexes());
headerCheckBox.setSelected(exportScheme.isHeader());
validatedCheck.setSelected(exportScheme.isValidatedOnly());
decoysCheck.setSelected(exportScheme.isIncludeDecoy());
}
}
/**
* 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() {
delimiterButtonGroup = new javax.swing.ButtonGroup();
backgroundPanel = new javax.swing.JPanel();
reporterTypePanel = new javax.swing.JPanel();
nameTxt = new javax.swing.JTextField();
reporterSettingsPanel = new javax.swing.JPanel();
maintTitleCheckBox = new javax.swing.JCheckBox();
sectionTitleCheckBox = new javax.swing.JCheckBox();
separationLinesSpinner = new javax.swing.JSpinner();
numberOfSeparationLinesLabel = new javax.swing.JLabel();
lineNumberCheckBox = new javax.swing.JCheckBox();
headerCheckBox = new javax.swing.JCheckBox();
tabRadioButton = new javax.swing.JRadioButton();
semicolonRadioButton = new javax.swing.JRadioButton();
commaRadioButton = new javax.swing.JRadioButton();
spaceRadioButton = new javax.swing.JRadioButton();
columnDelimiterLabel = new javax.swing.JLabel();
rowDelimiterLabel = new javax.swing.JLabel();
structureLabel = new javax.swing.JLabel();
reportTitleLabel = new javax.swing.JLabel();
mainTitleTxt = new javax.swing.JTextField();
matchesLbl = new javax.swing.JLabel();
validatedCheck = new javax.swing.JCheckBox();
decoysCheck = new javax.swing.JCheckBox();
cancelButton = new javax.swing.JButton();
okButton = new javax.swing.JButton();
sectionsPanel = new javax.swing.JPanel();
sectionsScrollPane = new javax.swing.JScrollPane();
sectionsTable = new javax.swing.JTable();
sectionContentPanel = new javax.swing.JPanel();
featuresScrollPane = new javax.swing.JScrollPane();
featuresTable = new javax.swing.JTable();
advancedFeaturesCheck = new javax.swing.JCheckBox();
subFeaturesCheck = new javax.swing.JCheckBox();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("Report");
setMinimumSize(new java.awt.Dimension(720, 650));
backgroundPanel.setBackground(new java.awt.Color(230, 230, 230));
reporterTypePanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Report Type"));
reporterTypePanel.setOpaque(false);
javax.swing.GroupLayout reporterTypePanelLayout = new javax.swing.GroupLayout(reporterTypePanel);
reporterTypePanel.setLayout(reporterTypePanelLayout);
reporterTypePanelLayout.setHorizontalGroup(
reporterTypePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, reporterTypePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(nameTxt)
.addContainerGap())
);
reporterTypePanelLayout.setVerticalGroup(
reporterTypePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterTypePanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(nameTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
reporterSettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Settings"));
reporterSettingsPanel.setOpaque(false);
maintTitleCheckBox.setText("Report Title");
maintTitleCheckBox.setIconTextGap(15);
maintTitleCheckBox.setOpaque(false);
maintTitleCheckBox.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
maintTitleCheckBoxActionPerformed(evt);
}
});
sectionTitleCheckBox.setText("Section Titles");
sectionTitleCheckBox.setIconTextGap(15);
sectionTitleCheckBox.setOpaque(false);
separationLinesSpinner.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(0), Integer.valueOf(0), null, Integer.valueOf(1)));
separationLinesSpinner.setToolTipText("Number of empty lines between each section");
separationLinesSpinner.setEnabled(false);
numberOfSeparationLinesLabel.setFont(numberOfSeparationLinesLabel.getFont().deriveFont((numberOfSeparationLinesLabel.getFont().getStyle() | java.awt.Font.ITALIC)));
numberOfSeparationLinesLabel.setText("#lines between sections");
numberOfSeparationLinesLabel.setToolTipText("Number of empty lines between each section");
lineNumberCheckBox.setSelected(true);
lineNumberCheckBox.setText("Line Numbers");
lineNumberCheckBox.setIconTextGap(15);
lineNumberCheckBox.setOpaque(false);
headerCheckBox.setSelected(true);
headerCheckBox.setText("Table Headers");
headerCheckBox.setIconTextGap(15);
headerCheckBox.setOpaque(false);
delimiterButtonGroup.add(tabRadioButton);
tabRadioButton.setSelected(true);
tabRadioButton.setText("Tab");
tabRadioButton.setIconTextGap(15);
tabRadioButton.setOpaque(false);
delimiterButtonGroup.add(semicolonRadioButton);
semicolonRadioButton.setText("Semicolon");
semicolonRadioButton.setIconTextGap(15);
semicolonRadioButton.setOpaque(false);
delimiterButtonGroup.add(commaRadioButton);
commaRadioButton.setText("Comma");
commaRadioButton.setIconTextGap(15);
commaRadioButton.setOpaque(false);
delimiterButtonGroup.add(spaceRadioButton);
spaceRadioButton.setText("Space");
spaceRadioButton.setIconTextGap(15);
spaceRadioButton.setOpaque(false);
columnDelimiterLabel.setText("Column Delimiter");
rowDelimiterLabel.setText("Row Delimiter");
structureLabel.setText("Structure");
reportTitleLabel.setText("Report Title");
mainTitleTxt.setEnabled(false);
matchesLbl.setText("Matches");
validatedCheck.setSelected(true);
validatedCheck.setText("Validated Only");
validatedCheck.setIconTextGap(15);
validatedCheck.setOpaque(false);
decoysCheck.setText("Include Decoys");
decoysCheck.setIconTextGap(15);
decoysCheck.setOpaque(false);
javax.swing.GroupLayout reporterSettingsPanelLayout = new javax.swing.GroupLayout(reporterSettingsPanel);
reporterSettingsPanel.setLayout(reporterSettingsPanelLayout);
reporterSettingsPanelLayout.setHorizontalGroup(
reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(maintTitleCheckBox)
.addComponent(sectionTitleCheckBox)
.addComponent(lineNumberCheckBox))
.addComponent(headerCheckBox)))
.addComponent(structureLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(columnDelimiterLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(spaceRadioButton)
.addComponent(semicolonRadioButton)
.addComponent(tabRadioButton)
.addComponent(commaRadioButton))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(validatedCheck)
.addComponent(decoysCheck)))
.addComponent(matchesLbl, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(rowDelimiterLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addGap(10, 10, 10)
.addComponent(separationLinesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(numberOfSeparationLinesLabel)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 23, Short.MAX_VALUE))
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addComponent(reportTitleLabel)
.addGap(18, 18, 18)
.addComponent(mainTitleTxt)))
.addGap(14, 14, 14))
);
reporterSettingsPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {headerCheckBox, lineNumberCheckBox, maintTitleCheckBox, sectionTitleCheckBox});
reporterSettingsPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {semicolonRadioButton, tabRadioButton});
reporterSettingsPanelLayout.setVerticalGroup(
reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addComponent(columnDelimiterLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tabRadioButton)
.addGap(0, 0, 0)
.addComponent(semicolonRadioButton)
.addGap(0, 0, 0)
.addComponent(commaRadioButton))
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addComponent(structureLabel)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(maintTitleCheckBox)
.addGap(0, 0, 0)
.addComponent(sectionTitleCheckBox)
.addGap(0, 0, 0)
.addComponent(lineNumberCheckBox))
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addGap(20, 20, 20)
.addComponent(validatedCheck))
.addGroup(reporterSettingsPanelLayout.createSequentialGroup()
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(rowDelimiterLabel)
.addComponent(matchesLbl))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(separationLinesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(numberOfSeparationLinesLabel))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(decoysCheck)))
.addGap(0, 0, 0)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(headerCheckBox)
.addComponent(spaceRadioButton))))
.addGap(18, 18, 18)
.addGroup(reporterSettingsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(reportTitleLabel)
.addComponent(mainTitleTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
reporterSettingsPanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {mainTitleTxt, numberOfSeparationLinesLabel});
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);
}
});
sectionsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Sections"));
sectionsPanel.setOpaque(false);
sectionsTable.setModel(new SectionsTableModel());
sectionsTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
sectionsTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseReleased(java.awt.event.MouseEvent evt) {
sectionsTableMouseReleased(evt);
}
});
sectionsTable.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
sectionsTableKeyReleased(evt);
}
});
sectionsScrollPane.setViewportView(sectionsTable);
javax.swing.GroupLayout sectionsPanelLayout = new javax.swing.GroupLayout(sectionsPanel);
sectionsPanel.setLayout(sectionsPanelLayout);
sectionsPanelLayout.setHorizontalGroup(
sectionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(sectionsPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(sectionsScrollPane)
.addContainerGap())
);
sectionsPanelLayout.setVerticalGroup(
sectionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(sectionsPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(sectionsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 143, Short.MAX_VALUE)
.addContainerGap())
);
sectionContentPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Section Content"));
sectionContentPanel.setOpaque(false);
featuresTable.setModel(new FeaturesTableModel());
featuresTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
featuresScrollPane.setViewportView(featuresTable);
advancedFeaturesCheck.setText("Show Advanced Features");
advancedFeaturesCheck.setIconTextGap(10);
advancedFeaturesCheck.setOpaque(false);
advancedFeaturesCheck.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
advancedFeaturesCheckActionPerformed(evt);
}
});
subFeaturesCheck.setText("Show Sub Features");
subFeaturesCheck.setIconTextGap(10);
subFeaturesCheck.setOpaque(false);
subFeaturesCheck.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
subFeaturesCheckActionPerformed(evt);
}
});
javax.swing.GroupLayout sectionContentPanelLayout = new javax.swing.GroupLayout(sectionContentPanel);
sectionContentPanel.setLayout(sectionContentPanelLayout);
sectionContentPanelLayout.setHorizontalGroup(
sectionContentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, sectionContentPanelLayout.createSequentialGroup()
.addContainerGap()
.addGroup(sectionContentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(sectionContentPanelLayout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(advancedFeaturesCheck)
.addGap(18, 18, 18)
.addComponent(subFeaturesCheck))
.addComponent(featuresScrollPane))
.addContainerGap())
);
sectionContentPanelLayout.setVerticalGroup(
sectionContentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(sectionContentPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(featuresScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 129, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(sectionContentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(advancedFeaturesCheck)
.addComponent(subFeaturesCheck)))
);
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(reporterSettingsPanel, 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, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(cancelButton))
.addComponent(sectionContentPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(sectionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(reporterTypePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
backgroundPanelLayout.setVerticalGroup(
backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(backgroundPanelLayout.createSequentialGroup()
.addContainerGap()
.addComponent(reporterTypePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(reporterSettingsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sectionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(sectionContentPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(backgroundPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(cancelButton)
.addComponent(okButton))
.addContainerGap())
);
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.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
/**
* Close the dialog without saving.
*
* @param evt
*/
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
dispose();
}//GEN-LAST:event_cancelButtonActionPerformed
/**
* Save the export scheme and close the dialog.
*
* @param evt
*/
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
if (editable) {
String newName = nameTxt.getText().trim();
if (newName.trim().length() == 0) {
JOptionPane.showMessageDialog(this, "Please provide a name for the report type.", "Report Type Missing", JOptionPane.INFORMATION_MESSAGE);
nameTxt.requestFocus();
return;
}
if (oldName != null && !oldName.contains(newName)) {
exportFactory.removeExportScheme(oldName);
}
// get the separator
String separator;
if (tabRadioButton.isSelected()) {
separator = "\t";
} else if (semicolonRadioButton.isSelected()) {
separator = ";";
} else if (commaRadioButton.isSelected()) {
separator = ",";
} else { // space selected
separator = " ";
}
HashMap<String, ArrayList<ExportFeature>> features = new HashMap<String, ArrayList<ExportFeature>>(selection);
if (maintTitleCheckBox.isSelected()) {
ExportScheme exportScheme = new ExportScheme(newName, true, features, separator,
lineNumberCheckBox.isSelected(), headerCheckBox.isSelected(), (Integer) separationLinesSpinner.getValue(),
sectionTitleCheckBox.isSelected(), validatedCheck.isSelected(), decoysCheck.isSelected(), mainTitleTxt.getText().trim());
exportFactory.addExportScheme(exportScheme);
} else {
ExportScheme exportScheme = new ExportScheme(newName, true, features, separator,
lineNumberCheckBox.isSelected(), headerCheckBox.isSelected(), (Integer) separationLinesSpinner.getValue(), sectionTitleCheckBox.isSelected(), validatedCheck.isSelected(), decoysCheck.isSelected());
exportFactory.addExportScheme(exportScheme);
}
}
dispose();
}//GEN-LAST:event_okButtonActionPerformed
/**
* Enable/disable the main title text field.
*
* @param evt
*/
private void maintTitleCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_maintTitleCheckBoxActionPerformed
mainTitleTxt.setEnabled(maintTitleCheckBox.isSelected());
}//GEN-LAST:event_maintTitleCheckBoxActionPerformed
/**
* Update the section content table.
*
* @param evt
*/
private void sectionsTableMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_sectionsTableMouseReleased
if (sectionsTable.getSelectedRow() != -1) {
sectionName = (String) sectionsTable.getValueAt(sectionsTable.getSelectedRow(), 1);
updateFeatureTableContent();
}
}//GEN-LAST:event_sectionsTableMouseReleased
/**
* Update the section content table.
*
* @param evt
*/
private void sectionsTableKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_sectionsTableKeyReleased
sectionsTableMouseReleased(null);
}//GEN-LAST:event_sectionsTableKeyReleased
private void subFeaturesCheckActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_subFeaturesCheckActionPerformed
updateFeatureTableContent();
}//GEN-LAST:event_subFeaturesCheckActionPerformed
private void advancedFeaturesCheckActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_advancedFeaturesCheckActionPerformed
updateFeatureTableContent();
}//GEN-LAST:event_advancedFeaturesCheckActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JCheckBox advancedFeaturesCheck;
private javax.swing.JPanel backgroundPanel;
private javax.swing.JButton cancelButton;
private javax.swing.JLabel columnDelimiterLabel;
private javax.swing.JRadioButton commaRadioButton;
private javax.swing.JCheckBox decoysCheck;
private javax.swing.ButtonGroup delimiterButtonGroup;
private javax.swing.JScrollPane featuresScrollPane;
private javax.swing.JTable featuresTable;
private javax.swing.JCheckBox headerCheckBox;
private javax.swing.JCheckBox lineNumberCheckBox;
private javax.swing.JTextField mainTitleTxt;
private javax.swing.JCheckBox maintTitleCheckBox;
private javax.swing.JLabel matchesLbl;
private javax.swing.JTextField nameTxt;
private javax.swing.JLabel numberOfSeparationLinesLabel;
private javax.swing.JButton okButton;
private javax.swing.JLabel reportTitleLabel;
private javax.swing.JPanel reporterSettingsPanel;
private javax.swing.JPanel reporterTypePanel;
private javax.swing.JLabel rowDelimiterLabel;
private javax.swing.JPanel sectionContentPanel;
private javax.swing.JCheckBox sectionTitleCheckBox;
private javax.swing.JPanel sectionsPanel;
private javax.swing.JScrollPane sectionsScrollPane;
private javax.swing.JTable sectionsTable;
private javax.swing.JRadioButton semicolonRadioButton;
private javax.swing.JSpinner separationLinesSpinner;
private javax.swing.JRadioButton spaceRadioButton;
private javax.swing.JLabel structureLabel;
private javax.swing.JCheckBox subFeaturesCheck;
private javax.swing.JRadioButton tabRadioButton;
private javax.swing.JCheckBox validatedCheck;
// End of variables declaration//GEN-END:variables
/**
* Indicates whether a feature has been selected in the given section.
*
* @param section the section of interest
* @param exportFeature the export feature of interest
* @return a boolean indicating whether a feature has been selected in the
* given section
*/
private boolean isSelected(String section, ExportFeature exportFeature) {
ArrayList<ExportFeature> selectedSectionFeatures = selection.get(section);
if (selectedSectionFeatures != null && selectedSectionFeatures.contains(exportFeature)) {
return true;
}
return false;
}
/**
* Sets whether a feature is selected in the given section.
*
* @param section the section of interest
* @param exportFeature the feature of interest
* @param selected a boolean indicating whether the feature shall be
* selected or not
*/
private void setSelected(String section, ExportFeature exportFeature, Boolean selected) {
if (selected) {
if (!selection.containsKey(section)) {
selection.put(section, new ArrayList<ExportFeature>());
}
if (!selection.get(section).contains(exportFeature)) {
selection.get(section).add(exportFeature);
}
} else {
if (selection.containsKey(section)) {
selection.get(section).remove(exportFeature);
if (selection.get(section).isEmpty()) {
selection.remove(section);
}
}
}
}
/**
* Updates the feature table content based on the section name.
*/
private void updateFeatureTableContent() {
featuresList = new ArrayList<ExportFeature>();
if (sectionName != null) {
if (advancedFeaturesCheck.isSelected()) {
featuresList.addAll(exportFactory.getExportFeatures(sectionName, subFeaturesCheck.isSelected()));
} else {
for (ExportFeature exportFeature : exportFactory.getExportFeatures(sectionName, subFeaturesCheck.isSelected())) {
if (!exportFeature.isAdvanced()) {
featuresList.add(exportFeature);
}
}
}
}
((DefaultTableModel) featuresTable.getModel()).fireTableDataChanged();
}
/**
* Table model for the reports table.
*/
private class SectionsTableModel extends DefaultTableModel {
/**
* The list of implemented sections.
*/
private ArrayList<String> sectionList;
/**
* Constructor.
*/
public SectionsTableModel() {
sectionList = new ArrayList<String>();
sectionList.addAll(exportFactory.getImplementedSections());
}
@Override
public int getRowCount() {
if (sectionList == null) {
return 0;
}
return sectionList.size();
}
@Override
public int getColumnCount() {
return 2;
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return " ";
case 1:
return "Name";
default:
return "";
}
}
@Override
public Object getValueAt(int row, int column) {
switch (column) {
case 0:
return row + 1;
case 1:
return sectionList.get(row);
default:
return "";
}
}
@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 rowIndex, int columnIndex) {
return false;
}
}
/**
* Table model for the reports table.
*/
private class FeaturesTableModel extends DefaultTableModel {
/**
* Constructor
*/
public FeaturesTableModel() {
}
@Override
public int getRowCount() {
if (featuresList == null) {
return 0;
}
return featuresList.size();
}
@Override
public int getColumnCount() {
return 5;
}
@Override
public String getColumnName(int column) {
switch (column) {
case 0:
return " ";
case 1:
return " ";
case 2:
return "Section";
case 3:
return "Name";
case 4:
return "Description";
default:
return "";
}
}
@Override
public Object getValueAt(int row, int column) {
switch (column) {
case 0:
return row + 1;
case 1:
return isSelected(sectionName, featuresList.get(row));
case 2:
return featuresList.get(row).getFeatureFamily();
case 3:
StringBuilder result = new StringBuilder();
if (result.length() > 0) {
result.append(", ");
}
result.append(featuresList.get(row).getTitle());
return result.toString();
case 4:
return featuresList.get(row).getDescription();
default:
return "";
}
}
@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 rowIndex, int columnIndex) {
return columnIndex == 1;
}
@Override
public void setValueAt(Object aValue, int row, int column) {
setSelected(sectionName, featuresList.get(row), (Boolean) aValue);
}
}
}