package com.revolsys.record.query;
import com.revolsys.datatype.DataType;
import com.revolsys.record.Record;
import com.revolsys.util.Property;
public class Like extends BinaryCondition {
public static String toPattern(String value2) {
value2 = value2.replaceAll("\\\\", "\\\\");
value2 = value2.replaceAll("\\[", "\\[");
value2 = value2.replaceAll("\\]", "\\]");
value2 = value2.replaceAll("\\{", "\\{");
value2 = value2.replaceAll("\\}", "\\}");
value2 = value2.replaceAll("\\(", "\\)");
value2 = value2.replaceAll("\\)", "\\)");
value2 = value2.replaceAll("\\^", "\\^");
value2 = value2.replaceAll("\\$", "\\$");
value2 = value2.replaceAll("\\+", "\\+");
value2 = value2.replaceAll("\\-", "\\-");
value2 = value2.replaceAll("\\*", "\\*");
value2 = value2.replaceAll("\\?", "\\?");
value2 = value2.replaceAll("\\|", "\\|");
value2 = value2.replaceAll("\\,", "\\,");
value2 = value2.replaceAll("\\:", "\\:");
value2 = value2.replaceAll("\\!", "\\!");
value2 = value2.replaceAll("\\<", "\\<");
value2 = value2.replaceAll("\\>", "\\>");
value2 = value2.replaceAll("\\=", "\\=");
value2 = value2.replaceAll("%", ".*");
return value2;
}
public Like(final QueryValue left, final QueryValue right) {
super(left, "LIKE", right);
}
@Override
public Like clone() {
return (Like)super.clone();
}
@Override
public boolean test(final Record record) {
final QueryValue left = getLeft();
final String value1 = left.getStringValue(record);
final QueryValue right = getRight();
String value2 = right.getStringValue(record);
if (Property.hasValue(value1)) {
if (Property.hasValue(value2)) {
if (value2.contains("%")) {
value2 = toPattern(value2);
if (value1.matches(value2)) {
return true;
} else {
return false;
}
} else {
return DataType.equal(value1, value2);
}
} else {
return false;
}
} else {
return !Property.hasValue(value2);
}
}
}