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; } } } }