package edu.stanford.peer.rbtm.engine;
import java.util.*;
import edu.stanford.peer.rbtm.credential.*;
import edu.stanford.peer.rbtm.util.*;
/**
* The class AbstractProofGraph represents a proof graph. It
* - makes sure that the same node is not added more than once
*
- makes sure that the same edge is not added more than once
* If one wants to implement priority queue, one should extend this
* class.
*/
public interface ProofGraph extends SolutionFilter
{
/** Add a node into the worklist for forward processing */
ProofNode addForwardNode(EntityExpression roleExp);
/** Add a node into the worklist for backward processing */
ProofNode addBackwardNode (EntityExpression roleExp);
/** Search graph for credentials based on their right hand side (RHS) */
Iterator findCredentialsBySubject(EntityExpression re);
/** Search graph for credentials w/subject intersection matching part */
Iterator findCredentialsByPartialSubject(EntityExpression part);
/** Search graph for credentials based on their left hand side (LHS) */
Iterator findCredentialsDefiningRole(Role r);
/** Find all the members of a role expression */
ResultEvidenceMap backwardSearch(EntityExpression roleExp);
/** Find all the roles to which a role expression belongs */
ResultEvidenceMap forwardSearch(EntityExpression roleExp);
/** Public accessor method for the predicate if any for this graph. */
Predicate getPredicate();
/** Utility function for composing a credential chain */
public HashSet getChain(EntityExpression source, EntityExpression target);
}