public static Set<String> getGTCodesInReads(Rule rule) { Set<String> gtCodes = new HashSet<>(); if (rule.getWhenStatements() != null) { for (ExpressionItem expressionItem : rule.getWhenStatements()) { addGTCodesInReads(expressionItem, gtCodes); } } if (rule.getThenStatements() != null) { for (ExpressionItem expressionItem : rule.getThenStatements()) { addGTCodesInReads(expressionItem, gtCodes); } } return gtCodes; }
@Override public int compare(Rule o1, Rule o2) { return o2.getPriority() - o1.getPriority(); }
rules.sort(new RulePriorityComparator()); for (Rule rule : rules) { ReadableRule rr = new ReadableRule(readableGuide.getTermDefinition(), rule.getId(), readableGuide); readableGuide.getReadableRules().put(rule.getId(), rr); if (rule.getWhenStatements() != null) { for (ExpressionItem expressionItem : rule.getWhenStatements()) { processExpressionItem(rr.getConditionRuleLines(), null, expressionItem); if (rule.getThenStatements() != null) { for (ExpressionItem expressionItem : rule.getThenStatements()) { processExpressionItem(rr.getActionRuleLines(), null, expressionItem);
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); } } } }
public static Set<String> getGTCodesInWrites(Rule rule) { Set<String> gtCodes = new HashSet<>(); if (rule.getThenStatements() != null) { for (ExpressionItem expressionItem : rule.getThenStatements()) { addGTCodesInWrites(expressionItem, gtCodes); } } return gtCodes; }
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<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 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(); }
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 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); } }