package com.gmail.dpierron.calibre.datamodel.filter; import com.gmail.dpierron.calibre.datamodel.Book; public abstract class BooleanFilter implements BookFilter { private BookFilter leftFilter = new PassthroughFilter(); private BookFilter rightFilter = new PassthroughFilter(); private final boolean isOrFilter; // if true, the filter is an OR filter, else it's an AND filter BooleanFilter(boolean orFilter) { isOrFilter = orFilter; } BooleanFilter(BookFilter leftFilter, BookFilter rightFilter, boolean orFilter) { this.leftFilter = leftFilter; this.rightFilter = rightFilter; isOrFilter = orFilter; } BookFilter getLeftFilter() { return leftFilter; } public void setLeftFilter(BookFilter leftFilter) { this.leftFilter = leftFilter; } BookFilter getRightFilter() { return rightFilter; } public void setRightFilter(BookFilter rightFilter) { this.rightFilter = rightFilter; } public boolean didBookPassThroughFilter(Book book) { if (isOrFilter) return getLeftFilter().didBookPassThroughFilter(book) || getRightFilter().didBookPassThroughFilter(book); else return getLeftFilter().didBookPassThroughFilter(book) && getRightFilter().didBookPassThroughFilter(book); } }