1.1 enabled
authoramwaterhouse <Andrew Waterhouse>
Thu, 25 Jan 2007 16:00:21 +0000 (16:00 +0000)
committeramwaterhouse <Andrew Waterhouse>
Thu, 25 Jan 2007 16:00:21 +0000 (16:00 +0000)
src/jalview/analysis/Finder.java

index c385ac8..479c856 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
+import java.util.Vector;\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
+    }\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
+    }\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
+        {\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
+\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())) < 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
+\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
+     * @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
+     * @return the seqIndex\r
+     */\r
+    public int getSeqIndex() {\r
+        return seqIndex;\r
+    }\r
+\r
+    /**\r
+     * @param seqIndex the seqIndex to set\r
+     */\r
+    public void setSeqIndex(int seqIndex) {\r
+        this.seqIndex = seqIndex;\r
+    }\r
+}\r