package VASSAL.configure;
import VASSAL.build.BadDataReport;
import VASSAL.build.module.properties.PropertySource;
import VASSAL.counters.GamePiece;
import VASSAL.counters.PieceFilter;
import VASSAL.i18n.Resources;
import VASSAL.script.expression.Expression;
import VASSAL.script.expression.ExpressionException;
import VASSAL.script.expression.NullExpression;
import VASSAL.tools.ErrorDialog;
/*
* Class encapsulating a Property Match Expression
* A PropertyExpression is it's own PieceFilter.
*/
public class PropertyExpression implements PieceFilter {
protected Expression expression = new NullExpression();
public PropertyExpression() {
}
public PropertyExpression(String s) {
setExpression(s);
}
public void setExpression(String s) {
expression = Expression.createPropertyExpression(s);
}
public String getExpression() {
return expression.getExpression();
}
public boolean isNull() {
return expression == null || expression instanceof NullExpression;
}
public PieceFilter getFilter(PropertySource source) {
return expression.getFilter(source);
}
public PieceFilter getFilter() {
return expression.getFilter();
}
public boolean accept(GamePiece piece) {
return accept(piece, piece);
}
public boolean accept(GamePiece source, GamePiece piece) {
return getFilter(source).accept(piece);
}
public boolean equals(Object o) {
if (o instanceof PropertyExpression) {
return getExpression().equals(((PropertyExpression) o).getExpression());
}
return false;
}
/**
* Evaluate the Property Expression as true/false using
* a supplied property source
*
* @param ps Property Source *
* @return boolean result
*/
public boolean isTrue(PropertySource ps) {
String result = null;
try {
result = expression.evaluate(ps);
}
catch (ExpressionException e) {
ErrorDialog.dataError(new BadDataReport(Resources.getString("Error.expression_error"), "Expression="+getExpression()+", Error="+e.getError(), e));
}
return "true".equals(result);
}
}