package org.juxtasoftware.resource.heatmap; import eu.interedition.text.Range; /** * Helper class to track detailed change information * for a single range in the base document. * * @author loufoster * */ public final class Change implements Comparable<Change> { private final long id; private int diffFrequency; private Range range; private Range origRange; private boolean rangeAdjusted = false; public Change(long id, Range range, int diffFrequency) { this.id = id; this.diffFrequency = diffFrequency; this.range = new Range(range); this.origRange = new Range(range); } public void adjustRange( long newStart, long newEnd ) { this.rangeAdjusted = true; this.range = new Range(newStart, newEnd); } public boolean wasRangeAdjusted( ) { return this.rangeAdjusted; } public Range getOrignialRange() { return new Range( this.origRange); } public final Range getRange() { return this.range; } public final long getId() { return this.id; } public final int getDifferenceFrequency() { return this.diffFrequency; } public void increaseDiffFrequency() { this.diffFrequency++; } @Override public int compareTo(Change that) { // NOTE: There is a bug in interedition Range. It will // order range [0,1] before [0,0] when sorting ascending. // So.. do NOT use its compareTo. Roll own. Range r1 = this.range; Range r2 = that.range; if ( r1.getStart() < r2.getStart() ) { return -1; } else if ( r1.getStart() > r2.getStart() ) { return 1; } else { if ( r1.getEnd() < r2.getEnd() ) { return -1; } else if ( r1.getEnd() > r2.getEnd() ) { return 1; } } return 0; } @Override public String toString() { return "ID: " + this.id+" - Range: "+this.range + " Frequency: "+getDifferenceFrequency(); } }