private Set<String> getReferenceGuideIds(DataValue dv, Collection<RuleReference> ruleReferences) { Set<String> guideIds = new HashSet<>(); if (dv instanceof DvCodedText) { DvCodedText dvCT = (DvCodedText) dv; for (RuleReference ruleReference : ruleReferences) { if (ruleReference.getGtCode().equals(dvCT.getCode())) { guideIds.add(ruleReference.getGuideId()); } } } else { for (RuleReference ruleReference : ruleReferences) { guideIds.add(ruleReference.getGuideId()); } } return guideIds; }
public static List<RuleReference> getRuleReferences(List<String> firedRules) { List<RuleReference> ruleReferences = new ArrayList<>(); if (firedRules != null) { for (String firedRule : firedRules) { if (!firedRule.endsWith("/default")) { ruleReferences.add(new RuleReference(firedRule)); } } } return ruleReferences; }
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; }
String gtCode = null; if (!elementInstancesWithGTCode.getRuleReferences().isEmpty()) { gtCode = elementInstancesWithGTCode.getRuleReferences().iterator().next().getGtCode();
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; }
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; }
String gtCode = getGTCodeForPredicate(archetypeBinding, path, dv); if (gtCode != null) { ei.getRuleReferences().add(new RuleReference(guideId, gtCode));
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); if (conditionElementInstance == null) { ruleReference = new RuleReference(guideAssignmentExpression.getGuideId(), gtCode); ElementInstance assignmentElementInstance = getElementInstanceByRuleReferenceMap().get(ruleReference); if (assignmentElementInstance == null) {
private static GeneratedArchetypeReference getGeneratedArchetypeReference( ArchetypeBinding archetypeBinding, String guideId, Guide guide, DateTime dateTime, boolean resolvePredicates) { GeneratedArchetypeReference ar = new GeneratedArchetypeReference( archetypeBinding.getDomain(), archetypeBinding.getArchetypeId(), archetypeBinding.getTemplateId()); if (archetypeBinding.getElements() != null) { for (ElementBinding elementBinding : archetypeBinding.getElements().values()) { String idElement = archetypeBinding.getArchetypeId() + elementBinding.getPath(); GeneratedElementInstance gei = new GeneratedElementInstance( idElement, null, ar, null, NULL_FLAVOUR_CODE_NO_INFO); gei.getRuleReferences().add(new RuleReference(guideId, elementBinding.getId())); } } generatePredicateElements(archetypeBinding, ar, guideId, guide, dateTime, resolvePredicates); return ar; }