package de.persosim.simulator.seccondition;
import java.util.ArrayList;
import java.util.Collection;
import de.persosim.simulator.protocols.Oid;
import de.persosim.simulator.protocols.ta.Authorization;
import de.persosim.simulator.secstatus.EffectiveAuthorizationMechanism;
import de.persosim.simulator.secstatus.SecMechanism;
/**
* This class represents a {@link SecCondition} requiring a certain
* authorization status. Authorization information is identified by an OID
* mapped to a bit field of single authorizations. This condition requires a
* single bit within the bit field identified by a certain OID to be set.
*
* @author slutters
*
*/
public class AuthorizationSecCondition implements SecCondition {
protected Oid oid;
protected int bit;
public AuthorizationSecCondition(Oid oid, int bit) {
this.oid = oid;
this.bit = bit;
}
@Override
public boolean check(Collection<SecMechanism> mechanisms) {
for(SecMechanism secMechanism:mechanisms) {
if(secMechanism instanceof EffectiveAuthorizationMechanism) {
EffectiveAuthorizationMechanism authMechanism = (EffectiveAuthorizationMechanism) secMechanism;
Authorization auth = authMechanism.getAuthorization(oid);
if (auth == null) return false;
return auth.getAuthorization().getBit(bit);
}
}
return false;
}
@Override
public Collection<Class<? extends SecMechanism>> getNeededMechanisms() {
Collection<Class<? extends SecMechanism>> mechanisms = new ArrayList<>();
mechanisms.add(EffectiveAuthorizationMechanism.class);
return mechanisms;
}
@Override
public String toString() {
return getClass().getSimpleName() + "[" + oid + ", require bit " + bit + "]";
}
}