Don't parse input id, leave it as it is
[jalview.git] / src / jalview / gui / SequenceFetcher.java
index 74312e2..b0476ce 100755 (executable)
@@ -39,7 +39,10 @@ public class SequenceFetcher
 \r
     frame = new JInternalFrame();\r
     frame.setContentPane(this);\r
-    Desktop.addInternalFrame(frame, "Sequence Fetcher", 390, 120);\r
+    if(System.getProperty("os.name").startsWith("Mac"))\r
+      Desktop.addInternalFrame(frame, "Sequence Fetcher", 390, 135);\r
+    else\r
+      Desktop.addInternalFrame(frame, "Sequence Fetcher", 390, 120);\r
   }\r
 \r
   private void jbInit()\r
@@ -113,8 +116,7 @@ public class SequenceFetcher
 \r
   public void ok_actionPerformed(ActionEvent e)\r
   {\r
-    frame.setTitle("Sequence Fetcher - Fetching Sequence from " +\r
-                   database.getSelectedItem());\r
+    frame.setTitle("WSDBfetch@EBI Sequence Fetcher - Fetching Sequence...");\r
     database.setEnabled(false);\r
     textfield.setEnabled(false);\r
     ok.setEnabled(false);\r
@@ -122,43 +124,59 @@ public class SequenceFetcher
 \r
     Thread worker = new Thread(this);\r
     worker.start();\r
-\r
   }\r
 \r
   public void run()\r
   {\r
+    String error = null;\r
     StringBuffer result = new StringBuffer();\r
-    if (database.getSelectedItem().equals("Uniprot")\r
-        || database.getSelectedItem().equals("EMBL")\r
-        || database.getSelectedItem().equals("EMBLCDS"))\r
-    {\r
-      EBIFetchClient dbFetch = new EBIFetchClient();\r
-      String[] reply = dbFetch.fetchData(\r
-          database.getSelectedItem().toString().toLowerCase(\r
-          ) + ":" + textfield.getText(),\r
-          "fasta", "raw");\r
-\r
-      for (int i = 0; i < reply.length; i++)\r
-        result.append(reply[i]+"\n");\r
-    }\r
-    else if (database.getSelectedItem().equals("PDB"))\r
-    {\r
-      EBIFetchClient ebi = new EBIFetchClient();\r
-      String[] reply = ebi.fetchData("pdb:" + textfield.getText(), "pdb",\r
-                                     "raw");\r
-      PDBfile pdbfile = new PDBfile(reply);\r
-      for (int i = 0; i < pdbfile.chains.size(); i++)\r
+      if (database.getSelectedItem().equals("Uniprot")\r
+          || database.getSelectedItem().equals("EMBL")\r
+          || database.getSelectedItem().equals("EMBLCDS"))\r
       {\r
-        result.append("\n>" +\r
-                     ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.getName() +\r
-                     "\n"\r
-                     +\r
-                     ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.\r
-                     getSequence());\r
+        EBIFetchClient dbFetch = new EBIFetchClient();\r
+        String[] reply = dbFetch.fetchData(\r
+            database.getSelectedItem().toString().toLowerCase(\r
+            ) + ":" + textfield.getText(),\r
+            "fasta", "raw");\r
+\r
+        for (int i = 0; i < reply.length; i++)\r
+          result.append(reply[i] + "\n");\r
+      }\r
+      else if (database.getSelectedItem().equals("PDB"))\r
+      {\r
+        String id = textfield.getText().toUpperCase();\r
+        String chain=null;\r
+        if(id.indexOf(":")>-1)\r
+        {\r
+          chain = id.substring(id.indexOf(":")+1);\r
+          id = id.substring(0,id.indexOf(":"));\r
+          System.out.println(id+" "+chain);\r
+        }\r
+\r
+        EBIFetchClient ebi = new EBIFetchClient();\r
+        String[] reply = ebi.fetchData("pdb:" + id, "pdb",\r
+                                       "raw");\r
+        try{\r
+          PDBfile pdbfile = new PDBfile(reply);\r
+          for (int i = 0; i < pdbfile.chains.size(); i++)\r
+          {\r
+            if( chain == null || ((PDBChain)pdbfile.chains.elementAt(i)).id.toUpperCase().equals(chain))\r
+            result.append("\n>PDB|" + id+"|"+\r
+                          ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.\r
+                          getName() +\r
+                          "\n"\r
+                          +\r
+                          ( (PDBChain) pdbfile.chains.elementAt(i)).sequence.\r
+                          getSequence());\r
+          }\r
+        }catch(Exception ex)// Problem parsing PDB file\r
+        {\r
+          error = "Error retrieving "+textfield.getText()+" from "+database.getSelectedItem();\r
+        }\r
       }\r
-    }\r
 \r
-    if (result.length() > 0)\r
+    if (result.length() > 0 && error==null)\r
     {\r
       String format = IdentifyFile.Identify(result.toString(), "Paste");\r
       SequenceI[] sequences = null;\r
@@ -166,7 +184,7 @@ public class SequenceFetcher
       if (FormatAdapter.formats.contains(format))\r
       {\r
         sequences = new FormatAdapter().readFile(result.toString(), "Paste", format);\r
-        if (sequences != null)\r
+        if (sequences != null && sequences.length>0)\r
         {\r
           if(alignFrame==null)\r
           {\r
@@ -219,14 +237,28 @@ public class SequenceFetcher
           }\r
 \r
         }\r
+        else\r
+          error = "Error retrieving "+textfield.getText()+" from "+database.getSelectedItem();\r
+\r
+\r
+\r
       }\r
     }\r
 \r
+    if(error!=null)\r
+          showErrorMessage(error);\r
+\r
     database.setEnabled(true);\r
     textfield.setEnabled(true);\r
     ok.setEnabled(true);\r
     cancel.setEnabled(true);\r
-    frame.setTitle("Sequence Fetcher");\r
+    frame.setTitle("WSDBfetch@EBI Sequence Fetcher");\r
+  }\r
+\r
+  void showErrorMessage(String error)\r
+  {\r
+    JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
+         error, "Error Retrieving Data", JOptionPane.WARNING_MESSAGE);\r
   }\r
 }\r
 \r