package org.sculptor.framework.accessimpl.jpa;
/**
*
*
* @author Oliver Ringel
*
*/
//TODO: very simple approach to support more complex criteria based queries
public class QueryPropertyRestriction {
private String property = null;
private Class<?> propertyType = null;
private Operator operator = null;
private Object value = null;
public QueryPropertyRestriction(String property, Object value) {
this.property = getPropertyName(property);
this.operator = getOperator(property);
this.value = value;
}
public QueryPropertyRestriction(String property, Operator operator, Object value) {
this.property = property;
this.operator = operator;
this.value = value;
}
public String getProperty() {
return property;
}
public void setProperty(String property) {
this.property = property;
}
public Class<?> getPropertyType() {
return propertyType;
}
public void setPropertyType(Class<?> propertyType) {
this.propertyType = propertyType;
}
public Operator getOperator() {
return operator;
}
public void setOperator(Operator operator) {
this.operator = operator;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
/**
*
* @param expression
* @return
*/
private String getPropertyName(String property) {
String propertyName = property.trim();
propertyName = propertyName.replace("GreaterThan", "");
propertyName = propertyName.replace("GreaterThanOrEqual", "");
propertyName = propertyName.replace("LessThan", "");
propertyName = propertyName.replace("LessThanOrEqual", "");
propertyName = propertyName.replace("NotEqual", "");
propertyName = propertyName.replace("IsNull", "");
propertyName = propertyName.replace("IsNotNull", "");
propertyName = propertyName.replace("IsIn", "");
propertyName = propertyName.replace("IsEmpty", "");
propertyName = propertyName.replace("IsNotEmpty", "");
propertyName = propertyName.replace("IgnoreCaseLike", "");
propertyName = propertyName.replace("IgnoreCaseEqual", "");
return propertyName;
}
/**
*
* @param expression
* @return
*/
private Operator getOperator(String expression) {
String expr = expression.trim();
if (expr.endsWith(" >") || expr.endsWith(" gt") || expr.endsWith("GreaterThan")) {
return Operator.GreaterThan;
}
else if (expr.endsWith(" >=") || expr.endsWith(" ge") || expr.endsWith("GreaterThanOrEqual")) {
return Operator.GreaterThanOrEqual;
}
else if (expr.endsWith(" <") || expr.endsWith(" lt") || expr.endsWith("LessThan")) {
return Operator.LessThan;
}
else if (expr.endsWith(" <=") || expr.endsWith(" le") || expr.endsWith("LessThanOrEqual")) {
return Operator.LessThanOrEqual;
}
else if (expr.endsWith(" like") || expr.endsWith("Like")) {
return Operator.Like;
}
else if (expr.endsWith(" notLike") || expr.endsWith(" not like") || expr.endsWith("NotLike")) {
return Operator.NotLike;
}
else if (expr.endsWith(" ignoreCaseLike") || expr.endsWith("IgnoreCaseLike")) {
return Operator.IgnoreCaseLike;
}
else if (expr.endsWith(" ignoreCaseEqual") || expr.endsWith("IgnoreCaseEqual")) {
return Operator.IgnoreCaseEqual;
}
else if (expr.endsWith(" isNull") || expr.endsWith(" is null") || expr.endsWith("IsNull")) {
return Operator.IsNull;
}
else if (expr.endsWith(" isNotNull") || expr.endsWith(" is not null") || expr.endsWith("IsNotNull")) {
return Operator.IsNull;
}
else if (expr.endsWith(" isEmpty") || expr.endsWith(" is empty") || expr.endsWith("IsEmpty")) {
return Operator.IsEmpty;
}
else if (expr.endsWith(" isNotEmpty") || expr.endsWith(" is not empty") || expr.endsWith("IsNotEmpty")) {
return Operator.IsNotEmpty;
}
else if (expr.endsWith(" in") || expr.endsWith("IsIn")) {
return Operator.In;
}
else if (expr.endsWith(" notIn") || expr.endsWith("IsNotIn")) {
return Operator.NotIn;
}
else if (expr.endsWith(" !=") || expr.endsWith(" <>") || expr.endsWith("NotEqual")) {
return Operator.NotEqual;
}
else if (expr.endsWith(" =") || expr.endsWith(" ==")) {
return Operator.Equal;
}
return Operator.Equal;
}
public enum Operator {
Equal, IgnoreCaseEqual, NotEqual,
LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual,
Like, IgnoreCaseLike, NotLike,
IsNull, IsNotNull,
IsEmpty, IsNotEmpty,
In, NotIn
}
}