JAL-2465 bugfix and rerefactor renamed getPdbFile() method to getStructureFile()
[jalview.git] / src / jalview / structure / StructureSelectionManager.java
index addf310..c91317e 100644 (file)
@@ -50,6 +50,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.Hashtable;
 import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
@@ -89,7 +90,7 @@ public class StructureSelectionManager
 
   private List<SelectionListener> sel_listeners = new ArrayList<SelectionListener>();
 
-  private List<String> phyre2ModelTemplates = new ArrayList<String>();
+  private Map<String, String> phyre2ModelTemplates = new Hashtable<String, String>();
 
   /**
    * @return true if will try to use external services for processing secondary
@@ -599,10 +600,15 @@ public class StructureSelectionManager
         setProgressBar(null);
         setProgressBar(MessageManager
                 .getString("status.obtaining_mapping_with_phyre2_template_alignment"));
+        String fastaFile = getPhyre2FastaFileFor(pdbFile);
         StructureMapping phyre2ModelMapping = new Phyre2Client(pdb)
-                .getStructureMapping(seq, pdbFile, " ");
-
+                .getStructureMapping(seq, pdbFile, fastaFile, " ");
         seqToStrucMapping.add(phyre2ModelMapping);
+        maxChain.makeExactMapping(maxAlignseq, seq);
+        maxChain.transferRESNUMFeatures(seq, null);
+        jalview.datamodel.Mapping sqmpping = maxAlignseq
+                .getMappingFromS1(false);
+        maxChain.transferResidueAnnotation(phyre2ModelMapping, sqmpping);
         ds.addPDBId(maxChain.sequence.getAllPDBEntries().get(0));
       }
       else
@@ -628,9 +634,10 @@ public class StructureSelectionManager
     return pdb;
   }
 
-  public void registerPhyre2Template(String phyre2Template)
+  public void registerPhyre2Template(String phyre2Template,
+          String fastaMappingFile)
   {
-    phyre2ModelTemplates.add(phyre2Template);
+    phyre2ModelTemplates.put(phyre2Template, fastaMappingFile);
   }
 
   /**
@@ -778,7 +785,7 @@ public class StructureSelectionManager
       if (listeners.elementAt(i) instanceof StructureListener)
       {
         sl = (StructureListener) listeners.elementAt(i);
-        for (String pdbfile : sl.getPdbFile())
+        for (String pdbfile : sl.getStructureFiles())
         {
           pdbs.remove(pdbfile);
         }
@@ -843,6 +850,27 @@ public class StructureSelectionManager
       return;
     }
 
+    SearchResultsI results = findAlignmentPositionsForStructurePositions(atoms);
+    for (Object li : listeners)
+    {
+      if (li instanceof SequenceListener)
+      {
+        ((SequenceListener) li).highlightSequence(results);
+      }
+    }
+  }
+
+  /**
+   * Constructs a SearchResults object holding regions (if any) in the Jalview
+   * alignment which have a mapping to the structure viewer positions in the
+   * supplied list
+   * 
+   * @param atoms
+   * @return
+   */
+  public SearchResultsI findAlignmentPositionsForStructurePositions(
+          List<AtomSpec> atoms)
+  {
     SearchResultsI results = new SearchResults();
     for (AtomSpec atom : atoms)
     {
@@ -868,13 +896,7 @@ public class StructureSelectionManager
         }
       }
     }
-    for (Object li : listeners)
-    {
-      if (li instanceof SequenceListener)
-      {
-        ((SequenceListener) li).highlightSequence(results);
-      }
-    }
+    return results;
   }
 
   /**
@@ -1400,7 +1422,13 @@ public class StructureSelectionManager
     {
       return false;
     }
-    return (phyre2ModelTemplates.contains(structureFile));
+    return phyre2ModelTemplates.get(structureFile) != null
+            && !phyre2ModelTemplates.get(structureFile).isEmpty();
+  }
+
+  public String getPhyre2FastaFileFor(String structureFile)
+  {
+    return phyre2ModelTemplates.get(structureFile);
   }
 
 
@@ -1409,4 +1437,9 @@ public class StructureSelectionManager
     return instances.values().iterator().next();
   }
 
+  public void addStructureMapping(StructureMapping smapping)
+  {
+    mappings.add(smapping);
+  }
+
 }