/* * Copyright (C) 2013 Vinu K.N * * 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 3 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, see <http://www.gnu.org/licenses/>. */ package org.domainmath.gui.bioinfo.seq_viewer; import java.awt.Desktop; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.DefaultListModel; import javax.swing.JFileChooser; import javax.swing.JList; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import org.biojava3.core.sequence.ProteinSequence; import org.biojava3.core.sequence.compound.AminoAcidCompound; import org.biojava3.core.sequence.compound.AminoAcidCompoundSet; import org.biojava3.core.sequence.io.FastaReader; import org.biojava3.core.sequence.io.GenericFastaHeaderParser; import org.biojava3.core.sequence.io.ProteinSequenceCreator; import org.domainmath.gui.MainFrame; import org.domainmath.gui.Util.DomainMathFileFilter; import org.domainmath.gui.about.AboutDlg; import org.domainmath.gui.common.DomainMathDialog; public class SeqViewerFrame extends javax.swing.JFrame { public List header =Collections.synchronizedList(new ArrayList()); public Image icon = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/org/domainmath/gui/resources/DomainMath.png")); private String var_name; private DefaultListModel listDetails; private File selectedFile; private JPopupMenu popup; private JMenuItem pcloseItem; private JMenuItem pcloseAllItem; private List fileNameList =Collections.synchronizedList(new ArrayList()); public static int index; public SeqViewerFrame() { setIconImage(icon); setSize(800,600); setLocationRelativeTo(null); initComponents(); this.popupTab(); } public String getExportVarName() { return this.var_name; } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { statusPanel2 = new org.domainmath.gui.StatusPanel(); fileTab = new javax.swing.JTabbedPane(); jToolBar1 = new javax.swing.JToolBar(); openButton = new javax.swing.JButton(); saveButton = new javax.swing.JButton(); jMenuBar1 = new javax.swing.JMenuBar(); jMenu1 = new javax.swing.JMenu(); openItem = new javax.swing.JMenuItem(); saveMenuItem = new javax.swing.JMenuItem(); exoprtMenuItem = new javax.swing.JMenuItem(); jSeparator1 = new javax.swing.JPopupMenu.Separator(); closeMenuItem = new javax.swing.JMenuItem(); closeAllMenuItem = new javax.swing.JMenuItem(); jSeparator2 = new javax.swing.JPopupMenu.Separator(); exitItem = new javax.swing.JMenuItem(); helpMenu = new javax.swing.JMenu(); forumItem = new javax.swing.JMenuItem(); onlineHelpItem = new javax.swing.JMenuItem(); howToItem = new javax.swing.JMenuItem(); faqItem = new javax.swing.JMenuItem(); jSeparator14 = new javax.swing.JPopupMenu.Separator(); suggestionsItem = new javax.swing.JMenuItem(); reportBugItem = new javax.swing.JMenuItem(); feedBackItem = new javax.swing.JMenuItem(); jSeparator7 = new javax.swing.JPopupMenu.Separator(); AboutItem = new javax.swing.JMenuItem(); setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); setTitle("Sequence Viewer"); fileTab.setTabLayoutPolicy(javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT); jToolBar1.setFloatable(false); openButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-open.png"))); // NOI18N openButton.setToolTipText("Open"); openButton.setFocusable(false); openButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); openButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); openButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openButtonActionPerformed(evt); } }); jToolBar1.add(openButton); saveButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-save.png"))); // NOI18N saveButton.setToolTipText("Save"); saveButton.setFocusable(false); saveButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); saveButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); saveButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { saveButtonActionPerformed(evt); } }); jToolBar1.add(saveButton); jMenu1.setText("File"); openItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.event.InputEvent.CTRL_MASK)); openItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-open.png"))); // NOI18N openItem.setText("Open"); openItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { openItemActionPerformed(evt); } }); jMenu1.add(openItem); saveMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK)); saveMenuItem.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/domainmath/gui/icons/document-save.png"))); // NOI18N saveMenuItem.setText("Save"); saveMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { saveMenuItemActionPerformed(evt); } }); jMenu1.add(saveMenuItem); exoprtMenuItem.setText("Export to Workspace"); exoprtMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { exoprtMenuItemActionPerformed(evt); } }); jMenu1.add(exoprtMenuItem); jMenu1.add(jSeparator1); closeMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.CTRL_MASK)); closeMenuItem.setText("Close"); closeMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeMenuItemActionPerformed(evt); } }); jMenu1.add(closeMenuItem); closeAllMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_W, java.awt.event.InputEvent.SHIFT_MASK | java.awt.event.InputEvent.CTRL_MASK)); closeAllMenuItem.setText("Close All.."); closeAllMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { closeAllMenuItemActionPerformed(evt); } }); jMenu1.add(closeAllMenuItem); jMenu1.add(jSeparator2); exitItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.event.InputEvent.ALT_MASK)); exitItem.setText("Exit"); exitItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { exitItemActionPerformed(evt); } }); jMenu1.add(exitItem); jMenuBar1.add(jMenu1); java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle("org/domainmath/gui/resources/DomainMath_en"); // NOI18N helpMenu.setText(bundle.getString("helpMenu.name")); // NOI18N forumItem.setText("Forum"); forumItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { forumItemActionPerformed(evt); } }); helpMenu.add(forumItem); onlineHelpItem.setText("Help and Support"); onlineHelpItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { onlineHelpItemActionPerformed(evt); } }); helpMenu.add(onlineHelpItem); howToItem.setText("How to..."); howToItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { howToItemActionPerformed(evt); } }); helpMenu.add(howToItem); faqItem.setText("Online FAQ"); faqItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { faqItemActionPerformed(evt); } }); helpMenu.add(faqItem); helpMenu.add(jSeparator14); suggestionsItem.setText("Suggestions"); suggestionsItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { suggestionsItemActionPerformed(evt); } }); helpMenu.add(suggestionsItem); reportBugItem.setText(bundle.getString("reportBugItem.name")); // NOI18N reportBugItem.setToolTipText(bundle.getString("reportBugItem.tooltip")); // NOI18N reportBugItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { reportBugItemActionPerformed(evt); } }); helpMenu.add(reportBugItem); feedBackItem.setText(bundle.getString("yourFeedbackItem.name")); // NOI18N feedBackItem.setToolTipText(bundle.getString("yourFeedbackItem.tooltip")); // NOI18N feedBackItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { feedBackItemActionPerformed(evt); } }); helpMenu.add(feedBackItem); helpMenu.add(jSeparator7); AboutItem.setText(bundle.getString("aboutItem.name")); // NOI18N AboutItem.setToolTipText(bundle.getString("aboutItem.tooltip")); // NOI18N AboutItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { AboutItemActionPerformed(evt); } }); helpMenu.add(AboutItem); jMenuBar1.add(helpMenu); setJMenuBar(jMenuBar1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(statusPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, 698, Short.MAX_VALUE) .addComponent(fileTab) .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, 0) .addComponent(fileTab, javax.swing.GroupLayout.DEFAULT_SIZE, 372, Short.MAX_VALUE) .addGap(0, 0, 0) .addComponent(statusPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) ); pack(); }// </editor-fold>//GEN-END:initComponents public void setPath(String path) { try { URI uri = new URI(path); Desktop desktop=Desktop.getDesktop(); desktop.browse(uri); } catch (URISyntaxException | IOException ex) { } } private void getFasta() { try{ String[] t ; String s; listDetails = new DefaultListModel(); FileInputStream inStream = new FileInputStream( selectedFile ); FastaReader<ProteinSequence,AminoAcidCompound> fastaReader = new FastaReader<>( inStream, new GenericFastaHeaderParser<ProteinSequence,AminoAcidCompound>(), new ProteinSequenceCreator(AminoAcidCompoundSet.getAminoAcidCompoundSet())); LinkedHashMap<String, ProteinSequence> b = fastaReader.process(); for ( Map.Entry<String, ProteinSequence> entry : b.entrySet() ) { listDetails.addElement(entry.getValue().getOriginalHeader()); s=entry.getValue().getSequenceAsString(); this.fileTab.add(entry.getValue().getOriginalHeader(),new SeqViewerPanel(s)); this.fileTab.setSelectedIndex(index); this.addFileNameToList(entry.getValue().getOriginalHeader()); index++; this.header.add(entry.getValue().getOriginalHeader()); } }catch(Exception e) { } } private void openItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openItemActionPerformed open(); }//GEN-LAST:event_openItemActionPerformed private void exitItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exitItemActionPerformed dispose(); }//GEN-LAST:event_exitItemActionPerformed private void forumItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_forumItemActionPerformed setPath("http://domainmathide.freeforums.org/"); }//GEN-LAST:event_forumItemActionPerformed private void onlineHelpItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_onlineHelpItemActionPerformed setPath("http://domainmathide.freeforums.org/help-and-support-f5.html"); }//GEN-LAST:event_onlineHelpItemActionPerformed private void howToItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_howToItemActionPerformed setPath("http://domainmathide.freeforums.org/how-to-f9.html"); }//GEN-LAST:event_howToItemActionPerformed private void faqItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_faqItemActionPerformed setPath("http://domainmathide.freeforums.org/faq-f8.html"); }//GEN-LAST:event_faqItemActionPerformed private void suggestionsItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_suggestionsItemActionPerformed setPath("http://domainmathide.freeforums.org/suggestions-f6.html"); }//GEN-LAST:event_suggestionsItemActionPerformed private void reportBugItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_reportBugItemActionPerformed setPath("http://domainmathide.freeforums.org/bugs-f3.html"); }//GEN-LAST:event_reportBugItemActionPerformed private void feedBackItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_feedBackItemActionPerformed setPath("http://domainmathide.freeforums.org/feedback-f4.html"); }//GEN-LAST:event_feedBackItemActionPerformed private void AboutItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_AboutItemActionPerformed AboutDlg aboutDlg = new AboutDlg(this,true); aboutDlg.setLocationRelativeTo(this); aboutDlg.setVisible(true); }//GEN-LAST:event_AboutItemActionPerformed private void exoprtMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exoprtMenuItemActionPerformed DomainMathDialog exportDialog = new DomainMathDialog(this,true,"Name:"); exportDialog.setTitle("Export Sequence"); exportDialog.setLocationRelativeTo(this); exportDialog.setVisible(true); exportVarTo(exportDialog.getVar_name()); String v=this.getExportVarName(); if(this.fileTab.getSelectedIndex() >= 0) { SeqViewerPanel p = (SeqViewerPanel) this.fileTab.getComponentAt(this.fileTab.getSelectedIndex()); String seq2 = ""; for(int i=0; i<p.listSequence.getModel().getSize();i++) { seq2 +=p.listSequence.getModel().getElementAt(i); } if(!v.equals("")){ MainFrame.octavePanel.evaluate(v+"='"+seq2 +"';"); } MainFrame.reloadWorkspace(); } }//GEN-LAST:event_exoprtMenuItemActionPerformed private void saveMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveMenuItemActionPerformed save(); }//GEN-LAST:event_saveMenuItemActionPerformed private void closeMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeMenuItemActionPerformed if(fileTab.getSelectedIndex() >= 0) { removeFileNameFromList(fileTab.getSelectedIndex()); fileTab.remove(fileTab.getSelectedIndex()); index--; } }//GEN-LAST:event_closeMenuItemActionPerformed private void closeAllMenuItemActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeAllMenuItemActionPerformed int i=fileTab.getTabCount()-1; while(i != -1) { removeFileNameFromList(i); fileTab.remove(i); index--; i--; } }//GEN-LAST:event_closeAllMenuItemActionPerformed private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed save(); }//GEN-LAST:event_saveButtonActionPerformed private void openButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_openButtonActionPerformed open(); }//GEN-LAST:event_openButtonActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch(ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new SeqViewerFrame().setVisible(true); } }); } public void addFileNameToList(String name) { fileNameList.add(name); } public void removeFileNameFromList(int index) { fileNameList.remove(index); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JMenuItem AboutItem; private javax.swing.JMenuItem closeAllMenuItem; private javax.swing.JMenuItem closeMenuItem; private javax.swing.JMenuItem exitItem; private javax.swing.JMenuItem exoprtMenuItem; private javax.swing.JMenuItem faqItem; private javax.swing.JMenuItem feedBackItem; private javax.swing.JTabbedPane fileTab; private javax.swing.JMenuItem forumItem; private javax.swing.JMenu helpMenu; private javax.swing.JMenuItem howToItem; private javax.swing.JMenu jMenu1; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JPopupMenu.Separator jSeparator1; private javax.swing.JPopupMenu.Separator jSeparator14; private javax.swing.JPopupMenu.Separator jSeparator2; private javax.swing.JPopupMenu.Separator jSeparator7; private javax.swing.JToolBar jToolBar1; private javax.swing.JMenuItem onlineHelpItem; private javax.swing.JButton openButton; private javax.swing.JMenuItem openItem; private javax.swing.JMenuItem reportBugItem; private javax.swing.JButton saveButton; private javax.swing.JMenuItem saveMenuItem; private org.domainmath.gui.StatusPanel statusPanel2; private javax.swing.JMenuItem suggestionsItem; // End of variables declaration//GEN-END:variables private void exportVarTo(String var_name) { this.var_name=var_name; } public void setSelectedFile(File selectedFile) { this.selectedFile = selectedFile; } public File getSelectedFile() { return this.selectedFile; } private void popupTab(){ popup = new JPopupMenu(); pcloseItem = new JMenuItem("Close"); pcloseAllItem = new JMenuItem("Close All"); popup.add(pcloseItem); popup.add(pcloseAllItem); fileTab.addMouseListener(new PopupListener(popup)); pcloseItem.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(fileTab.getSelectedIndex() >= 0) { removeFileNameFromList(fileTab.getSelectedIndex()); fileTab.remove(fileTab.getSelectedIndex()); index--; } } }); pcloseAllItem.addActionListener(new java.awt.event.ActionListener() { @Override public void actionPerformed(ActionEvent e) { int i=fileTab.getTabCount()-1; while(i != -1) { removeFileNameFromList(i); fileTab.remove(i); index--; i--; } } }); } private void save() { if(this.fileTab.getSelectedIndex() >= 0) { JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(System.getProperty("user.dir")+File.separator+"works")); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setMultiSelectionEnabled(false); fc.setFileFilter(DomainMathFileFilter.FASTA_FILE_FILTER); int returnVal = fc.showSaveDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { this.setSelectedFile(fc.getSelectedFile()); try { SeqViewerPanel p = (SeqViewerPanel) this.fileTab.getComponentAt(this.fileTab.getSelectedIndex()); JList list = p.listSequence; DomainMathDialog getTagDialog = new DomainMathDialog(this,true,"Tag Name:"); getTagDialog.setTitle("Add Tag Name "); getTagDialog.setLocationRelativeTo(this); getTagDialog.setVisible(true); BufferedWriter w = new BufferedWriter(new FileWriter(fc.getSelectedFile())); w.write(">"+getTagDialog.getVar_name()); w.newLine(); for(int i=0; i<list.getModel().getSize(); i++) { w.append(list.getModel().getElementAt(i).toString()); } w.newLine(); w.close(); } catch (IOException ex) { Logger.getLogger(SeqViewerFrame.class.getName()).log(Level.SEVERE, null, ex); } } System.out.println("Written"); } } private void open() { JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(System.getProperty("user.dir")+File.separator+"works")); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setMultiSelectionEnabled(false); fc.setFileFilter(DomainMathFileFilter.FASTA_FILE_FILTER); int returnVal = fc.showOpenDialog(this); if (returnVal == JFileChooser.APPROVE_OPTION) { this.setSelectedFile(fc.getSelectedFile()); getFasta(); } } class PopupListener extends MouseAdapter { JPopupMenu popup; PopupListener(JPopupMenu popupMenu) { popup = popupMenu; } @Override public void mousePressed(MouseEvent e) { maybeShowPopup(e); } @Override public void mouseReleased(MouseEvent e) { maybeShowPopup(e); } private void maybeShowPopup(MouseEvent e) { if (e.isPopupTrigger() && fileTab.getTabCount() > 0) { popup.show(e.getComponent(), e.getX(), e.getY()); } } } }