/** Set the expression for the subscription. */ public void setExpression(String expression) { this.expression = expression; this.expr = Parser.parseDataExpr(expression); }
/** * Parse an <a href="https://github.com/Netflix/atlas/wiki/Reference-query">Atlas query * expression</a>. */ public static Query parseQuery(String expr) { try { return (Query) parse(expr); } catch (ClassCastException e) { throw new IllegalArgumentException("invalid query expression: " + expr, e); } }
private Query parse(String expr) { Query q1 = Parser.parseQuery(expr); Query q2 = Parser.parseQuery(expr); Assertions.assertEquals(q1, q2); Assertions.assertEquals(expr, q1.toString()); return q1; }
private DataExpr parse(String expr) { DataExpr de = Parser.parseDataExpr(expr); Assertions.assertEquals(expr, de.toString()); return de; }
/** * Parse an <a href="https://github.com/Netflix/atlas/wiki/Reference-data">Atlas data * expression</a>. */ public static DataExpr parseDataExpr(String expr) { try { return (DataExpr) parse(expr); } catch (ClassCastException e) { throw new IllegalArgumentException("invalid data expression: " + expr, e); } }
@Test public void mismatchedOpenParen() { Assertions.assertThrows(IllegalArgumentException.class, () -> Parser.parseDataExpr("key,(,key,(,),:in,:sum")); }
@Test public void nestedInClauses() { Set<String> values = new TreeSet<>(); values.add("key"); values.add("("); values.add("a"); values.add("b"); values.add(")"); values.add(":in"); DataExpr expected = new DataExpr.Sum(new Query.In("key", values)); DataExpr actual = Parser.parseDataExpr("key,(,key,(,a,b,),:in,),:in,:sum"); Assertions.assertEquals(expected, actual); }
@Test public void mismatchedClosingParen() { Assertions.assertThrows(IllegalArgumentException.class, () -> Parser.parseDataExpr("key,(,key,),),:in,:sum")); }
@Test public void multiNestedInClauses() { Set<String> values = new TreeSet<>( Arrays.asList("key,(,a,(,b,(,c,),),(,),),:in".split(","))); DataExpr expected = new DataExpr.Sum(new Query.In("key", values)); DataExpr actual = Parser.parseDataExpr("key,(,key,(,a,(,b,(,c,),),(,),),:in,),:in,:sum"); Assertions.assertEquals(expected, actual); }