package prefuse.data.util;
import prefuse.data.Graph;
import prefuse.data.Node;
import prefuse.data.Tuple;
import prefuse.data.expression.AbstractPredicate;
/**
* Filtering predicate over a potential edge table that indicates which
* edges are valid edges according to a backing node table. Useful for
* creating a pool of edges for which not all node have been created, and
* then filtering out the valid edges using the node pool.
*
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class ValidEdgePredicate extends AbstractPredicate {
private Graph m_g;
/**
* Creates a new ValidEdgePredicate.
* @param g the backing graph, the node table of this graph will be used
* to check for valid edges.
*/
public ValidEdgePredicate(Graph g) {
m_g = g;
}
/**
* Indicates if the given tuple can be used as a valid edge for
* the nodes of the backing graph.
* @param tpl a data tuple from a potential edge table
* @return true if the tuple contents allow it to serve as a valid
* edge of between nodes in the backing graph
*/
public boolean getBoolean(Tuple tpl) {
Node s = m_g.getNodeFromKey(tpl.getInt(m_g.getEdgeSourceField()));
Node t = m_g.getNodeFromKey(tpl.getInt(m_g.getEdgeTargetField()));
return ( s != null && t != null );
}
} // end of class ValidEdgePredicate