X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FFinder.java;h=faf79d154f71c99427d701bb2585c9558f0d0e60;hb=25aaaa87042b3f507ad4348120df7dd073182759;hp=3d1a70c508103630f83ababa94866e7aad1a5beb;hpb=370e045dad64be5b5425e75f979a6855bce4d2cd;p=jalview.git diff --git a/src/jalview/analysis/Finder.java b/src/jalview/analysis/Finder.java index 3d1a70c..faf79d1 100644 --- a/src/jalview/analysis/Finder.java +++ b/src/jalview/analysis/Finder.java @@ -1,26 +1,31 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Development Version 2.4.1) - * Copyright (C) 2009 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1) + * Copyright (C) 2014 The Jalview Authors * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. + * This file is part of Jalview. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 + * of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.analysis; -import java.util.*; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.SearchResults; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceGroup; -import jalview.datamodel.*; +import java.util.Vector; public class Finder { @@ -37,6 +42,8 @@ public class Finder boolean caseSensitive = false; + private boolean includeDescription = false; + boolean findAll = false; com.stevesoft.pat.Regex regex = null; @@ -53,7 +60,9 @@ public class Finder } /** - * restart search at given sequence and residue on alignment and (optionally) contained in selection + * restart search at given sequence and residue on alignment and (optionally) + * contained in selection + * * @param alignment * @param selectionGroup * @param seqIndex @@ -81,31 +90,10 @@ public class Finder 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(); // ///////////////////////////////////////////// - int end = alignment.getHeight(); - if (selection != null) { if ((selection.getSize() < 1) @@ -119,7 +107,7 @@ public class Finder { seq = (Sequence) alignment.getSequenceAt(seqIndex); - if ((selection != null && selection.getSize()>0) + if ((selection != null && selection.getSize() > 0) && !selection.getSequences(null).contains(seq)) { seqIndex++; @@ -127,8 +115,31 @@ public class Finder continue; } - if (resIndex<0) { - resIndex=0; + if (resIndex < 0) + { + resIndex = 0; + // test for one off matches - sequence position and sequence ID + // //// is the searchString a residue number? + try + { + int res = Integer.parseInt(searchString); + // possibly a residue number - check if valid for seq + if (seq.getEnd() >= res) + { + searchResults.addResult(seq, res, res); + hasResults = true; + // resIndex=seq.getLength(); + // seqIndex++; + if (!findAll) + { + found = true; + break; + } + } + } catch (NumberFormatException ex) + { + } + if (regex.search(seq.getName())) { idMatch.addElement(seq); @@ -136,7 +147,20 @@ public class Finder if (!findAll) { // stop and return the match - found=true; + found = true; + break; + } + } + + if (isIncludeDescription() && seq.getDescription() != null + && regex.search(seq.getDescription())) + { + idMatch.addElement(seq); + hasResults = true; + if (!findAll) + { + // stop and return the match + found = true; break; } } @@ -176,13 +200,13 @@ public class Finder { resIndex = regex.matchedFrom(); - if ((selection != null && selection.getSize()>0) + if ((selection != null && selection.getSize() > 0) && ((resIndex + Integer.parseInt(spaces.elementAt( resIndex).toString())) < selection.getStartRes())) { continue; } - +// if invalid string used, then regex has no matched to/from int sres = seq .findPosition(resIndex + Integer.parseInt(spaces.elementAt(resIndex) @@ -219,15 +243,11 @@ public class Finder } /** - * We now search the Id string in the main search loop. - * for (int id = 0; id < alignment.getHeight(); id++) - { - if (regex.search(alignment.getSequenceAt(id).getName())) - { - idMatch.addElement(alignment.getSequenceAt(id)); - hasResults = true; - } - } */ + * We now search the Id string in the main search loop. for (int id = 0; id + * < alignment.getHeight(); id++) { if + * (regex.search(alignment.getSequenceAt(id).getName())) { + * idMatch.addElement(alignment.getSequenceAt(id)); hasResults = true; } } + */ return hasResults; } @@ -241,7 +261,7 @@ public class Finder /** * @param alignment - * the alignment to set + * the alignment to set */ public void setAlignment(AlignmentI alignment) { @@ -258,7 +278,7 @@ public class Finder /** * @param caseSensitive - * the caseSensitive to set + * the caseSensitive to set */ public void setCaseSensitive(boolean caseSensitive) { @@ -275,7 +295,7 @@ public class Finder /** * @param findAll - * the findAll to set + * the findAll to set */ public void setFindAll(boolean findAll) { @@ -292,7 +312,7 @@ public class Finder /** * @param selection - * the selection to set + * the selection to set */ public void setSelection(jalview.datamodel.SequenceGroup selection) { @@ -333,7 +353,7 @@ public class Finder /** * @param resIndex - * the resIndex to set + * the resIndex to set */ public void setResIndex(int resIndex) { @@ -350,10 +370,20 @@ public class Finder /** * @param seqIndex - * the seqIndex to set + * the seqIndex to set */ public void setSeqIndex(int seqIndex) { this.seqIndex = seqIndex; } + + public boolean isIncludeDescription() + { + return includeDescription; + } + + public void setIncludeDescription(boolean includeDescription) + { + this.includeDescription = includeDescription; + } }