private static void generatePredicateElementsForUnaryExpression( ArchetypeBinding archetypeBinding, ArchetypeReference ar, Guide guide, DateTime dateTime, boolean resolvePredicates, UnaryExpression expressionItem) { UnaryExpression ue = expressionItem; OperatorKind op = ue.getOperator(); ExpressionItem operand = ue.getOperand(); if (operand instanceof Variable) { String idElement = archetypeBinding.getArchetypeId() + ((Variable) operand).getPath(); DataValue dv = null; generateElementInstanceForPredicate(ar, op, idElement, dv, guide, dateTime, resolvePredicates); //TODO No rule references added (no gt codes) } }
private void processFiredRuleCondition(RuleLineCollection ruleLines, RuleLine parentRuleLine, UnaryExpression unaryExpression) throws InternalErrorException { if (unaryExpression.getOperand() instanceof Variable) { FiredRuleConditionRuleLine firedRuleConditionRuleLine = new FiredRuleConditionRuleLine(); addRuleLine(firedRuleConditionRuleLine, ruleLines, parentRuleLine); Variable variable = (Variable) unaryExpression.getOperand(); GTCodeDefiner gtCodeDefiner = gtCodeElementMap.get(variable.getCode()); firedRuleConditionRuleLine.getFiredRuleReferenceRuleElement().setValue(gtCodeDefiner.getGTCodeRuleLineElement()); firedRuleConditionRuleLine.getFiredRuleOperatorRuleLineElement().setValue(unaryExpression.getOperator()); } else { throw new InternalErrorException(new Exception("Variable expected, got '" + unaryExpression.getOperand() + "'")); } }
public static String toString(RuleLineElementWithValue<ExpressionItem> ruleLineElement, ExpressionItem expressionItem, String language) { if (expressionItem instanceof Variable) { return getVariableName(ruleLineElement, (Variable) expressionItem, language); } else if (expressionItem instanceof BinaryExpression) { BinaryExpression be = (BinaryExpression) expressionItem; return "(" + toString(ruleLineElement, be.getLeft(), language) + " " + be.getOperator().getSymbol() + " " + toString(ruleLineElement, be.getRight(), language) + ")"; } else if (expressionItem instanceof UnaryExpression) { UnaryExpression ue = (UnaryExpression) expressionItem; return ue.getOperator().getSymbol() + "(" + toString(ruleLineElement, ue.getOperand(), language) + ")"; } else if (expressionItem instanceof FunctionalExpression) { FunctionalExpression fe = (FunctionalExpression) expressionItem; StringBuilder sb = new StringBuilder(); String postFix = ""; for (ExpressionItem ei : fe.getItems()) { sb.append(postFix) .append(toString(ruleLineElement, ei, language)); postFix = ","; } return "(" + fe.getFunction().toString() + "(" + sb.toString() + "))"; } else if (expressionItem instanceof StringConstant) { return expressionItem.toString(); } else { return expressionItem != null ? expressionItem.toString().replace(",", " ") : null; } }
protected void processUnaryExpression( RuleLineCollection ruleLines, RuleLine parentRuleLine, UnaryExpression unaryExpression) throws InternalErrorException { OperatorKind operator = unaryExpression.getOperator(); if (OperatorKind.FIRED.equals(operator) || OperatorKind.NOT_FIRED.equals(operator)) { processFiredRuleCondition(ruleLines, parentRuleLine, unaryExpression); } else if (OperatorKind.NOT.equals(operator)) { NotOperatorRuleLine notOperatorRuleLine = new NotOperatorRuleLine(); processExpressionItem(ruleLines, notOperatorRuleLine, unaryExpression.getOperand()); addRuleLine(notOperatorRuleLine, ruleLines, parentRuleLine); } else { throw new InternalErrorException(new Exception("Unknown operator '" + operator + "'")); } }
public static String getEditableExpressionString(ExpressionItem expressionItem) { if (expressionItem instanceof Variable) { Variable var = (Variable) expressionItem; String attributePostfix = var.getAttribute() != null ? "." + var.getAttribute() : ""; return "$" + var.getCode() + attributePostfix; } else if (expressionItem instanceof BinaryExpression) { BinaryExpression be = (BinaryExpression) expressionItem; return "(" + getEditableExpressionString(be.getLeft()) + " " + be.getOperator().getSymbol() + " " + getEditableExpressionString(be.getRight()) + ")"; } else if (expressionItem instanceof UnaryExpression) { UnaryExpression ue = (UnaryExpression) expressionItem; return ue.getOperator().getSymbol() + "(" + getEditableExpressionString(ue.getOperand()) + ")"; } else if (expressionItem instanceof FunctionalExpression) { FunctionalExpression fe = (FunctionalExpression) expressionItem; StringBuilder sb = new StringBuilder(); String postFix = ""; for (ExpressionItem ei : fe.getItems()) { sb.append(postFix) .append(getEditableExpressionString(ei)); postFix = ", "; } return "(" + fe.getFunction().toString() + "(" + sb.toString() + "))"; } else { return expressionItem.toString(); } } }
wefd.getFunctionRuleLineElement().setValue(unaryExpression.getOperator());