package com.intrbiz.bergamot.virtual.operator; import java.util.List; import java.util.Set; import com.intrbiz.bergamot.model.Status; import com.intrbiz.bergamot.virtual.VirtualCheckExpressionContext; import com.intrbiz.bergamot.virtual.reference.CheckReference; public class OneOfFunction extends VirtualCheckOperator { private static final long serialVersionUID = 1L; private final List<ValueOperator> checks; private final Status as; public OneOfFunction(List<ValueOperator> checks, Status as) { super(); this.checks = checks; this.as = as == null ? Status.CRITICAL : as; } public List<ValueOperator> getChecks() { return checks; } @Override public boolean computeOk(VirtualCheckExpressionContext context) { int okCount = 0; for (ValueOperator check : this.checks) { if (check.computeOk(context)) okCount++; } return okCount == 1; } public Status computeStatus(VirtualCheckExpressionContext context) { // we are making an implicit decision with this operator, so: return this.computeOk(context) ? Status.OK : this.as; } @Override public void computeDependencies(Set<CheckReference> checks) { for (ValueOperator check : this.checks) { check.computeDependencies(checks); } } public String toString() { return "one of " + this.checks.toString() + " as " + this.as.toString(); } }