package org.jboss.seam.navigation;
import java.util.ArrayList;
import java.util.List;
import javax.faces.context.FacesContext;
import org.jboss.seam.core.Expressions.ValueExpression;
public final class Navigation
{
private ValueExpression<Object> outcome;
private List<Rule> rules = new ArrayList<Rule>();
private Rule rule;
public List<Rule> getRules()
{
return rules;
}
public void setOutcome(ValueExpression<Object> outcomeValueExpression)
{
this.outcome = outcomeValueExpression;
}
public ValueExpression<Object> getOutcome()
{
return outcome;
}
public Rule getRule()
{
return rule;
}
public void setRule(Rule rule)
{
this.rule = rule;
}
public boolean navigate(FacesContext context, final String actionOutcomeValue)
{
String outcomeValue;
if ( getOutcome()==null )
{
outcomeValue = actionOutcomeValue;
}
else
{
Object value = getOutcome().getValue();
outcomeValue = value==null ? null : value.toString();
}
for ( Rule rule: getRules() )
{
if ( rule.matches(outcomeValue) )
{
return rule.execute(context);
}
}
return getRule().execute(context);
}
}