X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSearchResults.java;h=3efb713cc67a499e4909e61bec818e6f7f89a22e;hb=797df64fa2a0a30773d0f48f5494d4155e5a8be3;hp=b9176b49fc0ea6f37aa0face9cd22991b7fea26d;hpb=f01d9453eff16cb42d6dd5780b528d3ae10247ef;p=jalview.git diff --git a/src/jalview/datamodel/SearchResults.java b/src/jalview/datamodel/SearchResults.java index b9176b4..3efb713 100755 --- a/src/jalview/datamodel/SearchResults.java +++ b/src/jalview/datamodel/SearchResults.java @@ -1,20 +1,19 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle - * - * 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 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. - * - * 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 + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle + * + * This file is part of Jalview. + * + * 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 Jalview. If not, see . */ package jalview.datamodel; @@ -24,20 +23,23 @@ public class SearchResults Match[] matches; /** - * This method replaces the old search results which merely - * held an alignment index of search matches. This broke - * when sequences were moved around the alignment - * @param seq Sequence - * @param start int - * @param end int + * This method replaces the old search results which merely held an alignment + * index of search matches. This broke when sequences were moved around the + * alignment + * + * @param seq + * Sequence + * @param start + * int + * @param end + * int */ public void addResult(SequenceI seq, int start, int end) { if (matches == null) { matches = new Match[] - { - new Match(seq, start, end)}; + { new Match(seq, start, end) }; return; } @@ -56,9 +58,34 @@ public class SearchResults } /** - * This Method returns the search matches which lie between the - * start and end points of the sequence in question. It is - * optimised for returning objects for drawing on SequenceCanvas + * Quickly check if the given sequence is referred to in the search results + * + * @param sequence + * (specific alignment sequence or a dataset sequence) + * @return true if the results involve sequence + */ + public boolean involvesSequence(SequenceI sequence) + { + if (matches == null || matches.length == 0) + { + return false; + } + SequenceI ds = sequence.getDatasetSequence(); + for (int m = 0; m < matches.length; m++) + { + if (matches[m].sequence != null + && (matches[m].sequence == sequence || matches[m].sequence == ds)) + { + return true; + } + } + return false; + } + + /** + * This Method returns the search matches which lie between the start and end + * points of the sequence in question. It is optimised for returning objects + * for drawing on SequenceCanvas */ public int[] getResults(SequenceI sequence, int start, int end) { @@ -69,25 +96,27 @@ public class SearchResults int[] result = null; int[] tmp = null; - int resultLength, matchStart=0, matchEnd=0; + int resultLength, matchStart = 0, matchEnd = 0; boolean mfound; for (int m = 0; m < matches.length; m++) { - mfound=false; + mfound = false; if (matches[m].sequence == sequence) - { + { mfound = true; // locate aligned position matchStart = sequence.findIndex(matches[m].start) - 1; matchEnd = sequence.findIndex(matches[m].end) - 1; - } - else if (matches[m].sequence == sequence.getDatasetSequence()) { + } + else if (matches[m].sequence == sequence.getDatasetSequence()) + { mfound = true; // locate region in local context matchStart = sequence.findIndex(matches[m].start) - 1; matchEnd = sequence.findIndex(matches[m].end) - 1; } - if (mfound) { + if (mfound) + { if (matchStart <= end && matchEnd >= start) { if (matchStart < start) @@ -103,8 +132,7 @@ public class SearchResults if (result == null) { result = new int[] - { - matchStart, matchEnd}; + { matchStart, matchEnd }; } else { @@ -115,6 +143,9 @@ public class SearchResults result[resultLength] = matchStart; result[resultLength + 1] = matchEnd; } + } else { + // debug + // System.err.println("Outwith bounds!" + matchStart+">"+end +" or " + matchEnd+"<"+start); } } } @@ -144,7 +175,9 @@ public class SearchResults class Match { SequenceI sequence; + int start; + int end; public Match(SequenceI seq, int start, int end)