package org.infinispan.objectfilter.impl.syntax;
import org.infinispan.objectfilter.impl.ql.PropertyPath;
/**
* A property reference expression.
*
* @author anistor@redhat.com
* @since 7.0
*/
public class PropertyValueExpr implements ValueExpr {
protected final PropertyPath<?> propertyPath;
protected final boolean isRepeated;
protected final Class<?> primitiveType;
public PropertyValueExpr(PropertyPath<?> propertyPath, boolean isRepeated, Class<?> primitiveType) {
this.propertyPath = propertyPath;
this.isRepeated = isRepeated;
this.primitiveType = primitiveType;
}
public PropertyValueExpr(String propertyPath, boolean isRepeated, Class<?> primitiveType) {
this(PropertyPath.make(propertyPath), isRepeated, primitiveType);
}
public PropertyPath<?> getPropertyPath() {
return propertyPath;
}
public boolean isRepeated() {
return isRepeated;
}
public Class<?> getPrimitiveType() {
return primitiveType;
}
@Override
public <T> T acceptVisitor(Visitor<?, ?> visitor) {
return (T) visitor.visit(this);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PropertyValueExpr other = (PropertyValueExpr) o;
return propertyPath.equals(other.propertyPath);
}
@Override
public int hashCode() {
return propertyPath.hashCode();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("PROP(").append(propertyPath);
if (isRepeated) {
sb.append('*');
}
sb.append(')');
return sb.toString();
}
@Override
public String toQueryString() {
return propertyPath.toString();
}
}