+ final SequenceI sequence;
+
+ /**
+ * Start position of match in sequence (base 1)
+ */
+ final int start;
+
+ /**
+ * End position (inclusive) (base 1)
+ */
+ final int end;
+
+ /**
+ * create a Match on a range of sequence. Match always holds region in
+ * forwards order, even if given in reverse order (such as from a mapping to
+ * a reverse strand); this avoids trouble for routines that highlight search
+ * results etc
+ *
+ * @param seq
+ * a sequence
+ * @param start
+ * start position of matched range (base 1)
+ * @param end
+ * end of matched range (inclusive, base 1)
+ */
+ public Match(SequenceI seq, int start, int end)
+ {
+ sequence = seq;
+
+ /*
+ * always hold in forwards order, even if given in reverse order
+ * (such as from a mapping to a reverse strand); this avoids
+ * trouble for routines that highlight search results etc
+ */
+ if (start <= end)
+ {
+ this.start = start;
+ this.end = end;
+ }
+ else
+ {
+ // TODO: JBP could mark match as being specified in reverse direction
+ // for use
+ // by caller ? e.g. visualizing reverse strand highlight
+ this.start = end;
+ this.end = start;
+ }
+ }
+
+ @Override
+ public SequenceI getSequence()
+ {
+ return sequence;
+ }
+
+ @Override
+ public int getStart()
+ {
+ return start;
+ }
+
+ @Override
+ public int getEnd()
+ {
+ return end;
+ }
+
+ /**
+ * Returns a representation as "seqid/start-end"
+ */
+ @Override
+ public String toString()
+ {
+ StringBuilder sb = new StringBuilder();
+ if (sequence != null)
+ {
+ sb.append(sequence.getName()).append("/");
+ }
+ sb.append(start).append("-").append(end);
+ return sb.toString();
+ }
+
+ /**
+ * Hashcode is the hashcode of the matched sequence plus a hash of start and
+ * end positions. Match objects that pass the test for equals are guaranteed
+ * to have the same hashcode.
+ */
+ @Override
+ public int hashCode()
+ {
+ int hash = sequence == null ? 0 : sequence.hashCode();
+ hash += 31 * start;
+ hash += 67 * end;
+ return hash;
+ }
+
+ /**
+ * Two Match objects are equal if they are for the same sequence, start and
+ * end positions
+ */
+ @Override
+ public boolean equals(Object obj)