public QueryPath(CompoundExpr expr) { path = new LinkedList<>(); // Recursively convert the compound expr to a linked list of symbols while(true) { path.add(0, expr.getField().getName()); if(expr.getValue() instanceof CompoundExpr) { expr = (CompoundExpr) expr.getValue(); } else if(expr.getValue() instanceof SymbolNode) { path.add(0, ((SymbolNode) expr.getValue()).getName()); break; } } }
private static SimpleCondition parseEnumCondition(CompoundExpr node) { ResourceId fieldId = parseFieldId(node.getValue()); ResourceId enumItem = node.getField().asResourceId(); return new SimpleCondition(fieldId, SimpleOperator.INCLUDES, new EnumValue(enumItem)); }
arguments.add(compoundExpr.getField());
private List<ResourceId> getFieldIds(FormulaNode formulaNode) { List<ResourceId> fieldIds = new ArrayList<>(); if (formulaNode instanceof FunctionCallNode) { FunctionCallNode functionCall = (FunctionCallNode) formulaNode; for(FormulaNode arg : functionCall.getArguments()) { fieldIds.addAll(getFieldIds(arg)); } } else if (formulaNode instanceof SymbolNode) { SymbolNode symbolNode = (SymbolNode) formulaNode; fieldIds.add(ResourceId.valueOf(symbolNode.getName())); } else if (formulaNode instanceof ConstantNode) { ConstantNode constantNode = (ConstantNode) formulaNode; if (constantNode.getType() instanceof EnumType) { fieldIds.add(ResourceId.valueOf(constantNode.toString())); } } else if (formulaNode instanceof CompoundExpr) { CompoundExpr compoundExpr = (CompoundExpr) formulaNode; fieldIds.addAll(getFieldIds(compoundExpr.getValue())); fieldIds.addAll(getFieldIds(compoundExpr.getField())); } else if (formulaNode instanceof GroupNode) { GroupNode groupNode = (GroupNode) formulaNode; fieldIds.addAll(getFieldIds(groupNode.getExpr())); } return fieldIds; }