From 9a41fb8b4495359ca25aa0bbdd1e3bc500b2cdf2 Mon Sep 17 00:00:00 2001 From: jprocter Date: Tue, 29 Jan 2008 09:16:28 +0000 Subject: [PATCH] reinstated proper case insensitive searching for both upper and lower case --- src/jalview/analysis/Finder.java | 615 +++++++++++++++++++------------------- 1 file changed, 307 insertions(+), 308 deletions(-) diff --git a/src/jalview/analysis/Finder.java b/src/jalview/analysis/Finder.java index 2fa09aa..5280467 100644 --- a/src/jalview/analysis/Finder.java +++ b/src/jalview/analysis/Finder.java @@ -1,308 +1,307 @@ -package jalview.analysis; - -import java.util.*; - -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.addElement(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.elementAt(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.addElement(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; + +import java.util.*; + +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(); + 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.addElement(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.elementAt(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.addElement(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; + } +} -- 1.7.10.2