package er.neo4jadaptor.query; import org.neo4j.graphdb.GraphDatabaseService; import org.neo4j.graphdb.PropertyContainer; import com.webobjects.eoaccess.EOEntity; import com.webobjects.eocontrol.EOQualifier; /** * Performs Neo4J node/relationship filtering to exclude ones that do not match search criteria. * The contract is that if a {@link PropertyContainer} is excluded from the {@link er.neo4jadaptor.query.Results} * then for sure it didn't match search criterias, but if a node/relationship is returned in {@link er.neo4jadaptor.query.Results} * then it may or may not match the criteria. * * @author Jedrzej Sobanski * * @param <T> */ public abstract class Filter<T extends PropertyContainer> { protected Filter<T> successor; /** * Perform search. * * @param db database to search in * @param entity entity to search records from * @param qualifier search criteria * @return records that may match search criteria */ public abstract Results<T> doFilter(GraphDatabaseService db, EOEntity entity, EOQualifier qualifier); /** * Set chain of responsibility pattern delegate. * * @param successor */ public void setSuccessor(Filter<T> successor) { this.successor = successor; } }