Formatting
[jalview.git] / src / jalview / analysis / Finder.java
index 479c856..2fa09aa 100644 (file)
 package jalview.analysis;\r
-import java.util.Vector;\r
+\r
+import java.util.*;\r
 \r
 import jalview.datamodel.*;\r
 \r
-public class Finder {\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
-        this.alignment=alignment;\r
-        this.selection = selection;\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
-    public Finder(AlignmentI alignment, SequenceGroup selectionGroup, int seqIndex, int resIndex) {\r
-        this(alignment, selectionGroup);\r
-        this.seqIndex=seqIndex;\r
-        this.resIndex=resIndex;\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
-    public boolean find(String searchString) {\r
-        boolean hasResults=false;\r
-        if(!caseSensitive)\r
-            searchString = searchString.toUpperCase();\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
+    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
-            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
+          noGapsSB.append(item.charAt(j));\r
+          spaces.addElement(new Integer(insertCount));\r
         }\r
-        catch (NumberFormatException ex)\r
+        else\r
         {\r
+          insertCount++;\r
         }\r
+      }\r
 \r
-        ///////////////////////////////////////////////\r
-\r
-        int end = alignment.getHeight();\r
+      String noGaps = noGapsSB.toString();\r
 \r
+      for (int r = resIndex; r < noGaps.length(); r++)\r
+      {\r
 \r
-        if (selection != null)\r
+        if (regex.searchFrom(noGaps, r))\r
         {\r
-            if ((selection.getSize() < 1) ||\r
-                    ((selection.getEndRes() - selection.getStartRes()) < 2))\r
-            {\r
-                selection = null;\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
-        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())) < selection.getStartRes()))\r
-                    {\r
-                        continue;\r
-                    }\r
-\r
-\r
-                    int sres = seq.findPosition(resIndex +\r
-                            Integer.parseInt(spaces.elementAt(resIndex)\r
-                                                   .toString()));\r
-                    int eres = seq.findPosition(regex.matchedTo() - 1 +\r
-                            Integer.parseInt(spaces.elementAt(regex.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
+            break;\r
+          }\r
 \r
-        for (int id = 0; id < alignment.getHeight(); id++)\r
+          r = resIndex;\r
+        }\r
+        else\r
         {\r
-            if (regex.search(alignment.getSequenceAt(id).getName()))\r
-            {\r
-                idMatch.addElement(alignment.getSequenceAt(id));\r
-                hasResults=true;\r
-            }\r
+          break;\r
         }\r
-        return hasResults;\r
-    }\r
-    /**\r
-     * @return the alignment\r
-     */\r
-    public AlignmentI getAlignment() {\r
-        return alignment;\r
-    }\r
-    /**\r
-     * @param alignment the alignment to set\r
-     */\r
-    public void setAlignment(AlignmentI alignment) {\r
-        this.alignment = alignment;\r
-    }\r
-    /**\r
-     * @return the caseSensitive\r
-     */\r
-    public boolean isCaseSensitive() {\r
-        return caseSensitive;\r
-    }\r
-    /**\r
-     * @param caseSensitive the caseSensitive to set\r
-     */\r
-    public void setCaseSensitive(boolean caseSensitive) {\r
-        this.caseSensitive = caseSensitive;\r
-    }\r
-    /**\r
-     * @return the findAll\r
-     */\r
-    public boolean isFindAll() {\r
-        return findAll;\r
-    }\r
-    /**\r
-     * @param findAll the findAll to set\r
-     */\r
-    public void setFindAll(boolean findAll) {\r
-        this.findAll = findAll;\r
-    }\r
-    /**\r
-     * @return the selection\r
-     */\r
-    public jalview.datamodel.SequenceGroup getSelection() {\r
-        return selection;\r
-    }\r
-    /**\r
-     * @param selection the selection to set\r
-     */\r
-    public void setSelection(jalview.datamodel.SequenceGroup selection) {\r
-        this.selection = selection;\r
-    }\r
-    /**\r
-     * @return the idMatch\r
-     */\r
-    public Vector getIdMatch() {\r
-        return idMatch;\r
-    }\r
-    /**\r
-     * @return the regex\r
-     */\r
-    public com.stevesoft.pat.Regex getRegex() {\r
-        return regex;\r
-    }\r
-    /**\r
-     * @return the searchResults\r
-     */\r
-    public SearchResults getSearchResults() {\r
-        return searchResults;\r
-    }\r
-\r
-    /**\r
-     * @return the resIndex\r
-     */\r
-    public int getResIndex() {\r
-        return resIndex;\r
-    }\r
-\r
-    /**\r
-     * @param resIndex the resIndex to set\r
-     */\r
-    public void setResIndex(int resIndex) {\r
-        this.resIndex = resIndex;\r
-    }\r
+      }\r
 \r
-    /**\r
-     * @return the seqIndex\r
-     */\r
-    public int getSeqIndex() {\r
-        return seqIndex;\r
+      if (!found)\r
+      {\r
+        seqIndex++;\r
+        resIndex = 0;\r
+      }\r
     }\r
 \r
-    /**\r
-     * @param seqIndex the seqIndex to set\r
-     */\r
-    public void setSeqIndex(int seqIndex) {\r
-        this.seqIndex = seqIndex;\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