package org.objectstyle.wolips.bindings.api;
import java.util.List;
import java.util.Map;
import org.objectstyle.wolips.bindings.Activator;
import org.w3c.dom.Element;
public class Count extends AbstractValidationContainer {
protected final static String COUNT = "count";
public final static String TEST = "test";
public Count(Element _element, ApiModel _apiModel) {
super(_element, _apiModel);
}
public String getTest() {
synchronized (this.apiModel) {
return element.getAttribute(TEST);
}
}
public void setTest(String test) {
synchronized (this.apiModel) {
element.setAttribute(TEST, test);
}
}
@Override
public boolean evaluate(Map<String, String> bindings) {
int count = 0;
List<IValidation> validationChildren = getValidationChildren();
for (IValidation validation : validationChildren) {
boolean evaluation = validation.evaluate(bindings);
if (evaluation) {
count++;
}
}
boolean evaluation;
String test = getTest();
if (test == null) {
evaluation = true;
}
else {
StringBuffer operatorBuffer = new StringBuffer();
StringBuffer valueBuffer = new StringBuffer();
int length = test.length();
for (int i = 0; i < length; i++) {
char ch = test.charAt(i);
if (ch == '<' || ch == '>' || ch == '=' || ch == '!') {
operatorBuffer.append(ch);
}
else if (ch == ' ' || ch == '\t') {
// ignore
}
else {
valueBuffer.append(ch);
}
}
if (valueBuffer.length() > 0) {
int value = Integer.parseInt(valueBuffer.toString());
String operator;
if (operatorBuffer.length() == 0) {
operator = "==";
}
else {
operator = operatorBuffer.toString();
}
if ("=".equals(operator) || "==".equals(operator)) {
evaluation = (value == count);
}
else if (">".equals(operator)) {
evaluation = (count > value);
}
else if ("<".equals(operator)) {
evaluation = (count < value);
}
else if (">=".equals(operator) || "=>".equals(operator)) {
evaluation = (count >= value);
}
else if ("<=".equals(operator) || "=<".equals(operator)) {
evaluation = (count <= value);
}
else if ("!=".equals(operator)) {
evaluation = (count != value);
}
else {
Activator.getDefault().log("Count.evaluate: Unknown count value " + value);
evaluation = true;
}
}
else {
evaluation = true;
}
}
return evaluation;
}
}