private static OperatorKind getOperatorKind(ExpressionItem parentExpressionItem) { if (parentExpressionItem instanceof BinaryExpression) { return ((BinaryExpression) parentExpressionItem).getOperator(); } else { return null; } }
protected void processBinaryExpression( RuleLineCollection ruleLines, RuleLine parentRuleLine, BinaryExpression binaryExpression) { if (OperatorKind.OR.equals(binaryExpression.getOperator())) { OrOperatorRuleLine orOperatorRuleLine = new OrOperatorRuleLine(); processExpressionItem(ruleLines, orOperatorRuleLine.getLeftRuleLineBranch(), binaryExpression.getLeft()); processExpressionItem(ruleLines, orOperatorRuleLine.getRightRuleLineBranch(), binaryExpression.getRight()); addRuleLine(orOperatorRuleLine, ruleLines, parentRuleLine); } else if (OperatorKind.AND.equals(binaryExpression.getOperator())) { processExpressionItem(ruleLines, parentRuleLine, binaryExpression.getLeft()); processExpressionItem(ruleLines, parentRuleLine, binaryExpression.getRight()); } else if (OperatorKind.EQUALITY.equals(binaryExpression.getOperator()) || OperatorKind.INEQUAL.equals(binaryExpression.getOperator()) || OperatorKind.IS_A.equals(binaryExpression.getOperator()) || OperatorKind.IS_NOT_A.equals(binaryExpression.getOperator()) || OperatorKind.GREATER_THAN.equals(binaryExpression.getOperator()) || OperatorKind.GREATER_THAN_OR_EQUAL.equals(binaryExpression.getOperator()) || OperatorKind.LESS_THAN.equals(binaryExpression.getOperator()) || OperatorKind.LESS_THAN_OR_EQUAL.equals(binaryExpression.getOperator())) { processComparisonExpression(ruleLines, parentRuleLine, binaryExpression); } else { throw new InternalErrorException(new Exception("Unknown operator '" + binaryExpression.getOperator() + "'")); } }
if (expressionItem instanceof BinaryExpression) { BinaryExpression binaryExpression = (BinaryExpression) expressionItem; if (OperatorKind.EXPONENT.equals(binaryExpression.getOperator())) { sb.append("(double) Math.pow("); sb.append(getArithmeticExpressionStr(elementMap, sb.append("(") .append(getArithmeticExpressionStr(elementMap, binaryExpression.getLeft(), stats, binaryExpression)); sb.append(binaryExpression.getOperator().getSymbol()); sb.append(getArithmeticExpressionStr(elementMap, binaryExpression.getRight(), stats, binaryExpression)) .append(")");
PredicateGeneratedElementInstance ei = generateElementInstanceForPredicate(ar, be.getOperator(), idElement, dv, guide, dateTime, resolvePredicates); String gtCode = getGTCodeForPredicate(archetypeBinding, path, dv); if (gtCode != null) { String idElement = archetypeBinding.getArchetypeId() + path; DataValue dv = new CurrentTimeExpressionDataValue(right, attribute); generateElementInstanceForPredicate(ar, be.getOperator(), idElement, dv, guide, dateTime, resolvePredicates);
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; } }
private void addExpressionNodes(String guideId, ExpressionItem currentExpressionItem, GraphNode graphNode) throws InternalErrorException { if (currentExpressionItem instanceof BinaryExpression) { BinaryExpression binaryExpression = (BinaryExpression) currentExpressionItem; if (OperatorKind.OR.equals(binaryExpression.getOperator()) || OperatorKind.AND.equals(binaryExpression.getOperator())) { addExpressionNodes(guideId, binaryExpression.getLeft(), graphNode); addExpressionNodes(guideId, binaryExpression.getRight(), graphNode); return; } else if (isArithmeticOperator(binaryExpression.getOperator())) { addSimpleConditionsFromComplexExpressions(guideId, binaryExpression.getLeft(), graphNode); addSimpleConditionsFromComplexExpressions(guideId, binaryExpression.getRight(), graphNode); } } else if (currentExpressionItem instanceof AssignmentExpression) { AssignmentExpression assignmentExpression = (AssignmentExpression) currentExpressionItem; addExpressionNodes(guideId, assignmentExpression.getAssignment(), graphNode); } addExpressionToNode(guideId, currentExpressionItem, graphNode); }
private void addSimpleConditionsFromExpressionItems(ExpressionItem expressionItem, Collection<BinaryExpression> simpleConditionsExpressionItems) { if (expressionItem instanceof BinaryExpression) { BinaryExpression binaryExpression = (BinaryExpression) expressionItem; if (OperatorKind.AND.equals(binaryExpression.getOperator()) || OperatorKind.OR.equals(binaryExpression.getOperator())) { addSimpleConditionsFromExpressionItems(binaryExpression.getLeft(), simpleConditionsExpressionItems); addSimpleConditionsFromExpressionItems(binaryExpression.getRight(), simpleConditionsExpressionItems); return; } else { if (isArithmeticOperator(binaryExpression.getOperator())) { addSimpleConditionsFromComplexExpressions(binaryExpression.getLeft(), simpleConditionsExpressionItems); addSimpleConditionsFromComplexExpressions(binaryExpression.getRight(), simpleConditionsExpressionItems); } if (!(binaryExpression.getLeft() instanceof Variable) || !(binaryExpression.getRight() instanceof ConstantExpression)) { return; //Skip conditions that are not like format 'variable op constant' } } simpleConditionsExpressionItems.add(binaryExpression); } else if (expressionItem instanceof AssignmentExpression) { AssignmentExpression assignmentExpression = (AssignmentExpression) expressionItem; addSimpleConditionsFromExpressionItems(assignmentExpression.getAssignment(), simpleConditionsExpressionItems); } }
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(); } } }
&& dv2 != null && !dv1.getClass().equals(dv2.getClass())) && elementInstanceCollectionManager.matches(dv1, dv2, guideBinaryExpressionItem.getBinaryExpression().getOperator(), guides);
&& (OperatorKind.IS_A.equals(binaryExpression.getOperator()) || OperatorKind.IS_NOT_A.equals(binaryExpression.getOperator()))) { rmType = OpenEHRDataValues.DV_CODED_TEXT; eccrl.getArchetypeDataValueRuleLineElement().setValue(dv); eccrl.getArchetypeDataValueRuleLineElement().setArchetypeElementVO(archetypeElementVO); eccrl.getComparisonOperatorRuleLineElement().setValue(binaryExpression.getOperator()); } else { ElementInitializedConditionRuleLine eicrl = new ElementInitializedConditionRuleLine(); addRuleLine(eicrl, ruleLines, parentRuleLine); eicrl.getArchetypeElementRuleLineElement().setValue(gtCodeRuleLineElement); eicrl.getExistenceOperatorRuleLineElement().setOperator(binaryExpression.getOperator()); eccrl.getArchetypeElementRuleLineElement().setValue(gtCodeRuleLineElement); eccrl.getSecondArchetypeElementRuleLineElement().setValue(gtCodeElementMap.get(gtCodeAux).getGTCodeRuleLineElement()); eccrl.getComparisonOperatorRuleLineElement().setValue(binaryExpression.getOperator()); } else { throw new InternalErrorException(new Exception("Unknown expression '" + binaryExpression.getRight().getClass().getName() + "'")); ecwnvc.getNullValueRuleLineElement().setValue((DvCodedText) dv); ecwnvc.getEqualityComparisonOperatorRuleLineElement().setValue(binaryExpression.getOperator()); } else { ElementAttributeComparisonConditionRuleLine eaccrl = new ElementAttributeComparisonConditionRuleLine(); eaccrl.getArchetypeElementAttributeRuleLineElement().setValue(aerle); eaccrl.getExpressionRuleLineElement().setValue(binaryExpression.getRight()); eaccrl.getComparisonOperatorRuleLineElement().setValue(binaryExpression.getOperator());
String rmType = archetypeElementVO.getType(); if (OpenEHRDataValues.DV_TEXT.equals(rmType) && (OperatorKind.IS_A.equals(binaryExpression.getOperator()) || OperatorKind.IS_NOT_A.equals(binaryExpression.getOperator()))) { rmType = OpenEHRDataValues.DV_CODED_TEXT; wepdrl.getComparisonOperatorRuleLineElement().setValue(binaryExpression.getOperator()); } else { WithElementPredicateExistsDefinitionRuleLine wepedrl = new WithElementPredicateExistsDefinitionRuleLine(); airl.addChildRuleLine(wepedrl); wepedrl.getArchetypeElementRuleLineDefinitionElement().setValue(archetypeElementVO); wepedrl.getExistenceOperatorRuleLineElement().setValue(binaryExpression.getOperator().getSymbol() + "null"); ExpressionItem expressionItemAux = binaryExpression.getRight(); wepdrl.getExpressionRuleLineElement().setValue(expressionItemAux); wepdrl.getComparisonOperatorRuleLineElement().setValue(binaryExpression.getOperator());