@Override public String getResolvedName(OperatorKind operatorKind, String lang) { if (OperatorKind.FIRED.equals(operatorKind)) { return CDSLanguageManager.getMessageWithLanguage("HasBeenFiredRLE", lang); } else if (OperatorKind.NOT_FIRED.equals(operatorKind)) { return CDSLanguageManager.getMessageWithLanguage("HasNotBeenFiredRLE", lang); } else { throw new RuntimeException("Unknown operator '" + operatorKind + "'"); } }
private Integer getComparisonNumber(PredicateGeneratedElementInstance pred) { if (OperatorKind.IS_A.equals(pred.getOperatorKind())) { return 0; } else if (OperatorKind.IS_NOT_A.equals(pred.getOperatorKind())) { return 1; } else if (OperatorKind.EQUALITY.equals(pred.getOperatorKind())) { return 2; } else if (OperatorKind.INEQUAL.equals(pred.getOperatorKind())) { return 3; } else if (OperatorKind.GREATER_THAN_OR_EQUAL.equals(pred.getOperatorKind())) { return 4; } else if (OperatorKind.LESS_THAN_OR_EQUAL.equals(pred.getOperatorKind())) { return 5; } else if (OperatorKind.GREATER_THAN.equals(pred.getOperatorKind())) { return 6; } else if (OperatorKind.LESS_THAN.equals(pred.getOperatorKind())) { return 7; } else if (OperatorKind.MAX.equals(pred.getOperatorKind())) { return 8; } else if (OperatorKind.MIN.equals(pred.getOperatorKind())) { return 9; } return 0; }
public static DataValue resolvePredicate(DataValue dv, OperatorKind op, Collection<Guide> guides, Calendar date) { if (OperatorKind.IS_A.equals(op)) { if (dv instanceof DvCodedText) { DvCodedText dvCodedText = (DvCodedText) dv; return getResolvedCodedText(dvCodedText, guides); } else if (dv instanceof DvOrdinal) { return dv; } else { LoggerFactory.getLogger(ElementInstanceCollectionManager.class).warn("Not a coded text '" + dv + "'"); return null; } } else if (dv instanceof CurrentTimeExpressionDataValue) { return getResolvedCurrentDateTime(dv, date); } else { return dv; } }
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 + "'")); } }
OperatorKind operatorKind, Collection<Guide> guides) { if (OperatorKind.IS_A.equals(operatorKind)) { if (dv1 instanceof DvCodedText && dv2 instanceof DvCodedText) { CodePhrase elementCodePhrase = ((DvCodedText) dv2).getDefiningCode(); } else if (OperatorKind.EQUALITY.equals(operatorKind)) { return DVUtil.equalDVs(dv1, dv2); } else if (OperatorKind.INEQUAL.equals(operatorKind)) { return !DVUtil.equalDVs(dv1, dv2); } else if (OperatorKind.MAX.equals(operatorKind) || (OperatorKind.MIN.equals(operatorKind))) { return dv2 != null; } else if (OperatorKind.GREATER_THAN.equals(operatorKind)) { return dv2 != null && DVUtil.compareDVs(dv1, dv2) < 0; } else if (OperatorKind.GREATER_THAN_OR_EQUAL.equals(operatorKind)) { return dv2 != null && DVUtil.compareDVs(dv1, dv2) <= 0; } else if (OperatorKind.LESS_THAN.equals(operatorKind)) { return dv2 != null && DVUtil.compareDVs(dv1, dv2) > 0; } else if (OperatorKind.LESS_THAN_OR_EQUAL.equals(operatorKind)) { return dv2 != null && DVUtil.compareDVs(dv1, dv2) >= 0;
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() + "'")); } }
private void filterEhrData( Collection<ArchetypeReference> ehrArchetypeReferences, Calendar date, PredicateGeneratedElementInstance predicate) { if (OperatorKind.MAX.equals(predicate.getOperatorKind())) { filterMaxMin(predicate.getId(), ehrArchetypeReferences, true); } else if (OperatorKind.MIN.equals(predicate.getOperatorKind())) { filterMaxMin(predicate.getId(), ehrArchetypeReferences, false); } else if (OperatorKind.IS_A.equals(predicate.getOperatorKind())) { filterIsA(predicate, ehrArchetypeReferences, false); } else if (OperatorKind.IS_NOT_A.equals(predicate.getOperatorKind())) { filterIsA(predicate, ehrArchetypeReferences, true); } else if (OperatorKind.EQUALITY.equals(predicate.getOperatorKind())) { filterEquals(predicate, ehrArchetypeReferences, false); } else if (OperatorKind.INEQUAL.equals(predicate.getOperatorKind())) { filterEquals(predicate, ehrArchetypeReferences, true); } else if (OperatorKind.GREATER_THAN_OR_EQUAL.equals(predicate.getOperatorKind())) { filterGreaterLessThanPredicate(predicate.getId(), predicate.getDataValue(), ehrArchetypeReferences, true, date); } else if (OperatorKind.LESS_THAN_OR_EQUAL.equals(predicate.getOperatorKind())) { filterGreaterLessThanPredicate(predicate.getId(), predicate.getDataValue(), ehrArchetypeReferences, false, date); } }
private static DataValue getResolveDataValueIfNeeded(Map<String, Guide> guideMap, Calendar date, ElementInstance ei, Set<String> guideIds) { DataValue dv = ei.getDataValue(); if (ei instanceof PredicateGeneratedElementInstance) { Set<String> localGuideIds = new HashSet<>(); PredicateGeneratedElementInstance pgei = ((PredicateGeneratedElementInstance) ei); for (RuleReference ruleReference : pgei.getRuleReferences()) { Guide guide = guideMap.get(ruleReference.getGuideId()); if (guide == null) { LoggerFactory.getLogger(ElementInstanceCollectionManager.class).warn("Null guideline for rule reference '" + ruleReference + "'"); } else { localGuideIds.add(guide.getId()); } } Collection<Guide> localGuides = new ArrayList<>(); for (String guideId : localGuideIds) { Guide guide = guideMap.get(guideId); localGuides.add(guide); } if (pgei.getOperatorKind().equals(OperatorKind.IS_A)) { dv = ei.getDataValue(); } else { dv = resolvePredicate(ei.getDataValue(), pgei.getOperatorKind(), localGuides, date); } guideIds.addAll(localGuideIds); } return dv; }
if (expressionItem instanceof BinaryExpression) { BinaryExpression binaryExpression = (BinaryExpression) expressionItem; if (OperatorKind.EXPONENT.equals(binaryExpression.getOperator())) { sb.append("(double) Math.pow("); sb.append(getArithmeticExpressionStr(elementMap,
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); } }
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); }
if (prevEI instanceof PredicateGeneratedElementInstance) { PredicateGeneratedElementInstance pgeiPrev = (PredicateGeneratedElementInstance) prevEI; if (!pgeiNew.getOperatorKind().equals(pgeiPrev.getOperatorKind()) || DVUtil.compareDVs(pgeiNew.getDataValue(), pgeiPrev.getDataValue()) != 0) {