GDLDecisionModelBuilder(Collection<Guide> guides, ElementInstanceCollectionManager elementInstanceCollectionManager) { this.elementInstanceCollectionManager = elementInstanceCollectionManager; guideMap = new HashMap<>(); for (Guide guide : guides) { guideMap.put(guide.getId(), guide); } }
private GeneratedElementInstanceCollection processGuide(Guide guide) { GeneratedElementInstanceCollection elementInstanceCollection = new GeneratedElementInstanceCollection(elementInstanceCollectionManager); GuideUtil.fillElementInstanceCollection(guide, elementInstanceCollection); allGuidesMap.put(guide.getId(), guide); elementInstanceCollectionByIdGuideMap.put(guide.getId(), elementInstanceCollection); return elementInstanceCollection; }
public DecisionGraphPanel generateDecisionGraphPanel(Guide guide, String language) { Assert.notNull(guide, "Trying to generate decision graph panel on null guideline!"); DecisionGraphPanel decisionGraphPanel = null; try { decisionGraphPanel = new DecisionGraphPanel( Collections.singleton(guide), true, language, archetypeManager, archetypeReferencesManager, elementInstanceCollectionManager); } catch (GraphRenderingException ex) { log.error("Error rendering graph panel for guideline: " + guide.getId(), ex); } return decisionGraphPanel; } }
public static Collection<ArchetypeReference> getArchetypeReferences(Guide guide, DateTime dateTime, boolean resolvePredicates) { Collection<ArchetypeReference> archetypeReferences = new ArrayList<>(); Map<String, ArchetypeBinding> abs = guide.getDefinition().getArchetypeBindings(); if (abs != null) { for (ArchetypeBinding archetypeBinding : abs.values()) { ArchetypeReference ar = getGeneratedArchetypeReference(archetypeBinding, guide.getId(), guide, dateTime, resolvePredicates); archetypeReferences.add(ar); } } return archetypeReferences; }
private void processRuleLines(Guide guide, Rule rule, GraphNode graphNode) throws InternalErrorException { for (ExpressionItem expressionItem : guide.getDefinition().getPreConditionExpressions()) { addExpressionNodes(guide.getId(), expressionItem, graphNode); } for (ExpressionItem expressionItem : rule.getWhenStatements()) { addExpressionNodes(guide.getId(), expressionItem, graphNode); } for (ExpressionItem expressionItem : rule.getThenStatements()) { addExpressionNodes(guide.getId(), expressionItem, graphNode); } }
private GraphNode getRuleOrGuideNode(Guide guide, Rule rule) { if (GraphGranularity.GUIDE.equals(getGraphGranularity())) { GraphGranularity localGranularity = getGranularityForNodeLabel(guide.getId()); if (GraphGranularity.GUIDE.equals(localGranularity)) { return guideNodesMap.get(guide); } else { return ruleNodesMap.get(rule); } } else { return ruleNodesMap.get(rule); } }
private Map<RuleReference, ElementInstance> generateElementInstanceByRuleReferenceMap() { Map<RuleReference, ElementInstance> allElementInstancesByRuleReference = new HashMap<>(); for (Guide guide : guideMap.values()) { if (guide.getDefinition() != null) { for (ArchetypeBinding archetypeBinding : guide.getDefinition().getArchetypeBindings().values()) { ArchetypeReference archetypeReference = GuideUtil.getGeneratedArchetypeReference(archetypeBinding, guide.getId()); for (ElementInstance elementInstance : archetypeReference.getElementInstancesMap().values()) { if (elementInstance instanceof GeneratedElementInstance) { GeneratedElementInstance generatedElementInstance = (GeneratedElementInstance) elementInstance; for (RuleReference ruleReference : generatedElementInstance.getRuleReferences()) { allElementInstancesByRuleReference.put(ruleReference, elementInstance); } } } } } } return allElementInstancesByRuleReference; }
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 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 GraphNode createGuideNode(Guide guide) throws GraphRenderingException { Color color = new Color(153, 255, 153); return new GraphNodeBuilder() .setLabel(guide.getId()) .setFillColor(color) .setShape(GraphNode.Shape.HEXAGON) .setTextAlignment(GraphNode.Alignment.CENTER) .createGraphNode(); }
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 GraphNode createRuleNode(Guide guide, Rule rule, String lang) throws InternalErrorException { GraphNode.Alignment textAlignment; ReadableGuide readableGuide = readableGuideMap.get(guide); String guideIdLabel = guide.getId() + "<br/>"; String label = guideIdLabel + readableGuide.getTermDefinition().getTermText(rule.getId()); GraphGranularity localGranularity = getGranularityForNodeLabel(label); if (GraphGranularity.RULELINE.equals(localGranularity)) { ReadableRule readableRule = readableGuide.getReadableRules().get(rule.getId()); label = label + "<br/>" + getReadableRuleLines(lang, readableRule); textAlignment = GraphNode.Alignment.LEFT; } else { textAlignment = GraphNode.Alignment.CENTER; } Color color = new Color(185, 215, 255); return new GraphNodeBuilder() .setLabel(label) .setFillColor(color) .setShape(GraphNode.Shape.RECTANGLE) .setTextAlignment(textAlignment) .createGraphNode(); }
public ReadableGuide importGuide(Guide guide, String language) throws InternalErrorException { LoggerFactory.getLogger(GuideImporter.class).debug("Importing guide: " + guide.getId() + ", lang=" + language); termDefinition = getTermDefinition(guide, language); readableGuide = new ReadableGuide(termDefinition, archetypeManager, archetypeReferencesManager);