Merge branch 'develop' into features/JAL-653_JAL-1766_htslib_refseqsupport
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Sat, 20 Feb 2016 13:05:48 +0000 (13:05 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Sat, 20 Feb 2016 13:05:48 +0000 (13:05 +0000)
1  2 
src/jalview/structure/StructureSelectionManager.java

@@@ -47,8 -47,10 +47,8 @@@ import java.util.Collections
  import java.util.Enumeration;
  import java.util.HashMap;
  import java.util.IdentityHashMap;
 -import java.util.LinkedHashSet;
  import java.util.List;
  import java.util.Map;
 -import java.util.Set;
  import java.util.Vector;
  
  import MCview.Atom;
@@@ -78,7 -80,7 +78,7 @@@ public class StructureSelectionManage
    /*
     * Set of any registered mappings between (dataset) sequences.
     */
 -  public Set<AlignedCodonFrame> seqmappings = new LinkedHashSet<AlignedCodonFrame>();
 +  private List<AlignedCodonFrame> seqmappings = new ArrayList<AlignedCodonFrame>();
  
    private List<CommandListener> commandListeners = new ArrayList<CommandListener>();
  
      HashMap<Integer, int[]> mapping = new HashMap<Integer, int[]>();
      int resNum = -10000;
      int index = 0;
+     char insCode = ' ';
  
      do
      {
        Atom tmp = maxChain.atoms.elementAt(index);
-       if (resNum != tmp.resNumber && tmp.alignmentMapping != -1)
+       if ((resNum != tmp.resNumber || insCode != tmp.insCode)
+               && tmp.alignmentMapping != -1)
        {
          resNum = tmp.resNumber;
+         insCode = tmp.insCode;
          if (tmp.alignmentMapping >= -1)
          {
-           // TODO (JAL-1836) address root cause: negative residue no in PDB
-           // file
            mapping.put(tmp.alignmentMapping + 1, new int[] { tmp.resNumber,
                tmp.atomIndex });
          }
     *          the sequence that the mouse over occurred on
     * @param indexpos
     *          the absolute position being mouseovered in seq (0 to seq.length())
 -   * @param index
 +   * @param seqPos
     *          the sequence position (if -1, seq.findPosition is called to
     *          resolve the residue number)
     */
 -  public void mouseOverSequence(SequenceI seq, int indexpos, int index,
 +  public void mouseOverSequence(SequenceI seq, int indexpos, int seqPos,
            VamsasSource source)
    {
      boolean hasSequenceListeners = handlingVamsasMo
              || !seqmappings.isEmpty();
      SearchResults results = null;
 -    if (index == -1)
 +    if (seqPos == -1)
      {
 -      index = seq.findPosition(indexpos);
 +      seqPos = seq.findPosition(indexpos);
      }
      for (int i = 0; i < listeners.size(); i++)
      {
        }
        if (listener instanceof StructureListener)
        {
 -        highlightStructure((StructureListener) listener, seq, index);
 +        highlightStructure((StructureListener) listener, seq, seqPos);
        }
        else
        {
              {
                if (results == null)
                {
 -                results = MappingUtils.buildSearchResults(seq, index,
 +                results = MappingUtils.buildSearchResults(seq, seqPos,
                          seqmappings);
                }
                if (handlingVamsasMo)
                {
 -                results.addResult(seq, index, index);
 +                results.addResult(seq, seqPos, seqPos);
  
                }
                if (!results.isEmpty())
          else if (listener instanceof SecondaryStructureListener)
          {
            ((SecondaryStructureListener) listener).mouseOverSequence(seq,
 -                  indexpos, index);
 +                  indexpos, seqPos);
          }
        }
      }
  
    /**
     * Send suitable messages to a StructureListener to highlight atoms
 -   * corresponding to the given sequence position.
 +   * corresponding to the given sequence position(s)
     * 
     * @param sl
     * @param seq
 -   * @param index
 +   * @param positions
     */
 -  protected void highlightStructure(StructureListener sl, SequenceI seq,
 -          int index)
 +  public void highlightStructure(StructureListener sl, SequenceI seq,
 +          int... positions)
    {
      if (!sl.isListeningFor(seq))
      {
      {
        if (sm.sequence == seq || sm.sequence == seq.getDatasetSequence())
        {
 -        atomNo = sm.getAtomNum(index);
 -
 -        if (atomNo > 0)
 +        for (int index : positions)
          {
 -          atoms.add(new AtomSpec(sm.pdbfile, sm.pdbchain, sm
 -                  .getPDBResNum(index), atomNo));
 +          atomNo = sm.getAtomNum(index);
 +
 +          if (atomNo > 0)
 +          {
 +            atoms.add(new AtomSpec(sm.pdbfile, sm.pdbchain, sm
 +                    .getPDBResNum(index), atomNo));
 +          }
          }
        }
      }
    /**
     * Add each of the given codonFrames to the stored set, if not aready present.
     * 
 -   * @param set
 +   * @param mappings
     */
 -  public void registerMappings(Set<AlignedCodonFrame> set)
 +  public void registerMappings(List<AlignedCodonFrame> mappings)
    {
 -    if (set != null)
 +    if (mappings != null)
      {
 -      for (AlignedCodonFrame acf : set)
 +      for (AlignedCodonFrame acf : mappings)
        {
          registerMapping(acf);
        }
      progressIndicator.setProgressBar(message, progressSessionId);
    }
  
 +  public List<AlignedCodonFrame> getSequenceMappings()
 +  {
 +    return seqmappings;
 +  }
 +
  }