package edu.stanford.peer.rbtm.engine; import edu.stanford.peer.rbtm.credential.*; import edu.stanford.peer.rbtm.util.*; import java.util.*; /** * A predicate on role expressions used by a verifier to determine if a target * may be skipped over and not created. */ public class Oppo implements Predicate { /** issuer-traces-all roles */ protected Vector issuerTraces; /** create a new oppo predicate w/o traceable role names */ public Oppo() { issuerTraces = new Vector(); } /** create a new oppo predicate with a set of traceable role names */ public Oppo(Vector roles) { issuerTraces = new Vector(roles); } /** add a role name to the subject-traces-all list */ public void addSubject(String name) { addSubject(new SimpleRoleName(name)); } /** add a role name to the subject-traces-all list */ public void addSubject(RoleName role) { issuerTraces.add(role); } /** add a set of role names to the subject-traces-all list */ public void addSubjects(Vector roles) { issuerTraces.addAll(roles); } /** remove a role name from the subject-traces-all list */ public void removeSubject(String name) { removeSubject(new SimpleRoleName(name)); } /** remove a role name from the subject-traces-all list */ public void removeSubject(RoleName role) { issuerTraces.remove(role); } /** apply the predicate to determine if this role is subject-traces-all */ public boolean test(EntityExpression obj) { if(obj instanceof Role) { Role role = (Role)obj; return (!issuerTraces.contains(role.getName())); } return true; } }