Package eu.isas.peptideshaker.gui.exportdialogs

Source Code of eu.isas.peptideshaker.gui.exportdialogs.MzIdentMLExportDialog

package eu.isas.peptideshaker.gui.exportdialogs;

import com.compomics.util.Util;
import com.compomics.util.gui.error_handlers.HelpDialog;
import com.compomics.util.gui.waiting.waitinghandlers.ProgressDialogX;
import eu.isas.peptideshaker.PeptideShaker;
import eu.isas.peptideshaker.export.MzIdentMLExport;
import eu.isas.peptideshaker.gui.PeptideShakerGUI;
import java.awt.Color;
import java.awt.Toolkit;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import javax.swing.*;
import org.xml.sax.SAXException;
import uk.ac.ebi.pride.tools.ErrorHandlerIface;
import uk.ac.ebi.pride.tools.GenericSchemaValidator;
import uk.ac.ebi.pride.tools.ValidationErrorHandler;

/**
* A dialog where the user can export the project to mzIdentML.
*
* @author Harald Barsnes
*/
public class MzIdentMLExportDialog extends javax.swing.JDialog {

    /**
     * A simple progress dialog.
     */
    private static ProgressDialogX progressDialog;
    /**
     * The PeptideShakerGUI main class.
     */
    private PeptideShakerGUI peptideShakerGUI;
    /**
     * If true, the created mzid file will be validated against the mzid 1.1
     * schema.
     */
    private boolean validateMzIdentML = false; // just takes too long if switched on...

    /**
     * Create a new MzIdentMLExportDialog.
     *
     * @param peptideShakerGUI a reference to the main GUI frame
     * @param modal
     */
    public MzIdentMLExportDialog(PeptideShakerGUI peptideShakerGUI, boolean modal) {
        super(peptideShakerGUI, modal);
        this.peptideShakerGUI = peptideShakerGUI;

        initComponents();

        // set gui properties
        setGuiProperties();

        // insert project data
        insertProjectData();

        // validate the input
        validateInput();

        setLocationRelativeTo(peptideShakerGUI);
        setVisible(true);
    }

    /**
     * Set the GUI properties.
     */
    private void setGuiProperties() {

    }

    /**
     * Insert the available project data.
     */
    private void insertProjectData() {

        // use the saved mzIdentML annotation, if any
        contactFirstNameJTextField.setText(peptideShakerGUI.getProjectDetails().getContactFirstName());
        contactLastNameJTextField.setText(peptideShakerGUI.getProjectDetails().getContactLastName());
        contactEmailJTextField.setText(peptideShakerGUI.getProjectDetails().getContactEmail());
        contactAddressJTextField.setText(peptideShakerGUI.getProjectDetails().getContactAddress());
        contactUrlJTextField.setText(peptideShakerGUI.getProjectDetails().getContactUrl());

        organizationNameJTextField.setText(peptideShakerGUI.getProjectDetails().getOrganizationName());
        organizationEmailJTextField.setText(peptideShakerGUI.getProjectDetails().getOrganizationEmail());
        organizationAddressJTextField.setText(peptideShakerGUI.getProjectDetails().getOrganizationAddress());
        organizationUrlJTextField.setText(peptideShakerGUI.getProjectDetails().getOrganizationUrl());

        if (peptideShakerGUI.getProjectDetails().getMzIdentMLOutputFile() != null
                && new File(peptideShakerGUI.getProjectDetails().getMzIdentMLOutputFile()).exists()) {
            outputFolderJTextField.setText(peptideShakerGUI.getProjectDetails().getMzIdentMLOutputFile());
        }
    }

