/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe.script;
import java.util.ArrayList;
import java.util.Iterator;
public class ExprGroup implements Expr {
private String linker = "AND";;
private ArrayList exprs = new ArrayList();
public String toScript() {
Iterator itr = exprs.iterator();
if (!itr.hasNext())
return "";
String linkerScript = null;
if (linker.equalsIgnoreCase("AND"))
linkerScript = "&&";
else if (linker.equalsIgnoreCase("OR"))
linkerScript = "||";
StringBuffer buf = new StringBuffer();
// the first Expr
Expr expr = (Expr) itr.next();
buf.append(" ( ");
buf.append(expr.toScript());
while (itr.hasNext()) {
expr = (Expr) itr.next();
if (expr instanceof ExprGroup
&& ((ExprGroup) expr).getExprs().size() == 0) {
continue;
}
// following Expr linked by linker
buf.append(" ").append(linkerScript).append(" ").append(
expr.toScript());
}
buf.append(" ) ");
return buf.toString();
}
public ArrayList getExprs() {
return exprs;
}
public void setExprs(ArrayList exprs) {
this.exprs = exprs;
}
public String getLinker() {
return linker;
}
public void setLinker(String linker) {
this.linker = linker;
}
/**
* Does var named variableName is used id InExpr nor NotInExpr
*/
public boolean isUsedByInExprOrNotInExpr(String variableName) {
boolean used = false;
Iterator itr = this.exprs.iterator();
while (itr.hasNext()) {
Expr expr = (Expr) itr.next();
if (expr instanceof InExpr) {
used = ((InExpr) expr).isUsed(variableName);
} else if (expr instanceof NotInExpr) {
used = ((NotInExpr) expr).isUsed(variableName);
} else if (expr instanceof ExprGroup) {
used = ((ExprGroup) expr)
.isUsedByInExprOrNotInExpr(variableName);
}
if (used) {
return used;
}
}
return used;
}
}