/* * $Id: AlignWindow.java,v 1.2 2006/02/03 03:46:48 ahmed Exp $ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jaligner.ui; import jaligner.Alignment; import jaligner.Sequence; import jaligner.SmithWatermanGotoh; import jaligner.example.SmithWatermanGotohExample; import jaligner.formats.CLUSTAL; import jaligner.formats.FASTA; import jaligner.formats.FormatFactory; import jaligner.formats.Pair; import jaligner.matrix.Matrix; import jaligner.matrix.MatrixLoader; import jaligner.ui.clipboard.ClipboardListener; import jaligner.ui.clipboard.ClipboardPoller; import jaligner.ui.filechooser.FileChooserFactory; import jaligner.ui.filechooser.NamedInputStream; import jaligner.ui.images.ToolbarIcons; import jaligner.ui.logging.DocumentHandler; import jaligner.ui.util.TextComponentUtil; import jaligner.ui.util.TextComponentUtilException; import jaligner.util.Commons; import jaligner.util.SequenceParser; import java.awt.Color; import java.awt.Component; import java.awt.Cursor; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import java.net.URL; import java.text.DecimalFormat; import java.util.Collection; import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.AbstractAction; import javax.swing.AbstractButton; import javax.swing.Action; import javax.swing.JComboBox; import javax.swing.JFormattedTextField; import javax.swing.JOptionPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.event.CaretEvent; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.JTextComponent; /** * Graphical user inteface for JAligner. * * @author Ahmed Moustafa (ahmed@users.sf.net) */ public class AlignWindow extends javax.swing.JFrame implements ClipboardListener, DocumentListener { /** * */ private static final long serialVersionUID = 3257844376876364850L; /** * Window width */ private static final int WINDOW_WIDTH = 800; /** * Window height */ private static final int WINDOW_HEIGHT = 600; /** * Default open gap penalty */ private static final float DEFAULT_OPEN_GAP_PENALTY = 10f; /** * Default extend gap penalty */ private static final float DEFAULT_EXTEND_GAP_PENALTY = 0.5f; /** * Default scoring matrix */ private static final String DEFAULT_SCORING_MATRIX = "BLOSUM62"; /** * Logger */ private static final Logger logger = Logger.getLogger(AlignWindow.class.getName()); /** * Clipboard poller thread */ private ClipboardPoller clipboardPoller = null; /** * Loaded scoring matrices */ private HashMap matrices = new HashMap(); /** * Current text component */ private JTextComponent currentTextComponent = null; // The actions public Action nextFocusAction = new AbstractAction("Move Focus Forwards") { /** * */ private static final long serialVersionUID = 3763091972940183858L; public void actionPerformed(ActionEvent evt) { ((Component)evt.getSource()).transferFocus(); } }; public Action prevFocusAction = new AbstractAction("Move Focus Backwards") { /** * */ private static final long serialVersionUID = 3257844402628997943L; public void actionPerformed(ActionEvent evt) { ((Component)evt.getSource()).transferFocusBackward(); } }; /** * Constructor */ public AlignWindow() { initComponents(); logger.addHandler(new DocumentHandler(jTextPaneConsole)); try { // Set the icon for the frame URL url = getClass().getResource( ToolbarIcons.GIFS_HOME + "jaligner.gif"); if (url != null) { Image image = java.awt.Toolkit.getDefaultToolkit().getImage(url); setIconImage(image); } else { logger.warning("Image URL is NULL"); } } catch (Exception e) { logger.log(Level.WARNING, "Failed setting the frame image: " + e.getMessage(), e); } jMenuItemFileOpen.setVisible(false); jFormattedTextFieldGapOpen.setValue(new Float(DEFAULT_OPEN_GAP_PENALTY)); jFormattedTextFieldGapExtend.setValue(new Float(DEFAULT_EXTEND_GAP_PENALTY)); Collection matrices = null; try { matrices = MatrixLoader.list(false); } catch (Exception e) { logger.log(Level.WARNING, "Failed getting list of scoring matrices: " + e.getMessage(), e); } if (matrices != null) { populateComboBox(jComboBoxScoringMatrix, matrices, DEFAULT_SCORING_MATRIX); } FormatFactory.getInstance().registerFormat(new CLUSTAL()); FormatFactory.getInstance().registerFormat(new Pair()); FormatFactory.getInstance().registerFormat(new FASTA()); Collection formats = FormatFactory.getInstance().getFormats(); String[] outputFormats = new String[formats.size()]; Iterator i = formats.iterator(); for (int j = 0; i.hasNext(); j++) { outputFormats[j] = (String) i.next(); } populateComboBox(jComboBoxOutputFormat, outputFormats, null); jTextAreaSequence1.getDocument().addDocumentListener(this); jTextAreaSequence2.getDocument().addDocumentListener(this); jTextAreaAlignment.getDocument().addDocumentListener(this); // Add actions jTextAreaSequence1.getInputMap().put(KeyStroke.getKeyStroke("TAB"), nextFocusAction.getClass().getName()); jTextAreaSequence1.getActionMap().put(nextFocusAction.getClass().getName(), nextFocusAction); jTextAreaSequence1.getInputMap().put(KeyStroke.getKeyStroke("shift TAB"), prevFocusAction.getClass().getName()); jTextAreaSequence1.getActionMap().put(prevFocusAction.getClass().getName(), prevFocusAction); jTextAreaSequence2.getInputMap().put(KeyStroke.getKeyStroke("TAB"), nextFocusAction.getClass().getName()); jTextAreaSequence2.getActionMap().put(nextFocusAction.getClass().getName(), nextFocusAction); jTextAreaSequence2.getInputMap().put(KeyStroke.getKeyStroke("shift TAB"), prevFocusAction.getClass().getName()); jTextAreaSequence2.getActionMap().put(prevFocusAction.getClass().getName(), prevFocusAction); // Add radio buttons to group buttonGroupSequences.add(jRadioButtonSequence1); buttonGroupSequences.add(jRadioButtonSequence2); buttonGroupSequences.add(jRadioButtonAlignment); buttonGroupSequences.add(jRadioButtonConsole); // Split the space jSplitPaneBody.setResizeWeight(.9D); jSplitPaneIO.setResizeWeight(.5D); jSplitPaneSequences.setResizeWeight(.5D); // Set the focus on the text area for sequence #1 jTextAreaSequence1.requestFocus(); // Start the clipboard checker clipboardPoller = new ClipboardPoller(this); clipboardPoller.start(); // Hide the print menu item in under the File menu jMenuItemFilePrint.setVisible(false); // Set the frame size this.setSize(WINDOW_WIDTH, WINDOW_HEIGHT); } private void initComponents() {//GEN-BEGIN:initComponents jPopup = new javax.swing.JPopupMenu(); jPopupOpen = new javax.swing.JMenuItem(); jPopupSave = new javax.swing.JMenuItem(); jPopupSeparator1 = new javax.swing.JSeparator(); jPopupCut = new javax.swing.JMenuItem(); jPopupCopy = new javax.swing.JMenuItem(); jPopupPaste = new javax.swing.JMenuItem(); jPopupDelete = new javax.swing.JMenuItem(); jPopupSeparator2 = new javax.swing.JSeparator(); jPopupPrint = new javax.swing.JMenuItem(); jPopupSeparator3 = new javax.swing.JSeparator(); jPopupSelectAll = new javax.swing.JMenuItem(); buttonGroupSequences = new javax.swing.ButtonGroup(); jToolBar = new javax.swing.JToolBar(); jButtonOpen = new javax.swing.JButton(); jButtonSave = new javax.swing.JButton(); jButtonCut = new javax.swing.JButton(); jButtonCopy = new javax.swing.JButton(); jButtonPaste = new javax.swing.JButton(); jButtonDelete = new javax.swing.JButton(); jButtonPrint = new javax.swing.JButton(); jButtonExit = new javax.swing.JButton(); jSplitPaneBody = new javax.swing.JSplitPane(); jSplitPaneIO = new javax.swing.JSplitPane(); jSplitPaneSequences = new javax.swing.JSplitPane(); jPanelSequence1 = new javax.swing.JPanel(); jScrollPaneSequence1 = new javax.swing.JScrollPane(); jTextAreaSequence1 = new javax.swing.JTextArea(); jRadioButtonSequence1 = new javax.swing.JRadioButton(); jPanelSequence2 = new javax.swing.JPanel(); jScrollPaneSequence2 = new javax.swing.JScrollPane(); jTextAreaSequence2 = new javax.swing.JTextArea(); jRadioButtonSequence2 = new javax.swing.JRadioButton(); jPanelAlignment = new javax.swing.JPanel(); jRadioButtonAlignment = new javax.swing.JRadioButton(); jScrollPaneAlignment = new javax.swing.JScrollPane(); jTextAreaAlignment = new javax.swing.JTextArea(); jPanelConsole = new javax.swing.JPanel(); jRadioButtonConsole = new javax.swing.JRadioButton(); jScrollPaneConsole = new javax.swing.JScrollPane(); jTextPaneConsole = new javax.swing.JTextPane(); jPanelControls = new javax.swing.JPanel(); jPanelScoringMatrix = new javax.swing.JPanel(); jLabelScoringMatrix = new javax.swing.JLabel(); jComboBoxScoringMatrix = new javax.swing.JComboBox(); jPanelGapOpen = new javax.swing.JPanel(); jLabelOpenGapPenalty = new javax.swing.JLabel(); jFormattedTextFieldGapOpen = new JFormattedTextField(new DecimalFormat("##0.0##")); jPanelGapExtend = new javax.swing.JPanel(); jLabelExtendGapPenalty = new javax.swing.JLabel(); jFormattedTextFieldGapExtend = new JFormattedTextField(new DecimalFormat("##0.0##")); jPanelOutputFormat = new javax.swing.JPanel(); jLabelOutputFormat = new javax.swing.JLabel(); jComboBoxOutputFormat = new javax.swing.JComboBox(); jPanelGo = new javax.swing.JPanel(); jButtonGo = new javax.swing.JButton(); jMenuBar = new javax.swing.JMenuBar(); jMenuFile = new javax.swing.JMenu(); jMenuItemFileOpen = new javax.swing.JMenuItem(); jMenuItemFileLoadSequence1 = new javax.swing.JMenuItem(); jMenuItemFileLoadSequence2 = new javax.swing.JMenuItem(); jMenuItemFileLoadMatrix = new javax.swing.JMenuItem(); jSeparatorFile = new javax.swing.JSeparator(); jMenuItemFileExit = new javax.swing.JMenuItem(); jMenuItemFilePrint = new javax.swing.JMenuItem(); jMenuEdit = new javax.swing.JMenu(); jMenuItemEditCut = new javax.swing.JMenuItem(); jMenuItemEditCopy = new javax.swing.JMenuItem(); jMenuItemEditPaste = new javax.swing.JMenuItem(); jMenuItemEditDelete = new javax.swing.JMenuItem(); jMenuItemEditSelectAll = new javax.swing.JMenuItem(); jMenuTools = new javax.swing.JMenu(); jMenuItemToolsRunExample = new javax.swing.JMenuItem(); jMenuHelp = new javax.swing.JMenu(); jMenuItemAbout = new javax.swing.JMenuItem(); jPopupOpen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK)); jPopupOpen.setIcon(ToolbarIcons.OPEN); jPopupOpen.setMnemonic('O'); jPopupOpen.setText("Open..."); jPopupOpen.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jPopupOpenActionPerformed(evt); } }); jPopup.add(jPopupOpen); jPopupSave.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK)); jPopupSave.setIcon(ToolbarIcons.SAVE); jPopupSave.setMnemonic('S'); jPopupSave.setText("Save..."); jPopupSave.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jPopupSaveActionPerformed(evt); } }); jPopup.add(jPopupSave); jPopup.add(jPopupSeparator1); jPopupCut.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK)); jPopupCut.setIcon(ToolbarIcons.CUT); jPopupCut.setMnemonic('t'); jPopupCut.setText("Cut"); jPopupCut.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jPopupCutActionPerformed(evt); } }); jPopup.add(jPopupCut); jPopupCopy.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK)); jPopupCopy.setIcon(ToolbarIcons.COPY); jPopupCopy.setMnemonic('C'); jPopupCopy.setText("Copy"); jPopupCopy.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jPopupCopyActionPerformed(evt); } }); jPopup.add(jPopupCopy); jPopupPaste.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK)); jPopupPaste.setIcon(ToolbarIcons.PASTE); jPopupPaste.setMnemonic('P'); jPopupPaste.setText("Paste"); jPopupPaste.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jPopupPasteActionPerformed(evt); } }); jPopup.add(jPopupPaste); jPopupDelete.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE, 0)); jPopupDelete.setIcon(ToolbarIcons.DELETE); jPopupDelete.setMnemonic('D'); jPopupDelete.setText("Delete"); jPopupDelete.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jPopupDeleteActionPerformed(evt); } }); jPopup.add(jPopupDelete); jPopup.add(jPopupSeparator2); jPopupPrint.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK)); jPopupPrint.setIcon(ToolbarIcons.PRINT); jPopupPrint.setMnemonic('D'); jPopupPrint.setText("Print"); jPopupPrint.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jPopupPrintActionPerformed(evt); } }); jPopup.add(jPopupPrint); jPopup.add(jPopupSeparator3); jPopupSelectAll.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK)); jPopupSelectAll.setMnemonic('A'); jPopupSelectAll.setText("Select All"); jPopupSelectAll.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jPopupSelectAllActionPerformed(evt); } }); jPopup.add(jPopupSelectAll); setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); setTitle("JAligner - biological pairwise sequence alignment <http://jaligner.sf.net>"); setName("AlignWindow"); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); jButtonOpen.setIcon(ToolbarIcons.OPEN); jButtonOpen.setToolTipText("Open..."); jButtonOpen.setFocusable(false); jButtonOpen.setPreferredSize(new java.awt.Dimension(24, 24)); jButtonOpen.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonOpenActionPerformed(evt); } }); jToolBar.add(jButtonOpen); jButtonSave.setIcon(ToolbarIcons.SAVE); jButtonSave.setToolTipText("Save..."); jButtonSave.setFocusable(false); jButtonSave.setPreferredSize(new java.awt.Dimension(24, 24)); jButtonSave.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonSaveActionPerformed(evt); } }); jToolBar.add(jButtonSave); jButtonCut.setIcon(ToolbarIcons.CUT); jButtonCut.setToolTipText("Cut"); jButtonCut.setFocusable(false); jButtonCut.setPreferredSize(new java.awt.Dimension(24, 24)); jButtonCut.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonCutActionPerformed(evt); } }); jToolBar.add(jButtonCut); jButtonCopy.setIcon(ToolbarIcons.COPY); jButtonCopy.setToolTipText("Copy"); jButtonCopy.setFocusable(false); jButtonCopy.setPreferredSize(new java.awt.Dimension(24, 24)); jButtonCopy.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonCopyActionPerformed(evt); } }); jToolBar.add(jButtonCopy); jButtonPaste.setIcon(ToolbarIcons.PASTE); jButtonPaste.setToolTipText("Paste"); jButtonPaste.setFocusable(false); jButtonPaste.setPreferredSize(new java.awt.Dimension(24, 24)); jButtonPaste.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonPasteActionPerformed(evt); } }); jToolBar.add(jButtonPaste); jButtonDelete.setIcon(ToolbarIcons.DELETE); jButtonDelete.setToolTipText("Delete"); jButtonDelete.setFocusable(false); jButtonDelete.setPreferredSize(new java.awt.Dimension(24, 24)); jButtonDelete.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonDeleteActionPerformed(evt); } }); jToolBar.add(jButtonDelete); jButtonPrint.setIcon(ToolbarIcons.PRINT); jButtonPrint.setToolTipText("Print"); jButtonPrint.setFocusable(false); jButtonPrint.setPreferredSize(new java.awt.Dimension(24, 24)); jButtonPrint.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonPrintActionPerformed(evt); } }); jToolBar.add(jButtonPrint); jButtonExit.setIcon(ToolbarIcons.CLOSE); jButtonExit.setToolTipText("Exit"); jButtonExit.setFocusable(false); jButtonExit.setPreferredSize(new java.awt.Dimension(24, 24)); jButtonExit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonExitActionPerformed(evt); } }); jToolBar.add(jButtonExit); getContentPane().add(jToolBar, java.awt.BorderLayout.NORTH); jSplitPaneBody.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jSplitPaneBody.setOneTouchExpandable(true); jSplitPaneIO.setOneTouchExpandable(true); jSplitPaneSequences.setOrientation(javax.swing.JSplitPane.VERTICAL_SPLIT); jSplitPaneSequences.setOneTouchExpandable(true); jPanelSequence1.setLayout(new java.awt.BorderLayout()); jScrollPaneSequence1.setPreferredSize(new java.awt.Dimension(400, 50)); jTextAreaSequence1.setFont(new java.awt.Font("DialogInput", 0, 12)); jTextAreaSequence1.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { jTextAreaSequence1FocusGained(evt); } }); jTextAreaSequence1.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTextAreaSequence1MouseClicked(evt); } }); jTextAreaSequence1.addCaretListener(new javax.swing.event.CaretListener() { public void caretUpdate(javax.swing.event.CaretEvent evt) { jTextAreaSequence1CaretUpdate(evt); } }); jScrollPaneSequence1.setViewportView(jTextAreaSequence1); jPanelSequence1.add(jScrollPaneSequence1, java.awt.BorderLayout.CENTER); jRadioButtonSequence1.setMnemonic('1'); jRadioButtonSequence1.setText("Sequence #1"); jRadioButtonSequence1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButtonSequence1ActionPerformed(evt); } }); jPanelSequence1.add(jRadioButtonSequence1, java.awt.BorderLayout.NORTH); jSplitPaneSequences.setTopComponent(jPanelSequence1); jPanelSequence2.setLayout(new java.awt.BorderLayout()); jScrollPaneSequence2.setPreferredSize(new java.awt.Dimension(400, 50)); jTextAreaSequence2.setFont(new java.awt.Font("DialogInput", 0, 12)); jTextAreaSequence2.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { jTextAreaSequence2FocusGained(evt); } }); jTextAreaSequence2.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTextAreaSequence2MouseClicked(evt); } }); jTextAreaSequence2.addCaretListener(new javax.swing.event.CaretListener() { public void caretUpdate(javax.swing.event.CaretEvent evt) { jTextAreaSequence2CaretUpdate(evt); } }); jScrollPaneSequence2.setViewportView(jTextAreaSequence2); jPanelSequence2.add(jScrollPaneSequence2, java.awt.BorderLayout.CENTER); jRadioButtonSequence2.setMnemonic('2'); jRadioButtonSequence2.setText("Sequence #2"); jRadioButtonSequence2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButtonSequence2ActionPerformed(evt); } }); jPanelSequence2.add(jRadioButtonSequence2, java.awt.BorderLayout.NORTH); jSplitPaneSequences.setBottomComponent(jPanelSequence2); jSplitPaneIO.setLeftComponent(jSplitPaneSequences); jPanelAlignment.setLayout(new java.awt.BorderLayout()); jRadioButtonAlignment.setMnemonic('A'); jRadioButtonAlignment.setText("Alignment"); jRadioButtonAlignment.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButtonAlignmentActionPerformed(evt); } }); jPanelAlignment.add(jRadioButtonAlignment, java.awt.BorderLayout.NORTH); jScrollPaneAlignment.setPreferredSize(new java.awt.Dimension(400, 50)); jTextAreaAlignment.setEditable(false); jTextAreaAlignment.setFont(new java.awt.Font("DialogInput", 0, 12)); jTextAreaAlignment.setTabSize(0); jTextAreaAlignment.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { jTextAreaAlignmentFocusGained(evt); } }); jTextAreaAlignment.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTextAreaAlignmentMouseClicked(evt); } }); jTextAreaAlignment.addCaretListener(new javax.swing.event.CaretListener() { public void caretUpdate(javax.swing.event.CaretEvent evt) { jTextAreaAlignmentCaretUpdate(evt); } }); jScrollPaneAlignment.setViewportView(jTextAreaAlignment); jPanelAlignment.add(jScrollPaneAlignment, java.awt.BorderLayout.CENTER); jSplitPaneIO.setRightComponent(jPanelAlignment); jSplitPaneBody.setTopComponent(jSplitPaneIO); jPanelConsole.setLayout(new java.awt.BorderLayout()); jRadioButtonConsole.setMnemonic('C'); jRadioButtonConsole.setText("Console"); jRadioButtonConsole.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jRadioButtonConsoleActionPerformed(evt); } }); jPanelConsole.add(jRadioButtonConsole, java.awt.BorderLayout.NORTH); jScrollPaneConsole.setPreferredSize(new java.awt.Dimension(400, 50)); jTextPaneConsole.setEditable(false); jTextPaneConsole.addFocusListener(new java.awt.event.FocusAdapter() { public void focusGained(java.awt.event.FocusEvent evt) { jTextPaneConsoleFocusGained(evt); } }); jTextPaneConsole.addMouseListener(new java.awt.event.MouseAdapter() { public void mouseClicked(java.awt.event.MouseEvent evt) { jTextPaneConsoleMouseClicked(evt); } }); jTextPaneConsole.addCaretListener(new javax.swing.event.CaretListener() { public void caretUpdate(javax.swing.event.CaretEvent evt) { jTextPaneConsoleCaretUpdate(evt); } }); jScrollPaneConsole.setViewportView(jTextPaneConsole); jPanelConsole.add(jScrollPaneConsole, java.awt.BorderLayout.CENTER); jSplitPaneBody.setBottomComponent(jPanelConsole); getContentPane().add(jSplitPaneBody, java.awt.BorderLayout.CENTER); jPanelControls.setLayout(new java.awt.GridLayout(1, 0)); jPanelControls.setAutoscrolls(true); jLabelScoringMatrix.setDisplayedMnemonic('M'); jLabelScoringMatrix.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabelScoringMatrix.setLabelFor(jComboBoxScoringMatrix); jLabelScoringMatrix.setText("Matrix"); jPanelScoringMatrix.add(jLabelScoringMatrix); jComboBoxScoringMatrix.setToolTipText("Scoring matrix"); jComboBoxScoringMatrix.setPrototypeDisplayValue("BLOSUMXXX"); jPanelScoringMatrix.add(jComboBoxScoringMatrix); jPanelControls.add(jPanelScoringMatrix); jLabelOpenGapPenalty.setDisplayedMnemonic('O'); jLabelOpenGapPenalty.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabelOpenGapPenalty.setLabelFor(jFormattedTextFieldGapOpen); jLabelOpenGapPenalty.setText("Open"); jPanelGapOpen.add(jLabelOpenGapPenalty); jFormattedTextFieldGapOpen.setColumns(3); jFormattedTextFieldGapOpen.setToolTipText("Gap open penalty"); jPanelGapOpen.add(jFormattedTextFieldGapOpen); jPanelControls.add(jPanelGapOpen); jLabelExtendGapPenalty.setDisplayedMnemonic('E'); jLabelExtendGapPenalty.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabelExtendGapPenalty.setLabelFor(jFormattedTextFieldGapExtend); jLabelExtendGapPenalty.setText("Extend"); jPanelGapExtend.add(jLabelExtendGapPenalty); jFormattedTextFieldGapExtend.setColumns(3); jFormattedTextFieldGapExtend.setToolTipText("Gap extend penalty"); jPanelGapExtend.add(jFormattedTextFieldGapExtend); jPanelControls.add(jPanelGapExtend); jLabelOutputFormat.setDisplayedMnemonic('F'); jLabelOutputFormat.setLabelFor(jComboBoxOutputFormat); jLabelOutputFormat.setText("Format"); jPanelOutputFormat.add(jLabelOutputFormat); jComboBoxOutputFormat.setToolTipText("Alignment output format"); jComboBoxOutputFormat.setOpaque(false); jPanelOutputFormat.add(jComboBoxOutputFormat); jPanelControls.add(jPanelOutputFormat); jButtonGo.setMnemonic('G'); jButtonGo.setText("Go"); jButtonGo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jButtonGoActionPerformed(evt); } }); jPanelGo.add(jButtonGo); jPanelControls.add(jPanelGo); getContentPane().add(jPanelControls, java.awt.BorderLayout.SOUTH); jMenuFile.setMnemonic('F'); jMenuFile.setText("File"); jMenuItemFileOpen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK)); jMenuItemFileOpen.setIcon(ToolbarIcons.OPEN); jMenuItemFileOpen.setMnemonic('O'); jMenuItemFileOpen.setText("Open..."); jMenuItemFileOpen.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemFileOpenActionPerformed(evt); } }); jMenuFile.add(jMenuItemFileOpen); jMenuItemFileLoadSequence1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_1, java.awt.event.InputEvent.CTRL_MASK)); jMenuItemFileLoadSequence1.setIcon(ToolbarIcons.OPEN); jMenuItemFileLoadSequence1.setMnemonic('1'); jMenuItemFileLoadSequence1.setText("Load sequence #1..."); jMenuItemFileLoadSequence1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemFileLoadSequence1ActionPerformed(evt); } }); jMenuFile.add(jMenuItemFileLoadSequence1); jMenuItemFileLoadSequence2.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_2, java.awt.event.InputEvent.CTRL_MASK)); jMenuItemFileLoadSequence2.setIcon(ToolbarIcons.OPEN); jMenuItemFileLoadSequence2.setMnemonic('2'); jMenuItemFileLoadSequence2.setText("Load sequence #2..."); jMenuItemFileLoadSequence2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemFileLoadSequence2ActionPerformed(evt); } }); jMenuFile.add(jMenuItemFileLoadSequence2); jMenuItemFileLoadMatrix.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_M, java.awt.event.InputEvent.CTRL_MASK)); jMenuItemFileLoadMatrix.setIcon(ToolbarIcons.OPEN); jMenuItemFileLoadMatrix.setMnemonic('M'); jMenuItemFileLoadMatrix.setText("Load scoring matrix..."); jMenuItemFileLoadMatrix.setToolTipText("Load user-defined scoring matrix from file system"); jMenuItemFileLoadMatrix.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemFileLoadMatrixActionPerformed(evt); } }); jMenuFile.add(jMenuItemFileLoadMatrix); jMenuFile.add(jSeparatorFile); jMenuItemFileExit.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.ALT_MASK)); jMenuItemFileExit.setIcon(ToolbarIcons.CLOSE); jMenuItemFileExit.setMnemonic('X'); jMenuItemFileExit.setText("Exit"); jMenuItemFileExit.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemFileExitActionPerformed(evt); } }); jMenuFile.add(jMenuItemFileExit); jMenuItemFilePrint.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_P, java.awt.event.InputEvent.CTRL_MASK)); jMenuItemFilePrint.setIcon(ToolbarIcons.PRINT); jMenuItemFilePrint.setText("Print..."); jMenuItemFilePrint.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemFilePrintActionPerformed(evt); } }); jMenuFile.add(jMenuItemFilePrint); jMenuBar.add(jMenuFile); jMenuEdit.setMnemonic('E'); jMenuEdit.setText("Edit"); jMenuItemEditCut.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.CTRL_MASK)); jMenuItemEditCut.setIcon(ToolbarIcons.CUT); jMenuItemEditCut.setMnemonic('t'); jMenuItemEditCut.setText("Cut"); jMenuItemEditCut.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemEditCutActionPerformed(evt); } }); jMenuEdit.add(jMenuItemEditCut); jMenuItemEditCopy.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.event.InputEvent.CTRL_MASK)); jMenuItemEditCopy.setIcon(ToolbarIcons.COPY); jMenuItemEditCopy.setMnemonic('C'); jMenuItemEditCopy.setText("Copy"); jMenuItemEditCopy.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemEditCopyActionPerformed(evt); } }); jMenuEdit.add(jMenuItemEditCopy); jMenuItemEditPaste.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.event.InputEvent.CTRL_MASK)); jMenuItemEditPaste.setIcon(ToolbarIcons.PASTE); jMenuItemEditPaste.setMnemonic('P'); jMenuItemEditPaste.setText("Paste"); jMenuItemEditPaste.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemEditPasteActionPerformed(evt); } }); jMenuEdit.add(jMenuItemEditPaste); jMenuItemEditDelete.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE, 0)); jMenuItemEditDelete.setIcon(ToolbarIcons.DELETE); jMenuItemEditDelete.setMnemonic('D'); jMenuItemEditDelete.setText("Delete"); jMenuItemEditDelete.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemEditDeleteActionPerformed(evt); } }); jMenuEdit.add(jMenuItemEditDelete); jMenuItemEditSelectAll.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A, java.awt.event.InputEvent.CTRL_MASK)); jMenuItemEditSelectAll.setMnemonic('A'); jMenuItemEditSelectAll.setText("Select All"); jMenuItemEditSelectAll.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemEditSelectAllActionPerformed(evt); } }); jMenuEdit.add(jMenuItemEditSelectAll); jMenuBar.add(jMenuEdit); jMenuTools.setMnemonic('T'); jMenuTools.setText("Tools"); jMenuItemToolsRunExample.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F5, 0)); jMenuItemToolsRunExample.setMnemonic('E'); jMenuItemToolsRunExample.setText("Example"); jMenuItemToolsRunExample.setToolTipText("Aligns P53 human and P53 mouse"); jMenuItemToolsRunExample.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemToolsRunExampleActionPerformed(evt); } }); jMenuTools.add(jMenuItemToolsRunExample); jMenuBar.add(jMenuTools); jMenuHelp.setMnemonic('H'); jMenuHelp.setText("Help"); jMenuItemAbout.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0)); jMenuItemAbout.setIcon(ToolbarIcons.ABOUT); jMenuItemAbout.setMnemonic('A'); jMenuItemAbout.setText("About..."); jMenuItemAbout.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItemAboutActionPerformed(evt); } }); jMenuHelp.add(jMenuItemAbout); jMenuBar.add(jMenuHelp); setJMenuBar(jMenuBar); pack(); }//GEN-END:initComponents private void jPopupPrintActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jPopupPrintActionPerformed print(); }//GEN-LAST:event_jPopupPrintActionPerformed private void jMenuItemToolsRunExampleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemToolsRunExampleActionPerformed try { logger.info("Running the example..."); jTextAreaSequence1.setText(SmithWatermanGotohExample.loadP53Human()); jTextAreaSequence2.setText(SmithWatermanGotohExample.loadP53Mouse()); align(); jTextAreaAlignment.requestFocus(); logger.info("Finished running the example..."); } catch (Exception e) { logger.log(Level.SEVERE, "Failed running the example: " + e.getMessage(), e); } }//GEN-LAST:event_jMenuItemToolsRunExampleActionPerformed private void jMenuItemFilePrintActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemFilePrintActionPerformed print(); }//GEN-LAST:event_jMenuItemFilePrintActionPerformed private void jButtonPrintActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonPrintActionPerformed print(); }//GEN-LAST:event_jButtonPrintActionPerformed private void jTextPaneConsoleCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_jTextPaneConsoleCaretUpdate handleCaretUpdateEvent(evt); }//GEN-LAST:event_jTextPaneConsoleCaretUpdate private void jTextPaneConsoleMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextPaneConsoleMouseClicked jTextPaneConsole.requestFocus(); if (evt.getButton() == MouseEvent.BUTTON3) { jPopup.show(evt.getComponent(), evt.getX(), evt.getY()); } }//GEN-LAST:event_jTextPaneConsoleMouseClicked private void jTextPaneConsoleFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextPaneConsoleFocusGained currentTextComponent = jTextPaneConsole; jRadioButtonConsole.setSelected(true); handleMoveToTextComponent(); }//GEN-LAST:event_jTextPaneConsoleFocusGained private void jRadioButtonConsoleActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonConsoleActionPerformed jTextPaneConsole.requestFocus(); }//GEN-LAST:event_jRadioButtonConsoleActionPerformed private void jTextAreaAlignmentFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextAreaAlignmentFocusGained currentTextComponent = jTextAreaAlignment; jRadioButtonAlignment.setSelected(true); handleMoveToTextComponent(); }//GEN-LAST:event_jTextAreaAlignmentFocusGained private void jTextAreaSequence2FocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextAreaSequence2FocusGained currentTextComponent = jTextAreaSequence2; jRadioButtonSequence2.setSelected(true); handleMoveToTextComponent(); }//GEN-LAST:event_jTextAreaSequence2FocusGained private void jTextAreaSequence1FocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTextAreaSequence1FocusGained currentTextComponent = jTextAreaSequence1; jRadioButtonSequence1.setSelected(true); handleMoveToTextComponent(); }//GEN-LAST:event_jTextAreaSequence1FocusGained private void jRadioButtonAlignmentActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonAlignmentActionPerformed jTextAreaAlignment.requestFocus(); }//GEN-LAST:event_jRadioButtonAlignmentActionPerformed private void jRadioButtonSequence2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonSequence2ActionPerformed jTextAreaSequence2.requestFocus(); }//GEN-LAST:event_jRadioButtonSequence2ActionPerformed private void jRadioButtonSequence1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonSequence1ActionPerformed jTextAreaSequence1.requestFocus(); }//GEN-LAST:event_jRadioButtonSequence1ActionPerformed private void jMenuItemEditCopyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemEditCopyActionPerformed copy(); }//GEN-LAST:event_jMenuItemEditCopyActionPerformed private void jMenuItemEditDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemEditDeleteActionPerformed delete(); }//GEN-LAST:event_jMenuItemEditDeleteActionPerformed private void jMenuItemEditPasteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemEditPasteActionPerformed paste(); }//GEN-LAST:event_jMenuItemEditPasteActionPerformed private void jMenuItemFileOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemFileOpenActionPerformed loadFileToTextArea("", currentTextComponent); }//GEN-LAST:event_jMenuItemFileOpenActionPerformed private void jMenuItemEditCutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemEditCutActionPerformed cut(); }//GEN-LAST:event_jMenuItemEditCutActionPerformed private void jMenuItemEditSelectAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemEditSelectAllActionPerformed selectAll(); }//GEN-LAST:event_jMenuItemEditSelectAllActionPerformed private void jTextAreaSequence2MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextAreaSequence2MouseClicked jTextAreaSequence2.requestFocus(); if (evt.getButton() == MouseEvent.BUTTON3) { jPopup.show(evt.getComponent(), evt.getX(), evt.getY()); } }//GEN-LAST:event_jTextAreaSequence2MouseClicked private void jTextAreaSequence2CaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_jTextAreaSequence2CaretUpdate handleCaretUpdateEvent(evt); }//GEN-LAST:event_jTextAreaSequence2CaretUpdate private void jButtonExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonExitActionPerformed exitForm(null); }//GEN-LAST:event_jButtonExitActionPerformed private void jButtonGoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonGoActionPerformed align(); }//GEN-LAST:event_jButtonGoActionPerformed private void jMenuItemFileLoadSequence2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemFileLoadSequence2ActionPerformed loadFileToTextArea("sequence #2", jTextAreaSequence2); }//GEN-LAST:event_jMenuItemFileLoadSequence2ActionPerformed private void jMenuItemFileLoadSequence1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemFileLoadSequence1ActionPerformed loadFileToTextArea("sequence #1", jTextAreaSequence1); }//GEN-LAST:event_jMenuItemFileLoadSequence1ActionPerformed private void jMenuItemFileLoadMatrixActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemFileLoadMatrixActionPerformed NamedInputStream selectedInputStream = null; try { logger.info("Loading scoring matrix..."); selectedInputStream = FileChooserFactory.getFileChooser().open(); if (selectedInputStream != null) { Matrix matrix = MatrixLoader.load(selectedInputStream); // Put the loaded matrix in the matrices hashmap matrices.put(selectedInputStream.getName(), matrix); boolean found = false; int index = 0; int count = jComboBoxScoringMatrix.getItemCount(); while (index < count && !found) { if (((String)jComboBoxScoringMatrix.getItemAt(index)).equalsIgnoreCase(selectedInputStream.getName())) { found = true; } else { index++; } } if (!found) { // Add the loaded matrix to the scoring matrices dropdown menu jComboBoxScoringMatrix.addItem(selectedInputStream.getName()); index = jComboBoxScoringMatrix.getItemCount()-1; } // Set the selected item to the new loaded matrix jComboBoxScoringMatrix.setSelectedIndex(index); logger.info("Finished loading scoring matrix"); } else { logger.info("Canceled loading scoring matrix"); } } catch (Exception e) { String message = "Failed loading scoring matrix: " + e.getMessage(); logger.log(Level.SEVERE, message, e); showErrorMessage(message); } finally { if (selectedInputStream != null) { try { selectedInputStream.getInputStream().close(); } catch(Exception e) { logger.log(Level.WARNING, "Failed closing input stream: " + e.getMessage(), e); } } } }//GEN-LAST:event_jMenuItemFileLoadMatrixActionPerformed private void jTextAreaAlignmentMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextAreaAlignmentMouseClicked jTextAreaAlignment.requestFocus(); if (evt.getButton() == MouseEvent.BUTTON3) { jPopup.show(evt.getComponent(), evt.getX(), evt.getY()); } }//GEN-LAST:event_jTextAreaAlignmentMouseClicked private void jPopupSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jPopupSaveActionPerformed saveTextAreaToFile((JTextArea) jPopup.getInvoker()); }//GEN-LAST:event_jPopupSaveActionPerformed private void jButtonSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSaveActionPerformed saveTextAreaToFile(currentTextComponent); }//GEN-LAST:event_jButtonSaveActionPerformed private void jTextAreaAlignmentCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_jTextAreaAlignmentCaretUpdate handleCaretUpdateEvent(evt); }//GEN-LAST:event_jTextAreaAlignmentCaretUpdate private void jPopupOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jPopupOpenActionPerformed loadFileToTextArea("", (JTextArea) jPopup.getInvoker()); }//GEN-LAST:event_jPopupOpenActionPerformed private void jPopupSelectAllActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jPopupSelectAllActionPerformed selectAll(); }//GEN-LAST:event_jPopupSelectAllActionPerformed private void jPopupDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jPopupDeleteActionPerformed delete(); }//GEN-LAST:event_jPopupDeleteActionPerformed private void jPopupPasteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jPopupPasteActionPerformed paste(); }//GEN-LAST:event_jPopupPasteActionPerformed private void jPopupCopyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jPopupCopyActionPerformed copy(); }//GEN-LAST:event_jPopupCopyActionPerformed private void jPopupCutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jPopupCutActionPerformed cut(); }//GEN-LAST:event_jPopupCutActionPerformed private void jTextAreaSequence1CaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_jTextAreaSequence1CaretUpdate handleCaretUpdateEvent(evt); }//GEN-LAST:event_jTextAreaSequence1CaretUpdate private void jButtonDeleteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonDeleteActionPerformed delete(); }//GEN-LAST:event_jButtonDeleteActionPerformed private void jButtonPasteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonPasteActionPerformed paste(); }//GEN-LAST:event_jButtonPasteActionPerformed private void jButtonCopyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCopyActionPerformed copy(); }//GEN-LAST:event_jButtonCopyActionPerformed private void jButtonCutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCutActionPerformed cut(); }//GEN-LAST:event_jButtonCutActionPerformed private void jButtonOpenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonOpenActionPerformed loadFileToTextArea("", currentTextComponent); }//GEN-LAST:event_jButtonOpenActionPerformed private void jTextAreaSequence1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTextAreaSequence1MouseClicked jTextAreaSequence1.requestFocus(); if (evt.getButton() == MouseEvent.BUTTON3) { jPopup.show(evt.getComponent(), evt.getX(), evt.getY()); } }//GEN-LAST:event_jTextAreaSequence1MouseClicked private void jMenuItemAboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemAboutActionPerformed String message = "JAligner <http://jaligner.sf.net>" + Commons.getLineSeparator() + Commons.getLineSeparator() + "Open source Java implementation" + Commons.getLineSeparator() + "of the Smith-Waterman algorithm" + Commons.getLineSeparator() + "for biological sequence alignment." + Commons.getLineSeparator() + Commons.getLineSeparator() + "Build: " + Commons.getCurrentRelease() + Commons.getLineSeparator() + Commons.getLineSeparator() + "By: Ahmed Moustafa <ahmed@users.sf.net>"; JOptionPane.showMessageDialog(this, message, "About JAligner", JOptionPane.INFORMATION_MESSAGE); }//GEN-LAST:event_jMenuItemAboutActionPerformed private void jMenuItemFileExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItemFileExitActionPerformed exitForm(null); }//GEN-LAST:event_jMenuItemFileExitActionPerformed /** Exit the Application */ private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm logger.info("Quitting..."); if (JOptionPane.showConfirmDialog(this, "Are you sure you want to exit JAligner?", "JAligner - confirmation", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { logger.info("Thank you for using JAligner!"); System.exit(0); } else { logger.info("Canceled quitting"); currentTextComponent.requestFocus(); } }//GEN-LAST:event_exitForm // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.ButtonGroup buttonGroupSequences; private javax.swing.JButton jButtonCopy; private javax.swing.JButton jButtonCut; private javax.swing.JButton jButtonDelete; private javax.swing.JButton jButtonExit; private javax.swing.JButton jButtonGo; private javax.swing.JButton jButtonOpen; private javax.swing.JButton jButtonPaste; private javax.swing.JButton jButtonPrint; private javax.swing.JButton jButtonSave; private javax.swing.JComboBox jComboBoxOutputFormat; private javax.swing.JComboBox jComboBoxScoringMatrix; private javax.swing.JFormattedTextField jFormattedTextFieldGapExtend; private javax.swing.JFormattedTextField jFormattedTextFieldGapOpen; private javax.swing.JLabel jLabelExtendGapPenalty; private javax.swing.JLabel jLabelOpenGapPenalty; private javax.swing.JLabel jLabelOutputFormat; private javax.swing.JLabel jLabelScoringMatrix; private javax.swing.JMenuBar jMenuBar; private javax.swing.JMenu jMenuEdit; private javax.swing.JMenu jMenuFile; private javax.swing.JMenu jMenuHelp; private javax.swing.JMenuItem jMenuItemAbout; private javax.swing.JMenuItem jMenuItemEditCopy; private javax.swing.JMenuItem jMenuItemEditCut; private javax.swing.JMenuItem jMenuItemEditDelete; private javax.swing.JMenuItem jMenuItemEditPaste; private javax.swing.JMenuItem jMenuItemEditSelectAll; private javax.swing.JMenuItem jMenuItemFileExit; private javax.swing.JMenuItem jMenuItemFileLoadMatrix; private javax.swing.JMenuItem jMenuItemFileLoadSequence1; private javax.swing.JMenuItem jMenuItemFileLoadSequence2; private javax.swing.JMenuItem jMenuItemFileOpen; private javax.swing.JMenuItem jMenuItemFilePrint; private javax.swing.JMenuItem jMenuItemToolsRunExample; private javax.swing.JMenu jMenuTools; private javax.swing.JPanel jPanelAlignment; private javax.swing.JPanel jPanelConsole; private javax.swing.JPanel jPanelControls; private javax.swing.JPanel jPanelGapExtend; private javax.swing.JPanel jPanelGapOpen; private javax.swing.JPanel jPanelGo; private javax.swing.JPanel jPanelOutputFormat; private javax.swing.JPanel jPanelScoringMatrix; private javax.swing.JPanel jPanelSequence1; private javax.swing.JPanel jPanelSequence2; private javax.swing.JPopupMenu jPopup; private javax.swing.JMenuItem jPopupCopy; private javax.swing.JMenuItem jPopupCut; private javax.swing.JMenuItem jPopupDelete; private javax.swing.JMenuItem jPopupOpen; private javax.swing.JMenuItem jPopupPaste; private javax.swing.JMenuItem jPopupPrint; private javax.swing.JMenuItem jPopupSave; private javax.swing.JMenuItem jPopupSelectAll; private javax.swing.JSeparator jPopupSeparator1; private javax.swing.JSeparator jPopupSeparator2; private javax.swing.JSeparator jPopupSeparator3; private javax.swing.JRadioButton jRadioButtonAlignment; private javax.swing.JRadioButton jRadioButtonConsole; private javax.swing.JRadioButton jRadioButtonSequence1; private javax.swing.JRadioButton jRadioButtonSequence2; private javax.swing.JScrollPane jScrollPaneAlignment; private javax.swing.JScrollPane jScrollPaneConsole; private javax.swing.JScrollPane jScrollPaneSequence1; private javax.swing.JScrollPane jScrollPaneSequence2; private javax.swing.JSeparator jSeparatorFile; private javax.swing.JSplitPane jSplitPaneBody; private javax.swing.JSplitPane jSplitPaneIO; private javax.swing.JSplitPane jSplitPaneSequences; private javax.swing.JTextArea jTextAreaAlignment; private javax.swing.JTextArea jTextAreaSequence1; private javax.swing.JTextArea jTextAreaSequence2; private javax.swing.JTextPane jTextPaneConsole; private javax.swing.JToolBar jToolBar; // End of variables declaration//GEN-END:variables /** * Populates a combobox with an array of strings and selects the default * @param combobox combobox to be populated * @param items array of strings to be added to the combobox * @param selected the default selected item */ private void populateComboBox(JComboBox combobox, String[] items, String selected) { for (int i = 0; i < items.length; i++) { combobox.addItem(items[i]); if (items[i].equals(selected)) { combobox.setSelectedIndex(i); } } } /** * Populates a combobox with an array of strings and selects the default * @param combobox combobox to be populated * @param items array of strings to be added to the combobox * @param selected the default selected item */ private void populateComboBox(JComboBox combobox, Collection items, String selected) { String item; Iterator i = items.iterator(); int index = 0; while (i.hasNext()) { item = (String) i.next(); combobox.addItem(item); if (item.equals(selected)) { combobox.setSelectedIndex(index); } index++; } } /** * Displays an error message * @param message the error message to be displayed */ private void showErrorMessage(String message) { JOptionPane.showMessageDialog(this, message, "JAligner - error message", JOptionPane.ERROR_MESSAGE); } /** * Loads the contents of a selected file into a text component. * @param id * @param textComponent */ private void loadFileToTextArea(String id, JTextComponent textComponent) { logger.info("Loading " + id + "..."); try { if (TextComponentUtil.open(textComponent)) { textComponent.requestFocus(); textComponent.setCaretPosition(0); logger.info("Finished loading " + id); } else { logger.info("Canceled loading " + id); } } catch (Exception e) { String message = "Failed loading " + id + ": " + e.getMessage(); logger.log(Level.SEVERE, message, e); showErrorMessage(message); } } /** * Saves a text component to a file. * @param textComponent */ private void saveTextAreaToFile(JTextComponent textComponent) { try { logger.info("Saving..."); if (TextComponentUtil.save(textComponent)) { logger.info("Finished saving"); } else { logger.info("Canceled saving"); } } catch (Exception e) { String message = "Failed saving: " + e.getMessage(); logger.log(Level.SEVERE, message, e); showErrorMessage(message); } } /** * * */ private void cut() { TextComponentUtil.cut(currentTextComponent); } /** * * */ private void copy() { TextComponentUtil.copy(currentTextComponent); } /** * * */ private void paste() { TextComponentUtil.paste(currentTextComponent); } /** * * */ private void delete() { TextComponentUtil.delete(currentTextComponent); } /** * * */ private void selectAll() { TextComponentUtil.selectAll(currentTextComponent); } /** * Prints the contents of a text component * */ private void print() { try { logger.info("Printing..."); TextComponentUtil.print(currentTextComponent); logger.info("Finished printing."); } catch (TextComponentUtilException textComponentUtilException) { logger.log(Level.SEVERE, "Failed printing: " + textComponentUtilException.getMessage(), textComponentUtilException); } } /** * Implements insertUpdate of {@link DocumentListener} */ public void insertUpdate(DocumentEvent e) { if (e.getDocument() == currentTextComponent.getDocument()) { setSaveControlsEnabled(true); setSelectAllControlsEnabled(true); setPrintControlsEnabled(true); } } /** * Implements removeUpdate of {@link DocumentListener} */ public void removeUpdate(DocumentEvent e) { if (e.getDocument() == currentTextComponent.getDocument()) { if (e.getDocument().getLength() == 0) { setSaveControlsEnabled(false); setSelectAllControlsEnabled(false); setPrintControlsEnabled(false); } } } /** * Implements changedUpdate of {@link DocumentListener} */ public void changedUpdate(DocumentEvent e) {} /** * Implements the notify method of the interface {@link ClipboardListener} */ public void clipboardCheck(String clipboardContents) { setPasteControlsEnabled(clipboardContents != null && currentTextComponent != null && currentTextComponent.isEditable()); } /** * Sets the status of the open controls * @param enabled */ private void setOpenControlsEnabled(boolean enabled) { jMenuItemFileOpen.setEnabled(enabled); jButtonOpen.setEnabled(enabled); jPopupOpen.setEnabled(enabled); } /** * Sets the status of the save controls * @param enabled */ private void setSaveControlsEnabled(boolean enabled) { jButtonSave.setEnabled(enabled); jPopupSave.setEnabled(enabled); } /** * Sets the status of the cut controls * @param enabled */ private void setCutControlsEnabled(boolean enabled) { jMenuItemEditCut.setEnabled(enabled); jButtonCut.setEnabled(enabled); jPopupCut.setEnabled(enabled); } /** * Sets the status of the copy controls * @param enabled */ private void setCopyControlsEnabled(boolean enabled) { jMenuItemEditCopy.setEnabled(enabled); jButtonCopy.setEnabled(enabled); jPopupCopy.setEnabled(enabled); } /** * Sets the status of the paste controls * @param enabled */ private void setPasteControlsEnabled(boolean enabled) { jMenuItemEditPaste.setEnabled(enabled); jButtonPaste.setEnabled(enabled); jPopupPaste.setEnabled(enabled); } /** * Sets the status of the delete controls * @param enabled */ private void setDeleteControlsEnabled(boolean enabled) { jMenuItemEditDelete.setEnabled(enabled); jButtonDelete.setEnabled(enabled); jPopupDelete.setEnabled(enabled); } /** * Sets the status of the select all controls * @param enabled */ private void setSelectAllControlsEnabled(boolean enabled) { jMenuItemEditSelectAll.setEnabled(enabled); jPopupSelectAll.setEnabled(enabled); } /** * Sets the status of the print controls * @param enabled */ private void setPrintControlsEnabled(boolean enabled) { jButtonPrint.setEnabled(enabled); jPopupPrint.setEnabled(enabled); } /** * * @param event */ private void handleCaretUpdateEvent(CaretEvent event) { if (event.getSource() == currentTextComponent) { boolean enabled = event.getDot() != event.getMark(); // Read controls setCopyControlsEnabled(enabled); // Write controls enabled &= currentTextComponent.isEditable(); setCutControlsEnabled(enabled); setDeleteControlsEnabled(enabled); } } /** * * */ private void handleMoveToTextComponent( ) { boolean enabled; enabled = currentTextComponent.getSelectedText() != null; setCopyControlsEnabled(enabled); if (currentTextComponent.isEditable()) { setOpenControlsEnabled(true); setCutControlsEnabled(enabled); setDeleteControlsEnabled(enabled); } else { setPasteControlsEnabled(false); setOpenControlsEnabled(false); setCutControlsEnabled(false); setDeleteControlsEnabled(false); } enabled = currentTextComponent.getText().length() > 0; setSaveControlsEnabled(enabled); setSelectAllControlsEnabled(enabled); setPrintControlsEnabled(enabled); // Adjust background of the radio buttons Enumeration buttons = buttonGroupSequences.getElements(); AbstractButton button = null; while (buttons.hasMoreElements()) { button = (AbstractButton) buttons.nextElement(); if (button.isSelected()) { button.setForeground(Color.blue); } else { button.setForeground(Color.black); } } } /** * * */ private void align() { jTextAreaAlignment.setText(""); String matrixId = (String) jComboBoxScoringMatrix.getSelectedItem(); float open = ((Number)jFormattedTextFieldGapOpen.getValue()).floatValue(); float extend = ((Number)jFormattedTextFieldGapExtend.getValue()).floatValue(); Sequence sequence1 = null; try { logger.info("Processing sequence #1..."); sequence1 = SequenceParser.parse(jTextAreaSequence1.getText()); logger.info("Finished processing sequence #1"); } catch (Exception e) { String message = "Failed parsing sequence #1: " + e.getMessage(); logger.log(Level.SEVERE, message, e); showErrorMessage(message); jTextAreaSequence1.requestFocus(); return; } Sequence sequence2 = null; try { logger.info("Processing sequence #2..."); sequence2 = SequenceParser.parse(jTextAreaSequence2.getText()); logger.info("Finished processing sequence #2"); } catch (Exception e) { String message = "Failed parsing sequence #2: " + e.getMessage(); logger.log(Level.SEVERE, message, e); showErrorMessage(message); jTextAreaSequence2.requestFocus(); return; } logger.info("Aliging..."); try { setCursor(new Cursor(Cursor.WAIT_CURSOR)); long start = System.currentTimeMillis(); Matrix matrix = null; if (!matrices.containsKey(matrixId)) { matrix = MatrixLoader.load(matrixId); matrices.put(matrixId, matrix); } else { matrix = (Matrix) matrices.get(matrixId); } Alignment alignment = SmithWatermanGotoh.align(sequence1, sequence2, matrix, open, extend); long end = System.currentTimeMillis(); logger.info("Finished aligning in " + (end - start) + " milliseconds"); StringBuffer buffer = new StringBuffer(); buffer.append(alignment.getSummary()); buffer.append(Commons.getLineSeparator()); String formatId = (String) jComboBoxOutputFormat.getSelectedItem(); String formattedAlignment = FormatFactory.getInstance().getFormat(formatId).format(alignment); buffer.append(formattedAlignment); jTextAreaAlignment.setText(""); jTextAreaAlignment.append(buffer.toString()); jTextAreaAlignment.setCaretPosition(0); } catch (Error error) { String message = "Failed aligning: " + error.getMessage(); logger.log(Level.SEVERE, message, error); showErrorMessage(message); } catch (Exception exception) { String message = "Failed aligning: " + exception.getMessage(); logger.log(Level.SEVERE, message, exception); showErrorMessage(message); } finally { setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } } /** * * @param args */ public static void main(String[] args) { logger.info( Commons.getJAlignerInfo() ); new AlignWindow().setVisible(true); } }