moving word methods to MapList and begin bug-fix for single-residue codon span featur...
[jalview.git] / src / jalview / analysis / Finder.java
index c385ac8..2fa09aa 100644 (file)
-package jalview.analysis;
-import java.util.Vector;
-
-import jalview.datamodel.*;
-
-public class Finder {
-    /**
-     * Implements the search algorithms for the Find dialog box.
-     */
-    SearchResults searchResults;
-    AlignmentI alignment;
-    jalview.datamodel.SequenceGroup selection=null;
-    Vector idMatch=null;
-    boolean caseSensitive=false;
-    boolean findAll=false;
-    com.stevesoft.pat.Regex regex=null;
-    /**
-     * hold's last-searched position between calles to find(false)
-     */
-    int seqIndex=0,resIndex=0;
-    public Finder(AlignmentI alignment, SequenceGroup selection) {
-        this.alignment=alignment;
-        this.selection = selection;
-    }
-
-    public Finder(AlignmentI alignment, SequenceGroup selectionGroup, int seqIndex, int resIndex) {
-        this(alignment, selectionGroup);
-        this.seqIndex=seqIndex;
-        this.resIndex=resIndex;
-    }
-
-    public boolean find(String searchString) {
-        boolean hasResults=false;
-        if(!caseSensitive)
-            searchString = searchString.toUpperCase();
-        regex = new com.stevesoft.pat.Regex(searchString);
-        searchResults = new SearchResults();
-        idMatch = new Vector();
-        Sequence seq;
-        String item = null;
-        boolean found = false;
-
-        ////// is the searchString a residue number?
-        try
-        {
-            int res = Integer.parseInt(searchString);
-            found = true;
-            if (selection == null || selection.getSize() < 1)
-            {
-              seq = (Sequence) alignment.getSequenceAt(0);
-            }
-            else
-            {
-              seq = (Sequence) (selection.getSequenceAt(0));
-            }
-
-            searchResults.addResult(seq, res, res);
-            hasResults=true;
-        }
-        catch (NumberFormatException ex)
-        {
-        }
-
-        ///////////////////////////////////////////////
-
-        int end = alignment.getHeight();
-
-
-        if (selection != null)
-        {
-            if ((selection.getSize() < 1) ||
-                    ((selection.getEndRes() - selection.getStartRes()) < 2))
-            {
-                selection = null;
-            }
-        }
-
-        while (!found && (seqIndex < end))
-        {
-            seq = (Sequence) alignment.getSequenceAt(seqIndex);
-
-            if ((selection != null) && !selection.getSequences(null).contains(seq))
-            {
-                seqIndex++;
-                resIndex = 0;
-
-                continue;
-            }
-
-            item = seq.getSequenceAsString();
-            // JBPNote - check if this toUpper which is present in the application implementation makes a difference
-            //if(!caseSensitive)
-            //  item = item.toUpperCase();
-
-            if ((selection != null) &&
-                    (selection.getEndRes() < alignment.getWidth()-1))
-            {
-                item = item.substring(0, selection.getEndRes() + 1);
-            }
-
-            ///Shall we ignore gaps???? - JBPNote: Add Flag for forcing this or not
-            StringBuffer noGapsSB = new StringBuffer();
-            int insertCount = 0;
-            Vector spaces = new Vector();
-
-            for (int j = 0; j < item.length(); j++)
-            {
-                if (!jalview.util.Comparison.isGap(item.charAt(j)))
-                {
-                    noGapsSB.append(item.charAt(j));
-                    spaces.add(new Integer(insertCount));
-                }
-                else
-                {
-                    insertCount++;
-                }
-            }
-
-            String noGaps = noGapsSB.toString();
-
-            for (int r = resIndex; r < noGaps.length(); r++)
-            {
-
-                if (regex.searchFrom(noGaps, r))
-                {
-                    resIndex = regex.matchedFrom();
-
-                    if ((selection != null) &&
-                            ((resIndex +
-                            Integer.parseInt(spaces.get(resIndex).toString())) < selection.getStartRes()))
-                    {
-                        continue;
-                    }
-
-
-                    int sres = seq.findPosition(resIndex +
-                            Integer.parseInt(spaces.elementAt(resIndex)
-                                                   .toString()));
-                    int eres = seq.findPosition(regex.matchedTo() - 1 +
-                            Integer.parseInt(spaces.elementAt(regex.matchedTo() -
-                                    1).toString()));
-
-                    searchResults.addResult(seq, sres, eres);
-                    hasResults=true;
-                    if (!findAll)
-                    {
-                        // thats enough, break and display the result
-                        found = true;
-                        resIndex++;
-
-                        break;
-                    }
-
-                    r = resIndex;
-                }
-                else
-                {
-                  break;
-                }
-            }
-
-            if (!found)
-            {
-                seqIndex++;
-                resIndex = 0;
-            }
-        }
-
-        for (int id = 0; id < alignment.getHeight(); id++)
-        {
-            if (regex.search(alignment.getSequenceAt(id).getName()))
-            {
-                idMatch.add(alignment.getSequenceAt(id));
-                hasResults=true;
-            }
-        }
-        return hasResults;
-    }
-    /**
-     * @return the alignment
-     */
-    public AlignmentI getAlignment() {
-        return alignment;
-    }
-    /**
-     * @param alignment the alignment to set
-     */
-    public void setAlignment(AlignmentI alignment) {
-        this.alignment = alignment;
-    }
-    /**
-     * @return the caseSensitive
-     */
-    public boolean isCaseSensitive() {
-        return caseSensitive;
-    }
-    /**
-     * @param caseSensitive the caseSensitive to set
-     */
-    public void setCaseSensitive(boolean caseSensitive) {
-        this.caseSensitive = caseSensitive;
-    }
-    /**
-     * @return the findAll
-     */
-    public boolean isFindAll() {
-        return findAll;
-    }
-    /**
-     * @param findAll the findAll to set
-     */
-    public void setFindAll(boolean findAll) {
-        this.findAll = findAll;
-    }
-    /**
-     * @return the selection
-     */
-    public jalview.datamodel.SequenceGroup getSelection() {
-        return selection;
-    }
-    /**
-     * @param selection the selection to set
-     */
-    public void setSelection(jalview.datamodel.SequenceGroup selection) {
-        this.selection = selection;
-    }
-    /**
-     * @return the idMatch
-     */
-    public Vector getIdMatch() {
-        return idMatch;
-    }
-    /**
-     * @return the regex
-     */
-    public com.stevesoft.pat.Regex getRegex() {
-        return regex;
-    }
-    /**
-     * @return the searchResults
-     */
-    public SearchResults getSearchResults() {
-        return searchResults;
-    }
-
-    /**
-     * @return the resIndex
-     */
-    public int getResIndex() {
-        return resIndex;
-    }
-
-    /**
-     * @param resIndex the resIndex to set
-     */
-    public void setResIndex(int resIndex) {
-        this.resIndex = resIndex;
-    }
-
-    /**
-     * @return the seqIndex
-     */
-    public int getSeqIndex() {
-        return seqIndex;
-    }
-
-    /**
-     * @param seqIndex the seqIndex to set
-     */
-    public void setSeqIndex(int seqIndex) {
-        this.seqIndex = seqIndex;
-    }
-}
+package jalview.analysis;\r
+\r
+import java.util.*;\r
+\r
+import jalview.datamodel.*;\r
+\r
+public class Finder\r
+{\r
+  /**\r
+   * Implements the search algorithms for the Find dialog box.\r
+   */\r
+  SearchResults searchResults;\r
+  AlignmentI alignment;\r
+  jalview.datamodel.SequenceGroup selection = null;\r
+  Vector idMatch = null;\r
+  boolean caseSensitive = false;\r
+  boolean findAll = false;\r
+  com.stevesoft.pat.Regex regex = null;\r
+  /**\r
+   * hold's last-searched position between calles to find(false)\r
+   */\r
+  int seqIndex = 0, resIndex = 0;\r
+  public Finder(AlignmentI alignment, SequenceGroup selection)\r
+  {\r
+    this.alignment = alignment;\r
+    this.selection = selection;\r
+  }\r
+\r
+  public Finder(AlignmentI alignment, SequenceGroup selectionGroup,\r
+                int seqIndex, int resIndex)\r
+  {\r
+    this(alignment, selectionGroup);\r
+    this.seqIndex = seqIndex;\r
+    this.resIndex = resIndex;\r
+  }\r
+\r
+  public boolean find(String searchString)\r
+  {\r
+    boolean hasResults = false;\r
+    if (!caseSensitive)\r
+    {\r
+      searchString = searchString.toUpperCase();\r
+    }\r
+    regex = new com.stevesoft.pat.Regex(searchString);\r
+    searchResults = new SearchResults();\r
+    idMatch = new Vector();\r
+    Sequence seq;\r
+    String item = null;\r
+    boolean found = false;\r
+\r
+    ////// is the searchString a residue number?\r
+    try\r
+    {\r
+      int res = Integer.parseInt(searchString);\r
+      found = true;\r
+      if (selection == null || selection.getSize() < 1)\r
+      {\r
+        seq = (Sequence) alignment.getSequenceAt(0);\r
+      }\r
+      else\r
+      {\r
+        seq = (Sequence) (selection.getSequenceAt(0));\r
+      }\r
+\r
+      searchResults.addResult(seq, res, res);\r
+      hasResults = true;\r
+    }\r
+    catch (NumberFormatException ex)\r
+    {\r
+    }\r
+\r
+    ///////////////////////////////////////////////\r
+\r
+    int end = alignment.getHeight();\r
+\r
+    if (selection != null)\r
+    {\r
+      if ( (selection.getSize() < 1) ||\r
+          ( (selection.getEndRes() - selection.getStartRes()) < 2))\r
+      {\r
+        selection = null;\r
+      }\r
+    }\r
+\r
+    while (!found && (seqIndex < end))\r
+    {\r
+      seq = (Sequence) alignment.getSequenceAt(seqIndex);\r
+\r
+      if ( (selection != null) && !selection.getSequences(null).contains(seq))\r
+      {\r
+        seqIndex++;\r
+        resIndex = 0;\r
+\r
+        continue;\r
+      }\r
+\r
+      item = seq.getSequenceAsString();\r
+      // JBPNote - check if this toUpper which is present in the application implementation makes a difference\r
+      //if(!caseSensitive)\r
+      //  item = item.toUpperCase();\r
+\r
+      if ( (selection != null) &&\r
+          (selection.getEndRes() < alignment.getWidth() - 1))\r
+      {\r
+        item = item.substring(0, selection.getEndRes() + 1);\r
+      }\r
+\r
+      ///Shall we ignore gaps???? - JBPNote: Add Flag for forcing this or not\r
+      StringBuffer noGapsSB = new StringBuffer();\r
+      int insertCount = 0;\r
+      Vector spaces = new Vector();\r
+\r
+      for (int j = 0; j < item.length(); j++)\r
+      {\r
+        if (!jalview.util.Comparison.isGap(item.charAt(j)))\r
+        {\r
+          noGapsSB.append(item.charAt(j));\r
+          spaces.addElement(new Integer(insertCount));\r
+        }\r
+        else\r
+        {\r
+          insertCount++;\r
+        }\r
+      }\r
+\r
+      String noGaps = noGapsSB.toString();\r
+\r
+      for (int r = resIndex; r < noGaps.length(); r++)\r
+      {\r
+\r
+        if (regex.searchFrom(noGaps, r))\r
+        {\r
+          resIndex = regex.matchedFrom();\r
+\r
+          if ( (selection != null) &&\r
+              ( (resIndex +\r
+                 Integer.parseInt(spaces.elementAt(resIndex).toString())) <\r
+               selection.getStartRes()))\r
+          {\r
+            continue;\r
+          }\r
+\r
+          int sres = seq.findPosition(resIndex +\r
+                                      Integer.parseInt(spaces.elementAt(\r
+              resIndex)\r
+              .toString()));\r
+          int eres = seq.findPosition(regex.matchedTo() - 1 +\r
+                                      Integer.parseInt(spaces.elementAt(regex.\r
+              matchedTo() -\r
+              1).toString()));\r
+\r
+          searchResults.addResult(seq, sres, eres);\r
+          hasResults = true;\r
+          if (!findAll)\r
+          {\r
+            // thats enough, break and display the result\r
+            found = true;\r
+            resIndex++;\r
+\r
+            break;\r
+          }\r
+\r
+          r = resIndex;\r
+        }\r
+        else\r
+        {\r
+          break;\r
+        }\r
+      }\r
+\r
+      if (!found)\r
+      {\r
+        seqIndex++;\r
+        resIndex = 0;\r
+      }\r
+    }\r
+\r
+    for (int id = 0; id < alignment.getHeight(); id++)\r
+    {\r
+      if (regex.search(alignment.getSequenceAt(id).getName()))\r
+      {\r
+        idMatch.addElement(alignment.getSequenceAt(id));\r
+        hasResults = true;\r
+      }\r
+    }\r
+    return hasResults;\r
+  }\r
+\r
+  /**\r
+   * @return the alignment\r
+   */\r
+  public AlignmentI getAlignment()\r
+  {\r
+    return alignment;\r
+  }\r
+\r
+  /**\r
+   * @param alignment the alignment to set\r
+   */\r
+  public void setAlignment(AlignmentI alignment)\r
+  {\r
+    this.alignment = alignment;\r
+  }\r
+\r
+  /**\r
+   * @return the caseSensitive\r
+   */\r
+  public boolean isCaseSensitive()\r
+  {\r
+    return caseSensitive;\r
+  }\r
+\r
+  /**\r
+   * @param caseSensitive the caseSensitive to set\r
+   */\r
+  public void setCaseSensitive(boolean caseSensitive)\r
+  {\r
+    this.caseSensitive = caseSensitive;\r
+  }\r
+\r
+  /**\r
+   * @return the findAll\r
+   */\r
+  public boolean isFindAll()\r
+  {\r
+    return findAll;\r
+  }\r
+\r
+  /**\r
+   * @param findAll the findAll to set\r
+   */\r
+  public void setFindAll(boolean findAll)\r
+  {\r
+    this.findAll = findAll;\r
+  }\r
+\r
+  /**\r
+   * @return the selection\r
+   */\r
+  public jalview.datamodel.SequenceGroup getSelection()\r
+  {\r
+    return selection;\r
+  }\r
+\r
+  /**\r
+   * @param selection the selection to set\r
+   */\r
+  public void setSelection(jalview.datamodel.SequenceGroup selection)\r
+  {\r
+    this.selection = selection;\r
+  }\r
+\r
+  /**\r
+   * @return the idMatch\r
+   */\r
+  public Vector getIdMatch()\r
+  {\r
+    return idMatch;\r
+  }\r
+\r
+  /**\r
+   * @return the regex\r
+   */\r
+  public com.stevesoft.pat.Regex getRegex()\r
+  {\r
+    return regex;\r
+  }\r
+\r
+  /**\r
+   * @return the searchResults\r
+   */\r
+  public SearchResults getSearchResults()\r
+  {\r
+    return searchResults;\r
+  }\r
+\r
+  /**\r
+   * @return the resIndex\r
+   */\r
+  public int getResIndex()\r
+  {\r
+    return resIndex;\r
+  }\r
+\r
+  /**\r
+   * @param resIndex the resIndex to set\r
+   */\r
+  public void setResIndex(int resIndex)\r
+  {\r
+    this.resIndex = resIndex;\r
+  }\r
+\r
+  /**\r
+   * @return the seqIndex\r
+   */\r
+  public int getSeqIndex()\r
+  {\r
+    return seqIndex;\r
+  }\r
+\r
+  /**\r
+   * @param seqIndex the seqIndex to set\r
+   */\r
+  public void setSeqIndex(int seqIndex)\r
+  {\r
+    this.seqIndex = seqIndex;\r
+  }\r
+}\r