// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.database;
import java.util.Comparator;
import org.openstreetmap.osmosis.core.store.Storeable;
/**
* A comparator for sorting database feature objects by entity id, then entity version, then feature sequence.
*
* @param <T>
* The encapsulated feature type.
*/
public class DbOrderedFeatureHistoryComparator<T extends Storeable> implements
Comparator<DbFeatureHistory<DbOrderedFeature<T>>> {
private DbFeatureComparator<T> featureComparator = new DbFeatureComparator<T>();
/**
* {@inheritDoc}
*/
@Override
public int compare(DbFeatureHistory<DbOrderedFeature<T>> o1,
DbFeatureHistory<DbOrderedFeature<T>> o2) {
int parentComparison;
int versionDelta;
parentComparison = featureComparator.compare(o1.getFeature(), o2.getFeature());
if (parentComparison != 0) {
return parentComparison;
}
versionDelta = o1.getVersion() - o2.getVersion();
if (versionDelta != 0) {
return versionDelta;
}
return o1.getFeature().getSequenceId() - o2.getFeature().getSequenceId();
}
}