package org.brixcms.plugin.jpa.web.admin.filter;
import java.io.Serializable;
import java.util.List;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.brixcms.plugin.jpa.Persistable;
/**
* Plugin that handles filtering for certain entity type.
*
* @author dan.simko@gmail.com
*/
public interface FilterPlugin<T extends Persistable<ID>, ID extends Serializable, F extends Serializable> {
/**
* Returns the plugin Id. Each FilterPlugin must have unique ID.
*
* @return plugin Id
*/
String getPluginId();
/**
* Returns new instance of filter DTO.
*
* @return new filter
*/
F newFilter();
/**
* Creates a new Panel which contains form components (e.g. TextField) for
* given Filter.
*
* @param id
* @param model
* @return new Filter Panel
*/
Panel newFilterPanel(String id, IModel<F> model);
/**
* Creates list of Predicates based on given Filter.
*
* @param builder
* @param root
* @param filter
* @return list of Predicates
*/
List<Predicate> createPredicate(CriteriaBuilder builder, Root<T> root, F filter);
}