nullpointer bug fix on consensus thread
[jalview.git] / src / jalview / gui / SequenceFetcher.java
index 6687020..3b511a0 100755 (executable)
@@ -28,13 +28,19 @@ import javax.swing.*;
 import MCview.*;
 import jalview.datamodel.*;
 import jalview.datamodel.xdb.embl.*;
-import jalview.analysis.*;
 import java.io.File;
 import jalview.io.*;
+import jalview.ws.DBRefFetcher;
+import jalview.ws.EBIFetchClient;
+
+import java.awt.Rectangle;
+import java.awt.BorderLayout;
+import java.awt.Dimension;
 
 public class SequenceFetcher
 extends JPanel implements Runnable
 {
+  jalview.ws.SequenceFetcher sfetch; 
   JInternalFrame frame;
   AlignFrame alignFrame;
   StringBuffer result;
@@ -42,7 +48,26 @@ extends JPanel implements Runnable
   public SequenceFetcher(AlignFrame af)
   {
     alignFrame = af;
+    sfetch = new jalview.ws.SequenceFetcher();
     database.addItem(noDbSelected);
+    /*
+     * Dynamically generated database list
+     * will need a translation function from
+     * internal source to externally distinct names.
+     * UNIPROT and UP_NAME are identical DB sources,
+     * and should be collapsed. 
+     *
+     
+     String dbs[] = sfetch.getSupportedDb();
+    for (int i=0; i<dbs.length;i++)
+    {
+      if (DBRefSource.isPrimaryDb(dbs[i]))
+      {  
+        database.addItem(dbs[i]);
+        // should have some kind of human readable description of each database displayed when
+         * that combo is selected.
+      }
+    }*/
     database.addItem("Uniprot");
     database.addItem("EMBL");
     database.addItem("EMBLCDS");
@@ -60,7 +85,7 @@ extends JPanel implements Runnable
 
     frame = new JInternalFrame();
     frame.setContentPane(this);
-    if (System.getProperty("os.name").startsWith("Mac"))
+    if (new jalview.util.Platform().isAMac())
     {
       Desktop.addInternalFrame(frame, getFrameTitle(), 400, 140);
     }
@@ -79,12 +104,11 @@ extends JPanel implements Runnable
   private void jbInit()
   throws Exception
   {
-    this.setLayout(gridBagLayout1);
+    this.setLayout(borderLayout2);
 
     database.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
-    database.setMinimumSize(new Dimension(160, 21));
-    database.setPreferredSize(new Dimension(160, 21));
     jLabel1.setFont(new java.awt.Font("Verdana", Font.ITALIC, 11));
+    jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
     jLabel1.setText(
     "Separate multiple accession ids with semi colon \";\"");
     ok.setText("OK");
@@ -92,7 +116,7 @@ extends JPanel implements Runnable
     {
       public void actionPerformed(ActionEvent e)
       {
-        ok_actionPerformed(e);
+        ok_actionPerformed();
       }
     });
     close.setText("Close");
@@ -103,32 +127,28 @@ extends JPanel implements Runnable
         close_actionPerformed(e);
       }
     });
