JAL-1919, JAL-1960 fix to disable refetching dbrefs when viewing structures
[jalview.git] / src / jalview / gui / StructureChooser.java
index d924e73..6471795 100644 (file)
@@ -35,6 +35,7 @@ import jalview.fts.service.pdb.PDBFTSRestClient;
 import jalview.jbgui.GStructureChooser;
 import jalview.structure.StructureSelectionManager;
 import jalview.util.MessageManager;
+import jalview.ws.DBRefFetcher;
 import jalview.ws.sifts.SiftsSettings;
 
 import java.awt.event.ItemEvent;
@@ -330,8 +331,8 @@ public class StructureChooser extends GStructureChooser implements
   }
 
   /**
-   * Remove the following special characters from input string +, -, &, |, !, (,
-   * ), {, }, [, ], ^, ", ~, *, ?, :, \
+   * Remove the following special characters from input string +, -, &, !, (, ),
+   * {, }, [, ], ^, ", ~, *, ?, :, \
    * 
    * @param seqName
    * @return
@@ -340,7 +341,7 @@ public class StructureChooser extends GStructureChooser implements
   {
     Objects.requireNonNull(seqName);
     return seqName.replaceAll("\\[\\d*\\]", "")
-            .replaceAll("[^\\dA-Za-z|]", "").replaceAll("\\s+", "+");
+            .replaceAll("[^\\dA-Za-z|_]", "").replaceAll("\\s+", "+");
   }
 
 
@@ -731,17 +732,17 @@ public class StructureChooser extends GStructureChooser implements
     {
           int pdbIdColIndex = tbl_summary.getColumn("PDB Id")
                   .getModelIndex();
-      int refSeqColIndex = tbl_summary.getColumn("Ref Sequence")
+          int refSeqColIndex = tbl_summary.getColumn("Ref Sequence")
               .getModelIndex();
-      int[] selectedRows = tbl_summary.getSelectedRows();
+          int[] selectedRows = tbl_summary.getSelectedRows();
       PDBEntry[] pdbEntriesToView = new PDBEntry[selectedRows.length];
       int count = 0;
       ArrayList<SequenceI> selectedSeqsToView = new ArrayList<SequenceI>();
       for (int row : selectedRows)
       {
-        String pdbIdStr = tbl_summary.getValueAt(row, pdbIdColIndex)
+            String pdbIdStr = tbl_summary.getValueAt(row, pdbIdColIndex)
                 .toString();
-        SequenceI selectedSeq = (SequenceI) tbl_summary.getValueAt(row,
+            SequenceI selectedSeq = (SequenceI) tbl_summary.getValueAt(row,
                 refSeqColIndex);
         selectedSeqsToView.add(selectedSeq);
             PDBEntry pdbEntry = selectedSeq.getPDBEntry(pdbIdStr);
@@ -800,6 +801,10 @@ public class StructureChooser extends GStructureChooser implements
       if (pdbEntry == null)
       {
         pdbEntry = new PDBEntry();
+            if (pdbIdStr.split(":").length > 1)
+            {
+              pdbEntry.setChainCode(pdbIdStr.split(":")[1]);
+            }
         pdbEntry.setId(pdbIdStr);
         pdbEntry.setType(PDBEntry.Type.PDB);
         selectedSequence.getDatasetSequence().addPDBId(pdbEntry);
@@ -854,37 +859,76 @@ public class StructureChooser extends GStructureChooser implements
 
     if (SiftsSettings.isMapWithSifts())
     {
+      ArrayList<SequenceI> seqsWithoutSourceDBRef = new ArrayList<SequenceI>();
       for (SequenceI seq : sequences)
       {
         if (seq.getSourceDBRef() == null)
         {
-          ssm.setProgressBar(null);
-          ssm.setProgressBar("Fetching Database refs..");
-          new jalview.ws.DBRefFetcher(sequences, null, null, null, false)
-                  .fetchDBRefs(true);
-          break;
+          if (seq.getDBRefs() == null)
+          {
+            seqsWithoutSourceDBRef.add(seq);
+            continue;
+          }
+          for (DBRefEntry dbRef : seq.getDBRefs())
+          {
+            if (dbRef.getSource().equalsIgnoreCase("uniprot"))
+            {
+              seq.setSourceDBRef(dbRef);
+              break;
+            }
+          }
+          for (DBRefEntry dbRef : seq.getDBRefs())
+          {
+            if (dbRef.getSource().equalsIgnoreCase("pdb"))
+            {
+              seq.setSourceDBRef(dbRef);
+              break;
+            }
+          }
+          if (seq.getSourceDBRef() == null)
+          {
+            seqsWithoutSourceDBRef.add(seq);
+          }
         }
       }
-    }
-        if (pdbEntriesToView.length > 1)
+      if (!seqsWithoutSourceDBRef.isEmpty())
+      {
+        int y = seqsWithoutSourceDBRef.size();
+        ssm.setProgressBar(null);
+        ssm.setProgressBar(">>>>> Fetching Database refs for " + y
+                + " sequence" + (y > 1 ? "s" : "")
+                + " with no valid uniprot or pdb ref for SIFTS mapping");
+        System.out.println(">>>>> Fetching Database refs for " + y
+                + " sequence" + (y > 1 ? "s" : "")
+                + " with no valid uniprot or pdb ref for SIFTS mapping");
+        SequenceI[] seqWithoutSrcDBRef = new SequenceI[y];
+        int x = 0;
+        for (SequenceI fSeq : seqsWithoutSourceDBRef)
         {
-          ArrayList<SequenceI[]> seqsMap = new ArrayList<SequenceI[]>();
-          for (SequenceI seq : sequences)
-          {
-            seqsMap.add(new SequenceI[] { seq });
-          }
-          SequenceI[][] collatedSeqs = seqsMap.toArray(new SequenceI[0][0]);
+          seqWithoutSrcDBRef[x++] = fSeq;
+        }
+        new DBRefFetcher(seqWithoutSrcDBRef).fetchDBRefs(true);
+      }
+    }
+    if (pdbEntriesToView.length > 1)
+    {
+      ArrayList<SequenceI[]> seqsMap = new ArrayList<SequenceI[]>();
+      for (SequenceI seq : sequences)
+      {
+        seqsMap.add(new SequenceI[] { seq });
+      }
+      SequenceI[][] collatedSeqs = seqsMap.toArray(new SequenceI[0][0]);
       ssm.setProgressBar(null);
       ssm.setProgressBar("Fetching PDB Structures for selected entries..");
-          sViewer.viewStructures(pdbEntriesToView, collatedSeqs, alignPanel);
-        }
-        else
-        {
+      sViewer.viewStructures(pdbEntriesToView, collatedSeqs, alignPanel);
+    }
+    else
+    {
       ssm.setProgressBar(null);
       ssm.setProgressBar("Fetching PDB Structure for "
               + pdbEntriesToView[0].getId());
-          sViewer.viewStructures(pdbEntriesToView[0], sequences, alignPanel);
-        }
+      sViewer.viewStructures(pdbEntriesToView[0], sequences, alignPanel);
+    }
   }
 
   /**
@@ -943,6 +987,9 @@ public class StructureChooser extends GStructureChooser implements
         isValidPBDEntry = false;
         if (txt_search.getText().length() > 0)
         {
+          String searchTerm = txt_search.getText().toLowerCase();
+          searchTerm = searchTerm.split(":")[0];
+          System.out.println(">>>>> search term : " + searchTerm);
           List<FTSDataColumnI> wantedFields = new ArrayList<FTSDataColumnI>();
           FTSRestRequest pdbRequest = new FTSRestRequest();
           pdbRequest.setAllowEmptySeq(false);
@@ -950,7 +997,7 @@ public class StructureChooser extends GStructureChooser implements
           pdbRequest.setFieldToSearchBy("(pdb_id:");
           pdbRequest.setWantedFields(wantedFields);
           pdbRequest
-                  .setSearchTerm(txt_search.getText().toLowerCase() + ")");
+.setSearchTerm(searchTerm + ")");
           pdbRequest.setAssociatedSequence(selectedSequence);
           pdbRestCleint = PDBFTSRestClient.getInstance();
           wantedFields.add(pdbRestCleint.getPrimaryKeyColumn());