private static String getRMName(Map<String, ArchetypeElementVO> elementMap, Variable var) { String rmName = null; if (OpenEHRConst.CURRENT_DATE_TIME_ID.equals(var.getCode())) { rmName = OpenEHRDataValues.DV_DATE_TIME; } else { ArchetypeElementVO aeVO = elementMap.get(var.getCode()); if (aeVO == null && !isFunction(var.getAttribute())) { throw new RuntimeException(format("Archetype element not found for gtcode '%s'", var.getCode())); } if (aeVO != null) { rmName = aeVO.getType(); } } return rmName; }
private static void addGTCodesInWrites(ExpressionItem expressionItem, Set<String> gtCodes) { if (expressionItem instanceof CreateInstanceExpression) { MultipleAssignmentExpression multipleAssignmentExpression = ((CreateInstanceExpression) expressionItem).getAssignment(); for (AssignmentExpression assignmentExpression : multipleAssignmentExpression.getAssignmentExpressions()) { addGTCodesInWrites(assignmentExpression, gtCodes); } } else if (expressionItem instanceof AssignmentExpression) { gtCodes.add(((AssignmentExpression) expressionItem).getVariable().getCode()); } else { throw new RuntimeException("Unknown expression '" + expressionItem.getClass().getName() + "'"); } }
private static String getLeftVariable(Map<String, ArchetypeElementVO> elementMap, Variable leftVariable) { String code = leftVariable.getCode(); if (OpenEHRConst.CURRENT_DATE_TIME_ID.equals(code)) { return "$" + OpenEHRConst.CURRENT_DATE_TIME_ID; } else { String rmName = getRMName(elementMap, leftVariable); String dvClassName = DVDefSerializer.getDVClassName(rmName); String variableExp = "$" + code + ".getDataValue()"; if (leftVariable.getAttribute() != null) { variableExp = "((" + dvClassName + ")$" + leftVariable.getCode() + getDataValueMethod(leftVariable.getCode()) + ").get" + capitalize(leftVariable.getAttribute()) + "()"; } return variableExp; } }
public static String getVariableWithAttributeStr(String rmName, Variable var) { LoggerFactory.getLogger(DVUtil.class).debug("Var.code: " + var.getCode() + ", attr: " + var.getAttribute()); String ret = null; String dvClassName = null; dvClassName = DVDefSerializer.getDVClassName(rmName); if (OpenEHRConst.CURRENT_DATE_TIME_ID.equals(var.getCode()) && (var.getAttribute() == null || var.getAttribute().equals("value"))) { ret = "$" + OpenEHRConst.CURRENT_DATE_TIME_ID + ".getDateTime().getMillis()"; } else if ("value".equals(var.getAttribute()) && ("DvDateTime".equals(dvClassName) || "DvDate".equals(dvClassName))) { ret = "((" + dvClassName + ")$" + var.getCode() + getDataValueMethod(var.getCode()) + ").getDateTime().getMillis()"; } else { if (isFunction(var.getAttribute())) { ret = "$" + var.getCode() + var.getAttribute(); ret = "((" + dvClassName + ")$" + var.getCode() + getDataValueMethod(var.getCode()) + ").get" + StringUtils.capitalize(var.getAttribute()) + "()"; } else { ret = "DVUtil.ucumToMilliseconds((" + dvClassName + ")$" + var.getCode() + getDataValueMethod(var.getCode()) + ")";
public static String getVariableName(RuleLineElementWithValue<ExpressionItem> ruleLineElement, Variable var, String language) { String attStr = ""; if (var.getAttribute() != null) { if (!"magnitude".equals(var.getAttribute()) && !"value".equals(var.getAttribute())) { attStr = "<font size=2><sub>" + var.getAttribute().toUpperCase() + "</sub></font>"; } } return "<b>" + ruleLineElement.getName(var.getCode(), language) + attStr + "</b>"; }
private Map<String, Collection<GuideBinaryExpressionItem>> generateAllConditionsByElementIdMap() { Map<String, Collection<GuideBinaryExpressionItem>> allConditionsByElementId = new HashMap<>(); for (Guide guide : guideMap.values()) { if (guide.getDefinition() != null) { for (Rule rule : guide.getDefinition().getRules().values()) { Collection<BinaryExpression> simpleConditionsFromExpressionItems = getSimpleConditionsFromExpressionItems(guide, rule); for (BinaryExpression binaryExpression : simpleConditionsFromExpressionItems) { if (binaryExpression.getLeft() instanceof Variable) { Variable variable = (Variable) binaryExpression.getLeft(); RuleReference ruleReference = new RuleReference(guide.getId(), variable.getCode()); ElementInstance elementInstance = getElementInstanceByRuleReferenceMap().get(ruleReference); if (elementInstance == null) { if (!OpenEHRConst.CURRENT_DATE_TIME_ID.equals(ruleReference.getGtCode())) { logger.warn("ElementInstance not found for " + ruleReference); } } else { Collection<GuideBinaryExpressionItem> guideBinaryExpressionItems = allConditionsByElementId.computeIfAbsent(elementInstance.getId(), k -> new ArrayList<>()); guideBinaryExpressionItems.add(new GuideBinaryExpressionItem(guide.getId(), binaryExpression)); } } } } } } return allConditionsByElementId; }
private Map<String, Collection<GuideAssignmentExpression>> generateAllAssignmentsByElementIdMap() { Map<String, Collection<GuideAssignmentExpression>> allAssignmentsByElementId = new HashMap<>(); for (Guide guide : guideMap.values()) { if (guide.getDefinition() != null) { for (Rule rule : guide.getDefinition().getRules().values()) { Collection<AssignmentExpression> simpleAssignmentsFromExpressionItems = getSimpleAssignmentsFromExpressionItems(rule.getThenStatements()); for (AssignmentExpression assignmentExpression : simpleAssignmentsFromExpressionItems) { Variable variable = assignmentExpression.getVariable(); RuleReference ruleReference = new RuleReference(guide.getId(), variable.getCode()); ElementInstance elementInstance = getElementInstanceByRuleReferenceMap().get(ruleReference); if (elementInstance == null) { logger.warn("ElementInstance not found for " + ruleReference); } else { Collection<GuideAssignmentExpression> guideAssignmentExpression = allAssignmentsByElementId.computeIfAbsent(elementInstance.getId(), k -> new ArrayList<>()); guideAssignmentExpression.add(new GuideAssignmentExpression(guide.getId(), assignmentExpression)); } } } } } return allAssignmentsByElementId; }
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 boolean matches(GuideBinaryExpressionItem guideBinaryExpressionItem, GuideAssignmentExpression guideAssignmentExpression, Calendar cal) { String gtCode = ((Variable) guideBinaryExpressionItem.getBinaryExpression().getLeft()).getCode(); RuleReference ruleReference = new RuleReference(guideBinaryExpressionItem.getGuideId(), gtCode); ElementInstance conditionElementInstance = getElementInstanceByRuleReferenceMap().get(ruleReference); throw new InternalErrorException(new Exception("Element for binary expression " + guideAssignmentExpression + " not found!")); gtCode = guideAssignmentExpression.getAssignmentExpression().getVariable().getCode(); ruleReference = new RuleReference(guideAssignmentExpression.getGuideId(), gtCode); ElementInstance assignmentElementInstance = getElementInstanceByRuleReferenceMap().get(ruleReference);
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(); } } }
protected void processAssignmentExpression( RuleLineCollection ruleLines, AssignmentExpression assignmentExpression) { String gtCode = assignmentExpression.getVariable().getCode(); ExpressionItem expressionItemAux = assignmentExpression.getAssignment(); String attribute = assignmentExpression.getVariable().getAttribute(); if (attribute == null) { if (expressionItemAux instanceof Variable) { String gtCodeAux = ((Variable) expressionItemAux).getCode(); SetElementWithElementActionRuleLine sewearl = new SetElementWithElementActionRuleLine(); ruleLines.add(sewearl);
if (binaryExpression.getLeft() instanceof Variable) { Variable var = (Variable) binaryExpression.getLeft(); gtCode = var.getCode(); GTCodeDefiner gtCodeDefiner = gtCodeElementMap.get(gtCode); if (gtCodeDefiner != null) { String gtCodeAux = varRight.getCode(); ElementComparisonWithElementConditionRuleLine eccrl = new ElementComparisonWithElementConditionRuleLine(); addRuleLine(eccrl, ruleLines, parentRuleLine);