package org.aplikator.server.query;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import org.aplikator.server.descriptor.Property;
import org.aplikator.server.descriptor.QueryParameter;
public class TermQueryExpression<T extends Serializable> extends QueryExpression {
private final Property<T> property;
private final TermQueryOperator operator;
private T value;
private final QueryParameterReference parameterReference;
public TermQueryExpression(Property<T> property, TermQueryOperator operator, T value) {
super();
if (property.isVirtual()) {
throw new IllegalArgumentException("Virtual property " + property.getId() + " cannot be queried.");
}
this.property = property;
this.operator = operator;
this.value = value;
this.parameterReference = null;
}
public TermQueryExpression(Property<T> property, TermQueryOperator operator, QueryParameterReference parameterReference) {
super();
if (property.isVirtual()) {
throw new IllegalArgumentException("Virtual property " + property.getId() + " cannot be queried.");
}
this.property = property;
this.operator = operator;
this.value = null;
this.parameterReference = parameterReference;
}
public Property<T> getProperty() {
return property;
}
public TermQueryOperator getOperator() {
return operator;
}
public T getValue() {
return value;
}
@SuppressWarnings({"unchecked"})
@Override
public void bindParameters(List<QueryParameter> parameters) {
if (parameterReference != null && parameters != null) {
String stringValue = parameters.get(parameterReference.getParameterIndex()).getValue();
if (property.getType().equals(java.util.Date.class)) {
try {
long parseLong = Long.parseLong(stringValue);
value = (T) new Date(parseLong);
} catch (NumberFormatException e) {
value = null;
}
} else {
value = (T) stringValue;
}
}
}
}