class SynchronizationPathFilter implements TransferPathFilter {

    @Override
    public TransferStatus prepare(final Path file, final Local local, final TransferStatus parent, final ProgressListener progress)
        throws BackgroundException {
        switch(comparison.compare(file, local)) {
            case remote:
                return downloadFilter.prepare(file, local, parent, progress);
            case local:
                return uploadFilter.prepare(file, local, parent, progress);
        }
        // Equal comparison. Read attributes from server
        return uploadFilter.prepare(file, local, parent, progress).exists(true);
    }

    public  SynchronizationPathFilter(final ComparePathFilter comparison,
                                     final TransferPathFilter downloadFilter,
                                     final TransferPathFilter uploadFilter,
                                     final TransferAction action);

}