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
    *
  1. makes sure that the same node is not added more than once *
  2. 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); }