001package org.unix4j.unix.find;
002
003import java.io.File;
004import java.io.FileFilter;
005
006/**
007 * File filter based on file length.
008 */
009class SizeFilter implements FileFilter {
010        public static enum SizeComparator {
011                AtLeast {
012                        @Override
013                        public boolean accept(File file, long sizeInBytes) {
014                                return file.length() >= sizeInBytes;
015                        }
016                }, 
017                AtMost {
018                        @Override
019                        public boolean accept(File file, long sizeInBytes) {
020                                return file.length() <= sizeInBytes;
021                        }
022                }; 
023                public abstract boolean accept(File file, long size);
024        }
025
026        private final long size;
027        private final SizeComparator comparator;;
028        
029        public SizeFilter(long size) {
030                this(size, size > 0 ? SizeComparator.AtLeast : SizeComparator.AtMost);
031        }
032        public SizeFilter(long size, SizeComparator comparator) {
033                this.size = Math.abs(size);
034                this.comparator = comparator;
035        }
036        @Override
037        public boolean accept(File file) {
038                return comparator.accept(file, size);
039        }
040
041}