*/
public class SearchResults implements SearchResultsI
{
+ private int count;
private List<SearchResultMatchI> matches = new ArrayList<>();
}
}
- /* (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()
{
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;
}
return false;
}
- /* (non-Javadoc)
- * @see jalview.datamodel.SearchResultsI#getResults(jalview.datamodel.SequenceI, int, int)
- */
@Override
public int[] getResults(SequenceI sequence, int start, int end)
{
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<SearchResultMatchI> getResults()
{