public static Set<String> getGTCodesInWrites(Guide guide) { Set<String> gtCodes = new HashSet<>(); if (guide.getDefinition() == null || guide.getDefinition().getRules() == null) { return gtCodes; } //Rules for (Rule rule : guide.getDefinition().getRules().values()) { gtCodes.addAll(getGTCodesInWrites(rule)); } return gtCodes; }
private static void addGtCodesForRules(Guide guide, Set<String> gtCodes) { for (Rule rule : guide.getDefinition().getRules().values()) { gtCodes.addAll(getGTCodesInReads(rule)); } }
private void generateGTCodeMapForRules(Guide guide) { for (Rule rule : guide.getDefinition().getRules().values()) { FiredRuleInstantiationRuleLine frirl = new FiredRuleInstantiationRuleLine(); frirl.setGTCode(rule.getId()); frirl.setReadableGuide(readableGuide); gtCodeElementMap.put(rule.getId(), frirl); } }
private void addArchetypeDependencyNodes(Guide guide, Set<String> archetypeKeysAdded) throws InternalErrorException { Map<String, String> gtCodeToArchetypeKey = generateGtCodeToArchetypeMap(guide); Collection<Map.Entry<GraphNode, GraphNode>> insertedEdges = new ArrayList<>(); for (Rule rule : guide.getDefinition().getRules().values()) { Set<String> readArchetypeKeys = getReadArchetypeKeys(guide, rule, gtCodeToArchetypeKey); Set<String> writeArchetypeKeys = getWriteArchetypeKeys(rule, gtCodeToArchetypeKey); readArchetypeKeys.removeAll(writeArchetypeKeys); //If write, ignore read (displays nicer graph) for (String archetypeKey : readArchetypeKeys) { addArchetypeNode(guide, rule, insertedEdges, archetypeKeysAdded, archetypeKey, false); } for (String archetypeKey : writeArchetypeKeys) { addArchetypeNode(guide, rule, insertedEdges, archetypeKeysAdded, archetypeKey, true); } } }
public static Set<String> getGTCodesInReads(Guide guide) { Set<String> gtCodes = new HashSet<>(); if (guide.getDefinition() == null || guide.getDefinition().getRules() == null) { return gtCodes; } addGtCodesForRules(guide, gtCodes); addGtCodesForPreconditions(guide, gtCodes); addGtCodesForDefaultActions(guide, gtCodes); return gtCodes; }
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 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 void processGuide(String lang, Guide guide) throws InternalErrorException { GraphNode guideLineGraphNode = createGuideNode(guide); GraphGranularity localGranularity = getGranularityForNodeLabel(guide.getId()); this.guideNodesMap.put(guide, guideLineGraphNode); if (GraphGranularity.GUIDE.equals(localGranularity)) { this.graphRenderer.insertGraphNode(guideLineGraphNode); } for (Rule rule : guide.getDefinition().getRules().values()) { GraphNode ruleGraphNode = createRuleNode(guide, rule, lang); this.ruleNodesMap.put(rule, ruleGraphNode); if (!GraphGranularity.GUIDE.equals(localGranularity)) { this.graphRenderer.insertGraphNode(ruleGraphNode); } GraphNode graphNode = getRuleLineLinkGraphNode(guideLineGraphNode, ruleGraphNode, localGranularity); processRuleLines(guide, rule, graphNode); } }
private void bindExpressions(Guide guide) throws Exception { List<String> preConditions = guide.getDefinition().getPreConditions(); List<ExpressionItem> preConditionExpressions = parseExpressions(preConditions); guide.getDefinition().setPreConditionExpressions(preConditionExpressions); List<String> defaultActions = guide.getDefinition().getDefaultActions(); List<ExpressionItem> expressionItems = parseExpressions(defaultActions); List<AssignmentExpression> defaultActionExpressions = toAssignments(expressionItems); guide.getDefinition().setDefaultActionExpressions(defaultActionExpressions); GuideDefinition definition = guide.getDefinition(); if (definition.getArchetypeBindings() != null) { Map<String, ArchetypeBinding> bindings = definition .getArchetypeBindings(); for (ArchetypeBinding binding : bindings.values()) { List<ExpressionItem> predicateStatements = parseExpressions(binding.getPredicates()); binding.setPredicateStatements(predicateStatements); } if (definition.getRules() != null) { Collection<Rule> rules = definition.getRules().values(); for (Rule rule : rules) { List<ExpressionItem> whenStatements = parseExpressions(rule.getWhen()); rule.setWhenStatements(whenStatements); List<ExpressionItem> thenExpressionItems = parseExpressions(rule.getThen()); List<AssignmentExpression> thenStatements = toAssignments(thenExpressionItems); rule.setThenStatements(thenStatements); } } } }
Map<String, Rule> rulesMap = guideDefinition.getRules(); if (rulesMap != null) { List<Rule> rules = new ArrayList<>(rulesMap.values());