У меня есть дерево с Expressions(odata4j)
. Мне нужно, чтобы разобрать его в список выражений, как в Боттоне на фото ниже:Выражение дескриптора синтаксиса в список выражений в Java
http://i58.tinypic.com/x4rsxy.jpg
Каждого OrExpression
и AndExpression
имеют такие методы, как getRHS(right)
и getLeft(left)
, чтобы получить объекты ниже.
До сих пор у меня есть следующий код:
private BinaryCommonExpression getLeftRek(BinaryCommonExpression expr, ConditionOperator conditionOperator) {
BinaryCommonExpression lhs = expr;
if (lhs.getLHS() instanceof EntitySimpleProperty == false) {
if(lhs instanceof AndExpression){
conditionOperator = ConditionOperator.AND;
}else if(lhs instanceof OrExpression){
conditionOperator = ConditionOperator.OR;
}
getLeftRek((BinaryCommonExpression)lhs.getLHS(), conditionOperator);
if(lhs.getRHS() instanceof StringLiteral == false && lhs.getRHS() instanceof DateTimeLiteral == false && lhs.getRHS() instanceof IntegralLiteral == false/*lhs.getRHS() instanceof AndExpression || lhs.getRHS() instanceof OrExpression*/){
getLeftRek((BinaryCommonExpression)lhs.getRHS(), null);
}
} else {
Criterion lhsFinish = getLHSFinish(lhs, conditionOperator);
stack.push(lhs+ " "+conditionOperator);
}
return lhs;
}
Вот результат моего списка:
[EqExpression(1) OR, EqExpression(2) AND, LtExpression(3) null, LtExpression(4) OR, EqExpression(5) null]
Я не могу получить оператору LtExpression(3)
и EqExpression(5)
, потому что его 2 уровней выше в дереве ,
Любые идеи?