-    textfield.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
-    textfield.addActionListener(new ActionListener()
+    textArea.setFont(new java.awt.Font("Verdana", Font.PLAIN, 11));
+    textArea.setLineWrap(true);
+    textArea.addKeyListener(new KeyAdapter()
     {
-      public void actionPerformed(ActionEvent e)
+      public void keyPressed(KeyEvent e)
       {
-        ok_actionPerformed(e);
+        if(e.getKeyCode()==KeyEvent.VK_ENTER)
+          ok_actionPerformed();
       }
     });
+    jPanel3.setLayout(borderLayout1);
+    borderLayout1.setVgap(5);
     jPanel1.add(ok);
     jPanel1.add(close);
-    this.add(jLabel1, new GridBagConstraints(0, 0, 2, 1, 0.0, 0.0
-        , GridBagConstraints.WEST,
-        GridBagConstraints.NONE,
-        new Insets(7, 4, 0, 6), 77, 6));
-    this.add(jPanel1, new GridBagConstraints(0, 2, 2, 1, 1.0, 1.0
-        , GridBagConstraints.WEST,
-        GridBagConstraints.BOTH,
-        new Insets(7, -2, 7, 12), 241, -2));
-    this.add(database, new GridBagConstraints(0, 1, 1, 1, 1.0, 0.0
-        , GridBagConstraints.WEST,
-        GridBagConstraints.NONE,
-        new Insets(0, 4, 0, 0), 1, 0));
-    this.add(textfield, new GridBagConstraints(1, 1, 1, 1, 1.0, 0.0
-        , GridBagConstraints.CENTER,
-        GridBagConstraints.NONE,
-        new Insets(0, 0, 0, 6), 211, 1));
+    jPanel3.add(jPanel2, java.awt.BorderLayout.WEST);
+    jPanel2.add(database);
+    jPanel3.add(jScrollPane1, java.awt.BorderLayout.CENTER);
+    jPanel3.add(jLabel1, java.awt.BorderLayout.NORTH);
+    this.add(jPanel1, java.awt.BorderLayout.SOUTH);
+    this.add(jPanel3, java.awt.BorderLayout.CENTER);
+    jScrollPane1.getViewport().add(textArea);
+
   }
 
   JComboBox database = new JComboBox();
@@ -136,8 +156,12 @@ extends JPanel implements Runnable
   JButton ok = new JButton();
   JButton close = new JButton();
   JPanel jPanel1 = new JPanel();
-  JTextField textfield = new JTextField();
-  GridBagLayout gridBagLayout1 = new GridBagLayout();
+  JTextArea textArea = new JTextArea();
+  JScrollPane jScrollPane1 = new JScrollPane();
+  JPanel jPanel2 = new JPanel();
+  JPanel jPanel3 = new JPanel();
+  BorderLayout borderLayout1 = new BorderLayout();
+  BorderLayout borderLayout2 = new BorderLayout();
   public void close_actionPerformed(ActionEvent e)
   {
     try
@@ -148,10 +172,10 @@ extends JPanel implements Runnable
     {}
   }
 
-  public void ok_actionPerformed(ActionEvent e)
+  public void ok_actionPerformed()
   {
     database.setEnabled(false);
-    textfield.setEnabled(false);
+    textArea.setEnabled(false);
     ok.setEnabled(false);
     close.setEnabled(false);
 
@@ -162,7 +186,7 @@ extends JPanel implements Runnable
   private void resetDialog()
   {
     database.setEnabled(true);
-    textfield.setEnabled(true);
+    textArea.setEnabled(true);
     ok.setEnabled(true);
     close.setEnabled(true);
   }
@@ -175,8 +199,8 @@ extends JPanel implements Runnable
       error += "Please select the source database\n";
     }
     com.stevesoft.pat.Regex empty = new com.stevesoft.pat.Regex("\\s+", "");
-    textfield.setText(empty.replaceAll(textfield.getText()));
-    if (textfield.getText().length() == 0)
+    textArea.setText(empty.replaceAll(textArea.getText()));
+    if (textArea.getText().length() == 0)
     {
       error += "Please enter a (semi-colon separated list of) database id(s)";
     }
