X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FSearchResults.java;h=7c3bba70cfb05baea401cc0fb178ea188b908f2d;hb=ed71ad3c91cd2609f3e91a8027b2c0877b018dea;hp=d1e3fcc9698ac00016a30a09358507e1289e199d;hpb=8a5259b87989c41a31e7e318801abdee3e211a58;p=jalview.git diff --git a/src/jalview/datamodel/SearchResults.java b/src/jalview/datamodel/SearchResults.java index d1e3fcc..7c3bba7 100755 --- a/src/jalview/datamodel/SearchResults.java +++ b/src/jalview/datamodel/SearchResults.java @@ -33,6 +33,7 @@ import java.util.List; */ public class SearchResults implements SearchResultsI { + private int count; private List matches = new ArrayList<>(); @@ -91,27 +92,18 @@ public class SearchResults implements SearchResultsI } } - /* (non-Javadoc) - * @see jalview.datamodel.SearchResultMatchI#getSequence() - */ @Override public SequenceI getSequence() { return sequence; } - /* (non-Javadoc) - * @see jalview.datamodel.SearchResultMatchI#getStart() - */ @Override public int getStart() { return start; } - /* (non-Javadoc) - * @see jalview.datamodel.SearchResultMatchI#getEnd() - */ @Override public int getEnd() { @@ -162,30 +154,56 @@ public class SearchResults implements SearchResultsI return (sequence == m.getSequence() && start == m.getStart() && end == m.getEnd()); } + + @Override + public boolean contains(SequenceI seq, int from, int to) + { + return (sequence == seq && start <= from && end >= to); + } } - /* (non-Javadoc) - * @see jalview.datamodel.SearchResultsI#addResult(jalview.datamodel.SequenceI, int, int) - */ @Override public SearchResultMatchI addResult(SequenceI seq, int start, int end) { Match m = new Match(seq, start, end); - matches.add(m); + if (!matches.contains(m)) + { + matches.add(m); + count++; + } return m; } - /* (non-Javadoc) - * @see jalview.datamodel.SearchResultsI#involvesSequence(jalview.datamodel.SequenceI) - */ + @Override + public void addResult(SequenceI seq, int[] positions) + { + /* + * we only increment the match count by 1 - or not at all, + * if the matches are all duplicates of existing + */ + int beforeCount = count; + for (int i = 0; i < positions.length - 1; i += 2) + { + addResult(seq, positions[i], positions[i + 1]); + } + if (count > beforeCount) + { + count = beforeCount + 1; + } + } + @Override public boolean involvesSequence(SequenceI sequence) { + final int start = sequence.getStart(); + final int end = sequence.getEnd(); + SequenceI ds = sequence.getDatasetSequence(); - for (SearchResultMatchI _m : matches) + for (SearchResultMatchI m : matches) { - SequenceI matched = _m.getSequence(); - if (matched != null && (matched == sequence || matched == ds)) + SequenceI matched = m.getSequence(); + if (matched != null && (matched == sequence || matched == ds) + && (m.getEnd() >= start) && (m.getStart() <= end)) { return true; } @@ -193,9 +211,6 @@ public class SearchResults implements SearchResultsI return false; } - /* (non-Javadoc) - * @see jalview.datamodel.SearchResultsI#getResults(jalview.datamodel.SequenceI, int, int) - */ @Override public int[] getResults(SequenceI sequence, int start, int end) { @@ -290,27 +305,18 @@ public class SearchResults implements SearchResultsI return count; } - /* (non-Javadoc) - * @see jalview.datamodel.SearchResultsI#getSize() - */ @Override - public int getSize() + public int getCount() { - return matches.size(); + return count; } - /* (non-Javadoc) - * @see jalview.datamodel.SearchResultsI#isEmpty() - */ @Override public boolean isEmpty() { return matches.isEmpty(); } - /* (non-Javadoc) - * @see jalview.datamodel.SearchResultsI#getResults() - */ @Override public List getResults() {