    /**
     * 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() {

        backgroundJPanel = new javax.swing.JPanel();
        contactPanel = new javax.swing.JPanel();
        contactFirstNameLabel = new javax.swing.JLabel();
        contactFirstNameJTextField = new javax.swing.JTextField();
        contactLastNameLabel = new javax.swing.JLabel();
        contactLastNameJTextField = new javax.swing.JTextField();
        contactEmailLabel = new javax.swing.JLabel();
        contactEmailJTextField = new javax.swing.JTextField();
        contactAddressLabel = new javax.swing.JLabel();
        contactAddressJTextField = new javax.swing.JTextField();
        contactUrlLabel = new javax.swing.JLabel();
        contactUrlJTextField = new javax.swing.JTextField();
        organizationPanel = new javax.swing.JPanel();
        organizationNameLabel = new javax.swing.JLabel();
        organizationNameJTextField = new javax.swing.JTextField();
        organizationEmailLabel = new javax.swing.JLabel();
        organizationEmailJTextField = new javax.swing.JTextField();
        organizationAddressLabel = new javax.swing.JLabel();
        organizationAddressJTextField = new javax.swing.JTextField();
        organizationUrlLabel = new javax.swing.JLabel();
        organizationUrlJTextField = new javax.swing.JTextField();
        outputPanel = new javax.swing.JPanel();
        outputFolderLabel = new javax.swing.JLabel();
        outputFolderJTextField = new javax.swing.JTextField();
        browseOutputFolderJButton = new javax.swing.JButton();
        helpLabel = new javax.swing.JLabel();
        openDialogHelpJButton = new javax.swing.JButton();
        convertJButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("PeptideShaker - Export");
        setResizable(false);

        backgroundJPanel.setBackground(new java.awt.Color(230, 230, 230));

        contactPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Contact"));
        contactPanel.setOpaque(false);

        contactFirstNameLabel.setForeground(new java.awt.Color(255, 0, 0));
        contactFirstNameLabel.setText("First Name");

        contactFirstNameJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));
        contactFirstNameJTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                contactFirstNameJTextFieldKeyReleased(evt);
            }
        });

        contactLastNameLabel.setForeground(new java.awt.Color(255, 0, 0));
        contactLastNameLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        contactLastNameLabel.setText("Last Name");

        contactLastNameJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));
        contactLastNameJTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                contactLastNameJTextFieldKeyReleased(evt);
            }
        });

        contactEmailLabel.setForeground(new java.awt.Color(255, 0, 0));
        contactEmailLabel.setText("E-mail");

        contactEmailJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));
        contactEmailJTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                contactEmailJTextFieldKeyReleased(evt);
            }
        });

        contactAddressLabel.setForeground(new java.awt.Color(255, 0, 0));
        contactAddressLabel.setText("Address");

        contactAddressJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));
        contactAddressJTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                contactAddressJTextFieldKeyReleased(evt);
            }
        });

        contactUrlLabel.setText("URL");

        contactUrlJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));
        contactUrlJTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                contactUrlJTextFieldKeyReleased(evt);
            }
        });

        javax.swing.GroupLayout contactPanelLayout = new javax.swing.GroupLayout(contactPanel);
        contactPanel.setLayout(contactPanelLayout);
        contactPanelLayout.setHorizontalGroup(
            contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(contactPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(contactPanelLayout.createSequentialGroup()
                        .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(contactFirstNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(contactEmailLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(contactAddressLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(contactEmailJTextField, javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, contactPanelLayout.createSequentialGroup()
                                .addComponent(contactFirstNameJTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 276, Short.MAX_VALUE)
                                .addGap(18, 18, 18)
                                .addComponent(contactLastNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(contactLastNameJTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 171, Short.MAX_VALUE))
                            .addComponent(contactAddressJTextField)))
                    .addGroup(contactPanelLayout.createSequentialGroup()
                        .addComponent(contactUrlLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(contactUrlJTextField)))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        contactPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {contactFirstNameJTextField, contactLastNameJTextField});

        contactPanelLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {contactFirstNameLabel, contactLastNameLabel});

        contactPanelLayout.setVerticalGroup(
            contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(contactPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(contactFirstNameLabel)
                    .addComponent(contactFirstNameJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(contactLastNameLabel)
                    .addComponent(contactLastNameJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(contactEmailLabel)
                    .addComponent(contactEmailJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(contactAddressLabel)
                    .addComponent(contactAddressJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(contactPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(contactUrlLabel)
                    .addComponent(contactUrlJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        organizationPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Organization"));
        organizationPanel.setOpaque(false);

        organizationNameLabel.setForeground(new java.awt.Color(255, 0, 0));
        organizationNameLabel.setText("Name");

        organizationNameJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));
        organizationNameJTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                organizationNameJTextFieldKeyReleased(evt);
            }
        });

        organizationEmailLabel.setForeground(new java.awt.Color(255, 0, 0));
        organizationEmailLabel.setText("E-mail");

        organizationEmailJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));
        organizationEmailJTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                organizationEmailJTextFieldKeyReleased(evt);
            }
        });

        organizationAddressLabel.setForeground(new java.awt.Color(255, 0, 0));
        organizationAddressLabel.setText("Address");

        organizationAddressJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));
        organizationAddressJTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                organizationAddressJTextFieldKeyReleased(evt);
            }
        });

        organizationUrlLabel.setText("URL");

        organizationUrlJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));
        organizationUrlJTextField.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                organizationUrlJTextFieldKeyReleased(evt);
            }
        });

        javax.swing.GroupLayout organizationPanelLayout = new javax.swing.GroupLayout(organizationPanel);
        organizationPanel.setLayout(organizationPanelLayout);
        organizationPanelLayout.setHorizontalGroup(
            organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(organizationPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(organizationPanelLayout.createSequentialGroup()
                        .addGroup(organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(organizationNameLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(organizationEmailLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(organizationAddressLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(organizationEmailJTextField)
                            .addComponent(organizationNameJTextField)
                            .addComponent(organizationAddressJTextField)))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, organizationPanelLayout.createSequentialGroup()
                        .addComponent(organizationUrlLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(organizationUrlJTextField)))
                .addContainerGap())
        );
        organizationPanelLayout.setVerticalGroup(
            organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(organizationPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(organizationNameLabel)
                    .addComponent(organizationNameJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(organizationEmailLabel)
                    .addComponent(organizationEmailJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(organizationAddressLabel)
                    .addComponent(organizationAddressJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(organizationPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(organizationUrlLabel)
                    .addComponent(organizationUrlJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        outputPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Output File"));
        outputPanel.setOpaque(false);

        outputFolderLabel.setForeground(new java.awt.Color(255, 0, 0));
        outputFolderLabel.setText("File");
        outputFolderLabel.setToolTipText("The file where the mzIdentML export will be saved");

        outputFolderJTextField.setEditable(false);
        outputFolderJTextField.setToolTipText("The folder where the mzIdentML file will be saved");
        outputFolderJTextField.setMargin(new java.awt.Insets(2, 4, 2, 2));

        browseOutputFolderJButton.setText("Browse");
        browseOutputFolderJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                browseOutputFolderJButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout outputPanelLayout = new javax.swing.GroupLayout(outputPanel);
        outputPanel.setLayout(outputPanelLayout);
        outputPanelLayout.setHorizontalGroup(
            outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, outputPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(outputFolderLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(outputFolderJTextField)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(browseOutputFolderJButton, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        outputPanelLayout.setVerticalGroup(
            outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(outputPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(outputPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(outputFolderLabel)
                    .addComponent(outputFolderJTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(browseOutputFolderJButton))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        helpLabel.setFont(helpLabel.getFont().deriveFont((helpLabel.getFont().getStyle() | java.awt.Font.ITALIC)));
        helpLabel.setText("Insert the required information and click Convert to export the project to mzIdentML.");

        openDialogHelpJButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/icons/help.GIF"))); // NOI18N
        openDialogHelpJButton.setToolTipText("Help");
        openDialogHelpJButton.setBorder(null);
        openDialogHelpJButton.setBorderPainted(false);
        openDialogHelpJButton.setContentAreaFilled(false);
        openDialogHelpJButton.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(java.awt.event.MouseEvent evt) {
                openDialogHelpJButtonMouseEntered(evt);
            }
            public void mouseExited(java.awt.event.MouseEvent evt) {
                openDialogHelpJButtonMouseExited(evt);
            }
        });
        openDialogHelpJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                openDialogHelpJButtonActionPerformed(evt);
            }
        });

        convertJButton.setBackground(new java.awt.Color(0, 153, 0));
        convertJButton.setFont(convertJButton.getFont().deriveFont(convertJButton.getFont().getStyle() | java.awt.Font.BOLD));
        convertJButton.setForeground(new java.awt.Color(255, 255, 255));
        convertJButton.setText("Convert!");
        convertJButton.setToolTipText("Click here to start the conversion!");
        convertJButton.setEnabled(false);
        convertJButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                convertJButtonActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout backgroundJPanelLayout = new javax.swing.GroupLayout(backgroundJPanel);
        backgroundJPanel.setLayout(backgroundJPanelLayout);
        backgroundJPanelLayout.setHorizontalGroup(
            backgroundJPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(backgroundJPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(backgroundJPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(backgroundJPanelLayout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(openDialogHelpJButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(helpLabel)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(convertJButton, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(15, 15, 15))
                    .addComponent(outputPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(backgroundJPanelLayout.createSequentialGroup()
                        .addGroup(backgroundJPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(organizationPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(contactPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        backgroundJPanelLayout.setVerticalGroup(
            backgroundJPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(backgroundJPanelLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(contactPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(organizationPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(outputPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(backgroundJPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(openDialogHelpJButton)
                    .addComponent(helpLabel)
                    .addComponent(convertJButton, javax.swing.GroupLayout.PREFERRED_SIZE, 53, 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(backgroundJPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(backgroundJPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    /**
     * Change the cursor to a hand cursor.
     *
     * @param evt
     */
    private void openDialogHelpJButtonMouseEntered(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openDialogHelpJButtonMouseEntered
        setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
    }//GEN-LAST:event_openDialogHelpJButtonMouseEntered

