/*
* This file is part of Transdroid <http://www.transdroid.org>
*
* Transdroid is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Transdroid is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Transdroid. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.transdroid.daemon;
import java.util.Comparator;
/**
* Implements a comparator for TorrentFile objects, which can be used to sort
* a list listing in the ways specified by the TorrentFilesSortBy enum
*
* @author erickok
*
*/
public class TorrentFilesComparator implements Comparator<TorrentFile> {
private TorrentFilesSortBy sortBy;
private boolean reversed;
private Comparator<String> alphanumComparator = new AlphanumComparator();
/**
* Instantiate a torrent files comparator.
* @param sortBy The requested sorting property (Alphanumeric is used for unsupported properties that are requested)
* @param reversed If the sorting should be in reverse order
*/
public TorrentFilesComparator(TorrentFilesSortBy sortBy, boolean reversed) {
this.sortBy = sortBy;
this.reversed = reversed;
}
@Override
public int compare(TorrentFile file1, TorrentFile file2) {
if (!reversed) {
switch (sortBy) {
case PartDone:
return Float.compare(file1.getPartDone(), file2.getPartDone());
case TotalSize:
return Long.valueOf(file1.getTotalSize()).compareTo(file2.getTotalSize());
default:
return alphanumComparator.compare(file1.getName().toLowerCase(), file2.getName().toLowerCase());
}
} else {
switch (sortBy) {
case PartDone:
return 0 - Float.compare(file1.getPartDone(), file2.getPartDone());
case TotalSize:
return 0 - Long.valueOf(file1.getTotalSize()).compareTo(file2.getTotalSize());
default:
return 0 - alphanumComparator.compare(file1.getName().toLowerCase(), file2.getName().toLowerCase());
}
}
}
}