X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSearchResultsI.java;h=d682de1056306ca3387a2457b71a51fa92e7d728;hb=4ad05f84d30ed345acbb533bb51dd832c727de99;hp=dc18bb88a0c9f6f7e68492ef03017921ec02d21c;hpb=ac7571ed0fd171c2a68c3db71f2635bd6cb8777e;p=jalview.git diff --git a/src/jalview/datamodel/SearchResultsI.java b/src/jalview/datamodel/SearchResultsI.java index dc18bb8..d682de1 100644 --- a/src/jalview/datamodel/SearchResultsI.java +++ b/src/jalview/datamodel/SearchResultsI.java @@ -1,82 +1,142 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors + * + * 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 . + * The Jalview Authors are detailed in the 'AUTHORS' file. + */ package jalview.datamodel; -import jalview.datamodel.SearchResults.Match; - +import java.util.BitSet; import java.util.List; +/** + * An interface describing the result of a search or other operation which + * highlights matched regions of an alignment + */ public interface SearchResultsI { /** - * 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 + * Adds one region to the results (unless already added, to avoid duplicates) * * @param seq - * Sequence * @param start - * int * @param end - * int + * @return */ - public abstract void addResult(SequenceI seq, int start, int end); + SearchResultMatchI addResult(SequenceI seq, int start, int end); /** - * Quickly check if the given sequence is referred to in the search results + * Adds one ore more [start, end] ranges to the results (unless already added + * to avoid duplicates). This method only increments the match count by 1. + * This is for the case where a match spans ignored hidden residues - it is + * formally two or more contiguous matches, but only counted as one match. * - * @param sequence - * (specific alignment sequence or a dataset sequence) - * @return true if the results involve sequence + * @param seq + * @param positions */ - public abstract boolean involvesSequence(SequenceI sequence); + void addResult(SequenceI seq, int[] positions); + /** - * 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 + * Adds the given start/end region to this search result. If sequence already + * has a search result and the range is adjacent to already highlighted + * positions, they will be merged * * @param sequence - * sequence to highlight columns according to matches * @param start - * - first column of visible region * @param end - * - last column of visible region - * @return int[] ranges within start/end index on sequence + * @return true if an existing range was updated with this one */ - public abstract int[] getResults(SequenceI sequence, int start, int end); - - public abstract int getSize(); + boolean appendResult(SequenceI sequence, int start, int end); - public abstract SequenceI getResultSequence(int index); + /** + * adds all match results in the argument to this set + * + * @param toAdd + */ + void addSearchResults(SearchResultsI toAdd); /** - * Returns the start position of the i'th match in the search results. + * Answers true if the search results include the given sequence (or its + * dataset sequence), else false * - * @param i + * @param sequence * @return */ - public abstract int getResultStart(int i); + boolean involvesSequence(SequenceI sequence); + + /** + * Returns an array of [from, to, from, to..] matched columns (base 0) between + * the given start and end columns of the given sequence. Returns null if no + * matches overlap the specified region. + *

+ * Implementations should provide an optimised method to return locations to + * highlight on a visible portion of an alignment. + * + * @param sequence + * @param start + * first column of range (base 0, inclusive) + * @param end + * last column of range base 0, inclusive) + * @return int[] + */ + int[] getResults(SequenceI sequence, int start, int end); /** - * Returns the end position of the i'th match in the search results. + * Returns the number of matches found. Note that if a match straddles ignored + * hidden residues, it is counted as one match, although formally recorded as + * two (or more) contiguous matched sequence regions * - * @param i * @return */ - public abstract int getResultEnd(int i); + int getCount(); /** * Returns true if no search result matches are held. * * @return */ - public abstract boolean isEmpty(); + boolean isEmpty(); /** * Returns the list of matches. * * @return */ - public abstract List getResults(); + List getResults(); + + /** + * Set bits in a bitfield for all columns in the given sequence collection + * that are highlighted + * + * @param sqcol + * the set of sequences to search for highlighted regions + * @param bs + * bitset to set + * @return number of bits set + */ + int markColumns(SequenceCollectionI sqcol, BitSet bs); + /** + * Return sub-sequences corresponding to distinct contiguous ranges in the + * matching set + * + * @return list of sequence objects + */ + List getMatchingSubSequences(); } \ No newline at end of file