    /**
     * Change the cursor back to the default cursor.
     *
     * @param evt
     */
    private void openDialogHelpJButtonMouseExited(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_openDialogHelpJButtonMouseExited
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_openDialogHelpJButtonMouseExited

    /**
     * Open the help dialog.
     *
     * @param evt
     */
    private void openDialogHelpJButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openDialogHelpJButtonActionPerformed
        setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
        new HelpDialog(peptideShakerGUI, getClass().getResource("/helpFiles/mzIdentMLExportDialog.html"),
                Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/help.GIF")),
                Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/peptide-shaker.gif")),
                "PeptideShaker - Help");
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_openDialogHelpJButtonActionPerformed

    /**
     * Opens a file chooser where the user can select the output file.
     *
     * @param evt
     */
    private void browseOutputFolderJButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseOutputFolderJButtonActionPerformed
        this.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));

        File selectedFile = Util.getUserSelectedFile(this, ".mzid", "(mzIdentML file) *.mzid", "Select Export File", peptideShakerGUI.getLastSelectedFolder(), false);

        if (selectedFile != null) {
            String path = selectedFile.getAbsolutePath();

            if (!path.endsWith(".mzid")) {
                path += ".mzid";
            }

            peptideShakerGUI.setLastSelectedFolder(selectedFile.getParentFile().getAbsolutePath());
            outputFolderJTextField.setText(path);
        }

        validateInput();

        this.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
    }//GEN-LAST:event_browseOutputFolderJButtonActionPerformed

    /**
     * @see #validateInput()
     */
    private void contactFirstNameJTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_contactFirstNameJTextFieldKeyReleased
        validateInput();
    }//GEN-LAST:event_contactFirstNameJTextFieldKeyReleased

    /**
     * @see #validateInput()
     */
    private void contactLastNameJTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_contactLastNameJTextFieldKeyReleased
        validateInput();
    }//GEN-LAST:event_contactLastNameJTextFieldKeyReleased

    /**
     * @see #validateInput()
     */
    private void contactEmailJTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_contactEmailJTextFieldKeyReleased
        validateInput();
    }//GEN-LAST:event_contactEmailJTextFieldKeyReleased

    /**
     * Convert the project to an mzIdentML file.
     *
     * @param evt
     */
    private void convertJButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_convertJButtonActionPerformed

        final File finalOutputFile = new File(outputFolderJTextField.getText());

        progressDialog = new ProgressDialogX(peptideShakerGUI,
                Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/peptide-shaker.gif")),
                Toolkit.getDefaultToolkit().getImage(getClass().getResource("/icons/peptide-shaker-orange.gif")),
                true);
        progressDialog.setPrimaryProgressCounterIndeterminate(true);

        progressDialog.setTitle("Exporting mzIdentML. Please Wait...");

        new Thread(new Runnable() {
            public void run() {
                try {
                    progressDialog.setVisible(true);
                } catch (IndexOutOfBoundsException e) {
                    // ignore
                }
            }
        }, "ProgressDialog").start();

        new Thread("ConvertThread") {
            @Override
            public void run() {

                // save the inserted mzid details with the project
                peptideShakerGUI.getProjectDetails().setContactFirstName(contactFirstNameJTextField.getText().trim());
                peptideShakerGUI.getProjectDetails().setContactLastName(contactLastNameJTextField.getText().trim());
                peptideShakerGUI.getProjectDetails().setContactEmail(contactEmailJTextField.getText().trim());
                peptideShakerGUI.getProjectDetails().setContactAddress(contactAddressJTextField.getText().trim());
                if (!contactUrlJTextField.getText().trim().isEmpty()) {
                    peptideShakerGUI.getProjectDetails().setContactUrl(contactUrlJTextField.getText().trim());
                } else {
                    peptideShakerGUI.getProjectDetails().setContactUrl(null);
                }

                peptideShakerGUI.getProjectDetails().setOrganizationName(organizationNameJTextField.getText().trim());
                peptideShakerGUI.getProjectDetails().setOrganizationEmail(organizationEmailJTextField.getText().trim());
                peptideShakerGUI.getProjectDetails().setOrganizationAddress(organizationAddressJTextField.getText().trim());
                if (!organizationUrlJTextField.getText().trim().isEmpty()) {
                    peptideShakerGUI.getProjectDetails().setOrganizationUrl(organizationUrlJTextField.getText().trim());
                } else {
                    peptideShakerGUI.getProjectDetails().setOrganizationUrl(null);
                }

                peptideShakerGUI.getProjectDetails().setMzIdentOutputFile(outputFolderJTextField.getText());
                peptideShakerGUI.setDataSaved(false); // @TODO: this might not always be true, e.g., if nothing has changed, but better than not saving at all

                boolean conversionCompleted = false;

                try {
                    MzIdentMLExport mzIdentMLExport = new MzIdentMLExport(PeptideShaker.getVersion(), peptideShakerGUI.getIdentification(), peptideShakerGUI.getProjectDetails(),
                            peptideShakerGUI.getProcessingPreferences(), peptideShakerGUI.getSearchParameters(), peptideShakerGUI.getPtmScoringPreferences(),
                            peptideShakerGUI.getSpectrumCountingPreferences(), peptideShakerGUI.getIdentificationFeaturesGenerator(),
                            peptideShakerGUI.getAnnotationPreferences(), peptideShakerGUI.getSequenceMatchingPreferences(), finalOutputFile, progressDialog);
                    mzIdentMLExport.createMzIdentMLFile(false);

                    // validate the mzidentml file
                    if (validateMzIdentML && !progressDialog.isRunCanceled()) {
                        progressDialog.setPrimaryProgressCounterIndeterminate(true);
                        progressDialog.setTitle("Validating mzIdentML. Please Wait...");
                        String errors = validateMzIdentML(finalOutputFile);

                        // see if any errors were found, and display them to the user
                        if (!errors.isEmpty()) {
                            JOptionPane.showMessageDialog(null, errors, "PRIDE XML Errors", JOptionPane.ERROR_MESSAGE);
                        } else {
                            conversionCompleted = true;
                        }
                    } else {
                        conversionCompleted = true;
                    }

                } catch (Exception e) {
                    peptideShakerGUI.catchException(e);
                    progressDialog.setRunCanceled();
                    progressDialog.dispose();
                    return;
                }

                // close the progress dialog
                boolean processCancelled = progressDialog.isRunCanceled();
                progressDialog.setRunFinished();

                // display a conversion complete message to the user
                if (conversionCompleted && !processCancelled) {
                    JOptionPane.showMessageDialog(MzIdentMLExportDialog.this, "mzIdentML file \'"
                            + new File(outputFolderJTextField.getText()).getAbsolutePath() + "\' created.",
                            "mzIdentML File Created", JOptionPane.INFORMATION_MESSAGE);
                    dispose();
                }

                if (processCancelled) {
                    JOptionPane.showMessageDialog(peptideShakerGUI, "mzIdentML conversion cancelled by the user.", "mzIdentML Conversion Cancelled", JOptionPane.WARNING_MESSAGE);
                }
            }
        }.start();
    }//GEN-LAST:event_convertJButtonActionPerformed

    /**
     * @see #validateInput()
     */
    private void contactUrlJTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_contactUrlJTextFieldKeyReleased
        validateInput();
    }//GEN-LAST:event_contactUrlJTextFieldKeyReleased

    /**
     * @see #validateInput()
     */
    private void organizationNameJTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_organizationNameJTextFieldKeyReleased
        validateInput();
    }//GEN-LAST:event_organizationNameJTextFieldKeyReleased

    /**
     * @see #validateInput()
     */
    private void organizationEmailJTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_organizationEmailJTextFieldKeyReleased
        validateInput();
    }//GEN-LAST:event_organizationEmailJTextFieldKeyReleased

    /**
     * @see #validateInput()
     */
    private void organizationUrlJTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_organizationUrlJTextFieldKeyReleased
        validateInput();
    }//GEN-LAST:event_organizationUrlJTextFieldKeyReleased

    /**
     * @see #validateInput()
     */
    private void contactAddressJTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_contactAddressJTextFieldKeyReleased
        validateInput();
    }//GEN-LAST:event_contactAddressJTextFieldKeyReleased

    /**
     * @see #validateInput()
     */
    private void organizationAddressJTextFieldKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_organizationAddressJTextFieldKeyReleased
        validateInput();
    }//GEN-LAST:event_organizationAddressJTextFieldKeyReleased

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel backgroundJPanel;
    private javax.swing.JButton browseOutputFolderJButton;
    private javax.swing.JTextField contactAddressJTextField;
    private javax.swing.JLabel contactAddressLabel;
    private javax.swing.JTextField contactEmailJTextField;
    private javax.swing.JLabel contactEmailLabel;
    private javax.swing.JTextField contactFirstNameJTextField;
    private javax.swing.JLabel contactFirstNameLabel;
    private javax.swing.JTextField contactLastNameJTextField;
    private javax.swing.JLabel contactLastNameLabel;
    private javax.swing.JPanel contactPanel;
    private javax.swing.JTextField contactUrlJTextField;
    private javax.swing.JLabel contactUrlLabel;
    private javax.swing.JButton convertJButton;
    private javax.swing.JLabel helpLabel;
    private javax.swing.JButton openDialogHelpJButton;
    private javax.swing.JTextField organizationAddressJTextField;
    private javax.swing.JLabel organizationAddressLabel;
    private javax.swing.JTextField organizationEmailJTextField;
    private javax.swing.JLabel organizationEmailLabel;
    private javax.swing.JTextField organizationNameJTextField;
    private javax.swing.JLabel organizationNameLabel;
    private javax.swing.JPanel organizationPanel;
    private javax.swing.JTextField organizationUrlJTextField;
    private javax.swing.JLabel organizationUrlLabel;
    private javax.swing.JTextField outputFolderJTextField;
    private javax.swing.JLabel outputFolderLabel;
    private javax.swing.JPanel outputPanel;
    // End of variables declaration//GEN-END:variables

    /**
     * Validates that the required input has been inserted and enables or
     * disables the Convert button.
     */
    private void validateInput() {

        boolean inputValid = true;

        if (contactFirstNameJTextField.getText().length() == 0
                || contactLastNameJTextField.getText().length() == 0
                || contactEmailJTextField.getText().length() == 0
                || contactAddressJTextField.getText().length() == 0
                || organizationNameJTextField.getText().length() == 0
                || organizationEmailJTextField.getText().length() == 0
                || organizationAddressJTextField.getText().length() == 0
                || outputFolderJTextField.getText().length() == 0) {
            inputValid = false;
        }

        convertJButton.setEnabled(inputValid);

        // highlight the fields that have not been filled
        if (contactFirstNameJTextField.getText().length() > 0) {
            contactFirstNameLabel.setForeground(Color.BLACK);
        } else {
            contactFirstNameLabel.setForeground(Color.RED);
        }

        if (contactLastNameJTextField.getText().length() > 0) {
            contactLastNameLabel.setForeground(Color.BLACK);
        } else {
            contactLastNameLabel.setForeground(Color.RED);
        }

        if (contactEmailJTextField.getText().length() > 0) {
            contactEmailLabel.setForeground(Color.BLACK);
        } else {
            contactEmailLabel.setForeground(Color.RED);
        }

        if (contactAddressJTextField.getText().length() > 0) {
            contactAddressLabel.setForeground(Color.BLACK);
        } else {
            contactAddressLabel.setForeground(Color.RED);
        }

        if (organizationNameJTextField.getText().length() > 0) {
            organizationNameLabel.setForeground(Color.BLACK);
        } else {
            organizationNameLabel.setForeground(Color.RED);
        }

        if (organizationEmailJTextField.getText().length() > 0) {
            organizationEmailLabel.setForeground(Color.BLACK);
        } else {
            organizationEmailLabel.setForeground(Color.RED);
        }

        if (organizationAddressJTextField.getText().length() > 0) {
            organizationAddressLabel.setForeground(Color.BLACK);
        } else {
            organizationAddressLabel.setForeground(Color.RED);
        }

        if (outputFolderJTextField.getText().length() > 0) {
            outputFolderLabel.setForeground(Color.BLACK);
        } else {
            outputFolderLabel.setForeground(Color.RED);
        }
    }

    /**
     * Returns true if the user has canceled the progress.
     *
     * @return true if the user has canceled the progress
     */
    public boolean progressCancelled() {
        return progressDialog.isRunCanceled();
    }

    /**
     * Validates the mzIdentML file according to the schema.
     *
     * @param mzidFile the file to validate
     * @return the error messages, if any
     * @throws SAXException
     * @throws MalformedURLException
     * @throws FileNotFoundException
     * @throws URISyntaxException
     */
    private String validateMzIdentML(File mzidFile) throws SAXException, MalformedURLException, FileNotFoundException, URISyntaxException {

        String errors = "";

        GenericSchemaValidator genericValidator = new GenericSchemaValidator();
        genericValidator.setSchema(new URI("http://www.psidev.info/files/mzIdentML1.1.0.xsd"));

        ErrorHandlerIface handler = new ValidationErrorHandler();
        genericValidator.setErrorHandler(handler);
        BufferedReader br = new BufferedReader(new FileReader(mzidFile));
        genericValidator.validate(br);

        //noinspection unchecked
        List<String> errorMsgs = handler.getErrorMessages();
        if (!errorMsgs.isEmpty()) {
            int errorCount = 0;
            for (String error : errorMsgs) {
                errors += ++errorCount + ": " + error + "\n\n";
                System.out.println(errorCount + ": " + error);
            }
        }

        return errors;
    }
}
TOP

Related Classes of eu.isas.peptideshaker.gui.exportdialogs.MzIdentMLExportDialog

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.