/**
* Sync 2.1
* Copyright 2007 Zach Scrivena
* 2007-12-09
* zachscrivena@gmail.com
* http://syncdir.sourceforge.net/
*
* Sync performs one-way directory or file synchronization.
*
* TERMS AND CONDITIONS:
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package sync;
import java.util.Comparator;
/**
* Compare two FileUnit objects according to the specified attributes.
*/
class FileUnitComparator
implements Comparator<FileUnit>
{
/** use file/directory name for comparison */
private final boolean name;
/** use file/directory size for comparison */
private final boolean size;
/** use file/directory last-modified time for comparison */
private final boolean time;
/** use file/directory CRC-32 checksum for comparison */
private final boolean crc;
/**
* Constructor.
*
* @param name
* Use file/directory name for comparison
* @param size
* Use file/directory size for comparison
* @param time
* Use file/directory last-modified time for comparison
* @param crc
* Use file/directory CRC-32 checksum for comparison
*/
FileUnitComparator(
final boolean name,
final boolean size,
final boolean time,
final boolean crc)
{
this.name = name;
this.size = size;
this.time = time;
this.crc = crc;
}
/**
* Compare the specified FileUnit objects.
*/
@Override
public int compare(
final FileUnit u1,
final FileUnit u2)
{
if (name)
{
/* compare file/directory names */
final int i = u1.name.compareTo(u2.name);
if (i != 0) return i;
}
if (size)
{
/* compare file/directory sizes */
if (u1.size < u2.size) return -1;
if (u1.size > u2.size) return 1;
}
if (time)
{
/* compare file/directory last-modified times */
if (u1.time < u2.time) return -1;
if (u1.time > u2.time) return 1;
}
if (crc)
{
/* compare file/directory CRC-32 checksums */
if (u1.getCrc() < u2.getCrc()) return -1;
if (u1.getCrc() > u2.getCrc()) return 1;
}
/* FileUnit objects are equal */
return 0;
}
}