package hu.sztaki.ilab.longneck.process.constraint; import hu.sztaki.ilab.longneck.Record; import hu.sztaki.ilab.longneck.process.AbstractSourceInfoContainer; import hu.sztaki.ilab.longneck.process.VariableSpace; import java.util.ArrayList; import java.util.List; /** * Strict or-switch control structure. * * This structure checks all OrCase constraints. If some constraints are true, then the * or-switch constraint gives back the result of the OrCase result. * * @author Gábor Lukács <lukacsg@sztaki.mta.hu> */ public class OrSwitchStrictConstraint extends AbstractSourceInfoContainer implements CompoundConstraint { /** List of cases. */ protected List<OrCase> orcases; public OrSwitchStrictConstraint() { orcases = new ArrayList<OrCase>(); } public List<OrCase> getOrcases() { return orcases; } public void setOrcases(List<OrCase> orcases) { this.orcases = orcases; } @Override public List<Constraint> getConstraints() { List<Constraint> list = new ArrayList<Constraint>(orcases.size()); list.addAll(orcases); return list; } @Override public void setConstraints(List<Constraint> constraints) { orcases = new ArrayList<OrCase>(constraints.size()); for (Constraint c : constraints) { orcases.add((OrCase) c); } } @Override public OrSwitchStrictConstraint clone() { OrSwitchStrictConstraint copy = (OrSwitchStrictConstraint) super.clone(); if (orcases != null) { copy.orcases = new ArrayList<OrCase>(orcases.size()); for (OrCase c : orcases) { copy.orcases.add(c.clone()); } } return copy; } @Override public CheckResult check(Record record, VariableSpace scope) { if (orcases == null) { return new CheckResult(this, false, null, null, "No cases defined."); } // Prepare result variable List<CheckResult> results = new ArrayList<CheckResult>(orcases.size()); for (OrCase c : orcases) { CheckResult res = c.check(record, scope); results.add(res); if (res.isPassed()) { return new CheckResult(this, true, null, null, null, results); } } return new CheckResult(this, false, null, null, "All cases failed.", results); } }