@Override public void exitAttributeCompareExpression(AttributeCompareExpressionContext ctx) { String attributeName = ctx.attributeName.getText(); CompareOperator compareOperator = CompareOperator.valueOf(ctx.op.getText().toUpperCase()); Object value = parseJsonType(ctx.compareValue.getText()); AttributeReference attributeReference = new AttributeReference(attributeName); AttributeComparisonExpression expression = new AttributeComparisonExpression(attributeReference, compareOperator, value); expressionStack.push(expression); }
@Override public String toFilter() { String filter = this.attributePath.getFullyQualifiedAttributeName() + " " + this.operation + " " + this.createCompareValueString(); return filter; }
private String createCompareValueString() { String compareValueString; if (this.compareValue == null) { compareValueString = "null"; } else if (this.compareValue instanceof String) { // TODO change this to escapeJson() when dependencies get upgraded String escaped = StringEscapeUtils.escapeEcmaScript((String) this.compareValue) // StringEscapeUtils follows the outdated JSON spec requiring "/" to be escaped, this could subtly break things .replaceAll("\\\\/", "/") // We don't want single-quotes escaped, this will be unnecessary with escapeJson() .replaceAll("\\\\'", "'"); compareValueString = QUOTE + escaped + QUOTE; } else if (this.compareValue instanceof Date) { compareValueString = QUOTE + toDateTimeString((Date) this.compareValue) + QUOTE; } else if (this.compareValue instanceof LocalDate) { compareValueString = QUOTE + toDateString((LocalDate) this.compareValue) + QUOTE; } else if (this.compareValue instanceof LocalDateTime) { compareValueString = QUOTE + toDateTimeString((LocalDateTime) this.compareValue) + QUOTE; } else { compareValueString = this.compareValue.toString(); } return compareValueString; } }
@Override public void exitFilterAttributeCompareExpression(FilterAttributeCompareExpressionContext ctx) { AttributeComparisonExpression attributeComparisonExpression; String attributePathText = ctx.attributePath.getText(); AttributeReference attributePath = new AttributeReference(attributePathText); CompareOperator compareOperator = CompareOperator.valueOf(ctx.op.getText().toUpperCase()); String compareValueText = ctx.compareValue.getText(); Object compareValue = parseJsonType(compareValueText); attributeComparisonExpression = new AttributeComparisonExpression(attributePath, compareOperator, compareValue); this.expressionStack.push(attributeComparisonExpression); }
@Override public String toUnqualifiedFilter() { String subAttributeName = this.attributePath.getSubAttributeName(); String unqualifiedAttributeName = subAttributeName != null ? subAttributeName : this.attributePath.getAttributeName(); return unqualifiedAttributeName + " " + operation + " " + this.createCompareValueString(); }
@Override public <T extends Number> Builder notEqual(String key, T value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.NE, value); handleComparisonExpression(filterExpression); return this; }
@Override public <T extends Number> Builder greaterThan(String key, T value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.GT, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder greaterThanOrEquals(String key, Date value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.GE, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder lessThanOrEquals(String key, LocalDate value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.LE, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder notEqual(String key, Date value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.NE, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder notEqualNull(String key) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.NE, null); handleComparisonExpression(filterExpression); return this; }
@Override public Builder greaterThan(String key, Date value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.GT, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder greaterThanOrEquals(String key, LocalDate value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.GE, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder lessThan(String key, Date value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.LT, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder lessThan(String key, LocalDate value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.LT, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder lessThanOrEquals(String key, LocalDateTime value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.LE, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder notEqual(String key, LocalDate value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.NE, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder contains(String key, String value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.CO, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder greaterThan(String key, LocalDate value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.GT, value); handleComparisonExpression(filterExpression); return this; }
@Override public Builder greaterThan(String key, LocalDateTime value) { AttributeReference ar = new AttributeReference(key); FilterExpression filterExpression = new AttributeComparisonExpression(ar, CompareOperator.GT, value); handleComparisonExpression(filterExpression); return this; }