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() + "'")); } }
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) } }
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 + "'")); } }
private static void addGTCodesInReads(ExpressionItem expressionItem, Set<String> gtCodes) { if (expressionItem instanceof BinaryExpression) { BinaryExpression binaryExpression = (BinaryExpression) expressionItem; addGTCodesInReads(binaryExpression.getLeft(), gtCodes); addGTCodesInReads(binaryExpression.getRight(), gtCodes); } else if (expressionItem instanceof UnaryExpression) { UnaryExpression unaryExpression = (UnaryExpression) expressionItem; addGTCodesInReads(unaryExpression.getOperand(), gtCodes); } else if (expressionItem instanceof FunctionalExpression) { FunctionalExpression functionalExpression = (FunctionalExpression) expressionItem; for (ExpressionItem expressionItemAux : functionalExpression.getItems()) { addGTCodesInReads(expressionItemAux, gtCodes); } } else if (expressionItem instanceof AssignmentExpression) { AssignmentExpression assignmentExpression = (AssignmentExpression) expressionItem; addGTCodesInReads(assignmentExpression.getAssignment(), gtCodes); } else if (expressionItem instanceof MultipleAssignmentExpression) { MultipleAssignmentExpression multipleAssignmentExpression = (MultipleAssignmentExpression) expressionItem; for (AssignmentExpression assignmentExpression : multipleAssignmentExpression.getAssignmentExpressions()) { addGTCodesInReads(assignmentExpression, gtCodes); } } else if (expressionItem instanceof Variable) { Variable variable = (Variable) expressionItem; gtCodes.add(variable.getCode()); } else if (expressionItem instanceof ConstantExpression) { //Do nothing } else { throw new RuntimeException("Unkown expression '" + expressionItem.getClass().getName() + "'"); } }
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(); } } }
UnaryExpression unaryExpression = (UnaryExpression) expressionItem; WithElementPredicateFunctionDefinitionRuleLine wefd = new WithElementPredicateFunctionDefinitionRuleLine(); Variable variable = (Variable) unaryExpression.getOperand(); airl.addChildRuleLine(wefd); String path = variable.getPath();