@@ -190,30 +214,30 @@ extends JPanel implements Runnable
     result = new StringBuffer();
     if (database.getSelectedItem().equals("Uniprot"))
     {
-      getUniprotFile(textfield.getText());
+      getUniprotFile(textArea.getText());
     }
     else if (database.getSelectedItem().equals("EMBL")
         || database.getSelectedItem().equals("EMBLCDS"))
     {
-      String DBRefSource = database.getSelectedItem().equals("EMBLCDS") 
+      String DBRefSource = database.getSelectedItem().equals("EMBLCDS")
       ? jalview.datamodel.DBRefSource.EMBLCDS
           : jalview.datamodel.DBRefSource.EMBL;
 
-      StringTokenizer st = new StringTokenizer(textfield.getText(), ";");
+      StringTokenizer st = new StringTokenizer(textArea.getText(), ";");
       SequenceI[] seqs = null;
       while(st.hasMoreTokens())
       {
         EBIFetchClient dbFetch = new EBIFetchClient();
-
+        String qry = database.getSelectedItem().toString().toLowerCase(
+        ) + ":" + st.nextToken();
         File reply = dbFetch.fetchDataAsFile(
-            database.getSelectedItem().toString().toLowerCase(
-            ) + ":" + st.nextToken(),
+            qry,
             "emblxml",null);
 
         jalview.datamodel.xdb.embl.EmblFile efile=null;
         if (reply != null && reply.exists())
         {
-          efile = jalview.datamodel.xdb.embl.EmblFile.getEmblFile(reply); 
+          efile = jalview.datamodel.xdb.embl.EmblFile.getEmblFile(reply);
         }
         if (efile!=null) {
           for (Iterator i=efile.getEntries().iterator(); i.hasNext(); ) {
@@ -240,17 +264,19 @@ extends JPanel implements Runnable
             }
           }
         } else {
-          result=null;
+          result.append("# no response for "+qry);
         }
       }
       if (seqs!=null && seqs.length>0) {
         if (parseResult(new Alignment(seqs), null, null)!=null)
-          result.append("# Successfully parsed the "+database.getSelectedItem()+" Queries into an Alignment");
-      }    
+        {
+            result.append("# Successfully parsed the "+database.getSelectedItem()+" Queries into an Alignment");
+        }
+      }
     }
     else if (database.getSelectedItem().equals("PDB"))
     {
-      StringTokenizer qset = new StringTokenizer(textfield.getText(), ";");
+      StringTokenizer qset = new StringTokenizer(textArea.getText(), ";");
       String query;
       SequenceI[] seqs = null;
       while (qset.hasMoreTokens() && ((query = qset.nextToken())!=null))
@@ -295,12 +321,12 @@ extends JPanel implements Runnable
       {
         result.append(new FastaFile(
             "http://www.sanger.ac.uk/cgi-bin/Pfam/getalignment.pl?format=fal&acc="
-            +  textfield.getText().toUpperCase(), "URL").print()
+            +  textArea.getText().toUpperCase(), "URL").print()
         );
 
         if(result.length()>0)
         {
-          parseResult( result.toString(), textfield.getText().toUpperCase() );
+          parseResult( result.toString(), textArea.getText().toUpperCase() );
         }
 
       }
@@ -312,7 +338,7 @@ extends JPanel implements Runnable
 
     if (result == null || result.length() == 0)
     {
-      showErrorMessage("Error retrieving " + textfield.getText()
+      showErrorMessage("Error retrieving " + textArea.getText()
           + " from " + database.getSelectedItem());
     }
 
@@ -447,7 +473,7 @@ extends JPanel implements Runnable
             entry.getProperty().put("chains",
                         pdbchain.id
                         + "=" + sq.getStart()
-                        + "-" + sq.getEnd()); 
+                        + "-" + sq.getEnd());
             sq.getDatasetSequence().addPDBId(entry);
            */
           // Add PDB DB Refs
@@ -460,14 +486,21 @@ extends JPanel implements Runnable
           result.addElement(sq.deriveSequence());
         }
       }
+
+      if (result.size() < 1)
+      {
+        throw new Exception("WsDBFetch for PDB id resulted in zero result size");
+      }
     }
     catch (Exception ex) // Problem parsing PDB file
     {
       jalview.bin.Cache.log.warn("Exception when retrieving " +
-          textfield.getText() + " from " +
+          textArea.getText() + " from " +
           database.getSelectedItem(), ex);
       return null;
     }
+
+
     SequenceI[] results = new SequenceI[result.size()];
     for (int i = 0, j = result.size(); i < j; i++)
     {
@@ -498,7 +531,7 @@ extends JPanel implements Runnable
     }
     else
     {
-      showErrorMessage("Error retrieving " + textfield.getText()
+      showErrorMessage("Error retrieving " + textArea.getText()
           + " from " + database.getSelectedItem());
     }