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 static void addGtCodesForRules(Guide guide, Set<String> gtCodes) { for (Rule rule : guide.getDefinition().getRules().values()) { gtCodes.addAll(getGTCodesInReads(rule)); } }
public static Set<String> getPreconditionGTCodesInReads(Guide guide) { Set<String> gtCodes = new HashSet<>(); List<ExpressionItem> preConditionExpressions = guide.getDefinition().getPreConditionExpressions(); if (preConditionExpressions != null) { for (ExpressionItem expressionItem : preConditionExpressions) { addGTCodesInReads(expressionItem, gtCodes); } } return gtCodes; }
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); } } } }
GuideDefinition guideDefinition = guide.getDefinition(); if (guideDefinition != null) { Map<String, ArchetypeBinding> archetypeBindings = guideDefinition.getArchetypeBindings(); if (archetypeBindings != null) { for (ArchetypeBinding archetypeBinding : archetypeBindings.values()) { List<ExpressionItem> preConditionExpressions = guideDefinition.getPreConditionExpressions(); if (preConditionExpressions != null) { for (ExpressionItem expressionItem : preConditionExpressions) { List<AssignmentExpression> defaultActionExpressions = guideDefinition.getDefaultActionExpressions(); if (defaultActionExpressions != null) { for (ExpressionItem expressionItem : defaultActionExpressions) { Map<String, Rule> rulesMap = guideDefinition.getRules(); if (rulesMap != null) { List<Rule> rules = new ArrayList<>(rulesMap.values());
private static Collection<String> getDefaultActionGTCodesInReads(Guide guide) { Set<String> gtCodes = new HashSet<>(); List<AssignmentExpression> defaultActionExpressions = guide.getDefinition().getDefaultActionExpressions(); if (defaultActionExpressions != null) { for (ExpressionItem expressionItem : defaultActionExpressions) { addGTCodesInReads(expressionItem, gtCodes); } } return gtCodes; }
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 Map<String, String> generateGtCodeToArchetypeMap(Guide guide) { Map<String, String> gtCodeToArchetypeKey = new HashMap<>(); for (ArchetypeBinding archetypeBinding : guide.getDefinition().getArchetypeBindings().values()) { String archetypeKey = getArchetypeKey(archetypeBinding); for (ElementBinding elementBinding : archetypeBinding.getElements().values()) { gtCodeToArchetypeKey.put(elementBinding.getId(), archetypeKey); } } return gtCodeToArchetypeKey; }
private Collection<BinaryExpression> getSimpleConditionsFromExpressionItems(Guide guide, Rule rule) { Collection<BinaryExpression> simpleConditionsExpressionItems = new ArrayList<>(); for (ExpressionItem expressionItem : guide.getDefinition().getPreConditionExpressions()) { addSimpleConditionsFromExpressionItems(expressionItem, simpleConditionsExpressionItems); } for (ExpressionItem expressionItem : rule.getWhenStatements()) { addSimpleConditionsFromExpressionItems(expressionItem, simpleConditionsExpressionItems); } for (ExpressionItem expressionItem : rule.getThenStatements()) { addSimpleConditionsFromExpressionItems(expressionItem, simpleConditionsExpressionItems); } return simpleConditionsExpressionItems; }
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 Map<String, String> getGtCodeElementIdMap(Guide guide, String domainId) { Map<String, String> gtCodeElementIdMap = new HashMap<>(); if (guide.getDefinition() == null || guide.getDefinition().getArchetypeBindings() == null) { return gtCodeElementIdMap; } for (ArchetypeBinding archetypeBinding : guide.getDefinition().getArchetypeBindings().values()) { if (domainId == null || archetypeBinding.getDomain() == null || domainId.equals(archetypeBinding.getDomain())) { for (ElementBinding elementBinding : archetypeBinding.getElements().values()) { gtCodeElementIdMap.put(elementBinding.getId(), archetypeBinding.getArchetypeId() + elementBinding.getPath()); } } } return gtCodeElementIdMap; } }
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 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 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; }
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; }
public void generateGTCodeElementMap(Guide guide) throws InternalErrorException { gtCodeElementMap = new HashMap<>(); ArchetypeElementInstantiationRuleLine dummyAEIRL = new ArchetypeElementInstantiationRuleLine(new ArchetypeInstantiationRuleLine()); dummyAEIRL.setReadableGuide(readableGuide); dummyAEIRL.setGTCode("currentDateTime"); gtCodeElementMap.put("currentDateTime", dummyAEIRL); GuideDefinition guideDefinition = guide.getDefinition(); Map<String, ArchetypeBinding> ab = guideDefinition.getArchetypeBindings(); for (ArchetypeBinding archetypeBinding : ab.values()) { generateGtCodeMapForArchetypeBinding(archetypeBinding); } generateGTCodeMapForRules(guide); }
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 generateArchetypeNodes(Guide guide) { for (ArchetypeBinding archetypeBinding : guide.getDefinition().getArchetypeBindings().values()) { String archetypeKey = getArchetypeKey(archetypeBinding); String label = archetypeBinding.getDomain() + " | " + archetypeBinding.getArchetypeId(); Color archetypeBindingColor = getArchetypeNodeColor(archetypeBinding); GraphNode archetypeNode = new GraphNodeBuilder() .setLabel(label) .setShape(GraphNode.Shape.RECTANGLE) .setFillColor(archetypeBindingColor) .createGraphNode(); getArchetypeNodesMap().put(archetypeKey, archetypeNode); } }
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); } }