@Override public ExpressionItem toExpressionItem() throws IllegalStateException { String gtCode = firedRuleReferenceRuleElement.getValue().getValue(); return new UnaryExpression(new Variable(gtCode), firedRuleOperatorRuleLineElement.getValue()); } }
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 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 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 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; }
public AssignmentExpression toAssignmentExpression() throws IllegalStateException { if (archetypeElementRuleLineElement.getValue() == null) { throw new IllegalStateException("No variable set"); } Variable var = new Variable( archetypeElementRuleLineElement.getValue().getValue(), null, null, OpenEHRConst.NULL_FLAVOR_ATTRIBUTE); DvCodedText nullValue = nullValueRuleLineElement.getValue(); if (nullValue == null) { throw new IllegalStateException("No null value set"); } String dataValueStr = nullValue.toString(); LoggerFactory.getLogger(SetElementAttributeActionRuleLine.class).debug("dataValueStr: " + dataValueStr); return new AssignmentExpression( var, new ConstantExpression(dataValueStr)); } }
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 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 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())) { if (OpenEHRDataValues.FUNCTION_COUNT.equals(var.getAttribute())) { ret = "$" + var.getCode() + var.getAttribute(); if (var.getAttribute() != null) { ret = "((" + dvClassName + ")$" + var.getCode() + getDataValueMethod(var.getCode()) + ").get" + StringUtils.capitalize(var.getAttribute()) + "()"; } else { ret = "DVUtil.ucumToMilliseconds((" + dvClassName + ")$" + var.getCode() + getDataValueMethod(var.getCode()) + ")";
@Override public AssignmentExpression toAssignmentExpression() throws IllegalStateException { ArchetypeReference archetypeReference = getArchetypeReference(); if (archetypeReference != null) { String name = archetypeReference.getIdArchetype(); Variable var = new Variable( cdsEntryRuleLineElement.getValue().getValue(), null, name, CreateInstanceExpression.FUNCTION_CREATE_NAME); List<AssignmentExpression> assignmentExpressions = new ArrayList<>(); if (!getChildrenRuleLines().getRuleLines().isEmpty()) { for (RuleLine childRuleLine : getChildrenRuleLines().getRuleLines()) { AssignmentExpressionRuleLine assignmentExpressionRuleLine = (AssignmentExpressionRuleLine) childRuleLine; assignmentExpressions.add(assignmentExpressionRuleLine.toAssignmentExpression()); } } else { log.debug("No assignment rules on create instance action rule"); return null; } return new CreateInstanceExpression( var, assignmentExpressions); } else { log.debug("No archetype reference set on create instance action rule"); return null; } }
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() + "'")); } }
ExpressionItem right = be.getRight(); if (left instanceof Variable) { String path = ((Variable) left).getPath(); if (right instanceof ConstantExpression) { String idElement =
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 ExpressionItem toExpressionItem() throws IllegalStateException { ArchetypeElementVO archetypeElementVO = getArchetypeElement(); if (archetypeElementVO != null) { String path = archetypeElementVO.getPath(); OperatorKind operatorKind = getExistenceOperatorRuleLineElement().getOperator(); if (operatorKind == null) { throw new IllegalStateException("No operator set"); } String name = getArchetypeManager().getArchetypeElements().getText(archetypeElementVO, getLanguage()); return new BinaryExpression( new Variable(null, name, path), new ConstantExpression(NULL_STR), operatorKind); } else { throw new IllegalStateException("Element instance not found for" + this.toString()); } }
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);
Variable variable = (Variable) binaryExpression.getLeft(); ConstantExpression constantExpression2 = (ConstantExpression) binaryExpression.getRight(); String path = variable.getPath(); String dvStr = constantExpression2.getValue(); ArchetypeElementVO archetypeElementVO = Variable variable = (Variable) binaryExpression.getLeft(); WithElementPredicateExpressionDefinitionRuleLine wepdrl = new WithElementPredicateExpressionDefinitionRuleLine(airl); String path = variable.getPath(); String attribute = StringUtils.substringAfterLast(path, "/value/"); wepdrl.getArchetypeElementAttributeRuleLineDefinitionElement().setAttribute(attribute); Variable variable = (Variable) unaryExpression.getOperand(); airl.addChildRuleLine(wefd); String path = variable.getPath(); ArchetypeElementVO archetypeElementVO = airl.getArchetypeManager().getArchetypeElements().getArchetypeElement(
sb.append(getVariableWithAttributeStr(rmName, var)); if (stats != null) { if (isFunction(var.getAttribute())) { stats.get(RefStat.ATT_FUNCTIONS).add(var.getCode() + CODE_FUNCTION_SEPARATOR + var.getAttribute()); stats.get(RefStat.ATT_FUNCTIONS_REF).add(var.getCode()); } else { stats.get(RefStat.REFERENCE).add(var.getCode());
@Override public ExpressionItem toExpressionItem() { ArchetypeElementVO archetypeElementVO = getArchetypeElementRuleLineDefinitionElement().getValue(); String path = archetypeElementVO.getPath(); OperatorKind operatorKind = getFunctionRuleLineElement().getValue(); String name = getArchetypeManager().getArchetypeElements().getText(archetypeElementVO, getLanguage()); return new UnaryExpression( new Variable(null, name, path), operatorKind); }
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() + "'"); } }