* @param prereq
* @return true if ???
*/
public boolean checkPrerequisites(String prereq) {
try {
Interpreter i = new Interpreter(); // Construct an interpreter
StringTokenizer st1 = new StringTokenizer(prereq, "&|()~");
StringTokenizer itemAndValue;
String aToken = "";
while (st1.hasMoreTokens()) {
aToken = st1.nextToken();
// if theres no value in quotes to check against..
if (aToken.indexOf("=") == -1 && aToken.indexOf("<>") == -1) {
// get boolean status
if (!doesItemExist(aToken)) {
// System.out.println("item does not exist"+ aToken);
return true;// identifer does not exist, so junk.
}
// item exists in prerequisites table. Has it been completed
// or passed -grab the answer and declare the var for the interpreter
i.set(aToken.replaceAll("-", "_"), checkStatus(aToken));
} else {
itemAndValue = new StringTokenizer(aToken, "=<>");
String anToken = itemAndValue.nextToken();
if (!doesItemExist(anToken)) { return true; // identifer does not
// exist, so junk..
}
// item exists in prerequisites table. Has it been
// completed or passed -grab the answer and declare
// the var for the interpreter...
i.set(anToken.replaceAll("-", "_"), getStatus(anToken));
}
}
// System.out.println("0. "+prereq);
prereq = prereq.replaceAll("-", "_");
prereq = prereq.replaceAll("&", "&&");
prereq = prereq.replaceAll("\\|", "||");
prereq = prereq.replaceAll("~", "!");
prereq = prereq.replaceAll("<>\\\"", "@");
prereq = prereq.replaceAll("=\\\"", "^");
prereq = prereq.replaceAll("\\\"", "\")");
prereq = prereq.replaceAll("\\^", "=\\\"");
prereq = prereq.replaceAll("=", ".equals(");
// System.out.println("1. "+prereq);
if (prereq.indexOf("@") != -1) {
Vector v = new Vector();
StringBuilder sb = new StringBuilder();
sb.append(prereq);
boolean notSymbFound = false;
// go backwards char at a time. if you find &}"|& then insert a
// !)
for (int j = sb.length() - 1; j > -1; j--) {
if (sb.charAt(j) == '@') {
notSymbFound = true;
}
if (notSymbFound) {
if (sb.charAt(j) == '|' || sb.charAt(j) == '&' || sb.charAt(j) == '"' || sb.charAt(j) == '}' || sb.charAt(j) == ')') {
notSymbFound = false;
v.add(j + 1 + "");
}
}
}
Iterator it = v.iterator();
while (it.hasNext()) {
sb.insert(Integer.parseInt(it.next().toString()), '!');
}
if (notSymbFound) {
// the ! must be at the beginning
prereq = "!" + sb.toString();
} else {
prereq = sb.toString();
}
}
prereq = prereq.replaceAll("@", ".equals(\"");
Object result = i.eval(prereq);
String a = result.toString();
boolean retVal = Boolean.valueOf(a).booleanValue();
if (Tracing.isDebugEnabled(PrerequisiteManager.class)){
Tracing.logDebug("eval: " + prereq + " result was: " + retVal,PrerequisiteManager.class);
}