private boolean applyRequiredConcepts(RuleSet ruleSet, ExecutableRule<?> rule) throws RuleException { boolean requiredConceptsApplied = true; for (Map.Entry<String, Boolean> entry : rule.getRequiresConcepts().entrySet()) { List<Concept> requiredConcepts = ruleSet.getConceptBucket().match(entry.getKey()); for (Concept requiredConcept : requiredConcepts) { boolean conceptResult = applyConcept(ruleSet, requiredConcept, requiredConcept.getSeverity()); Boolean optional = entry.getValue(); if (optional == null) { optional = configuration.isRequiredConceptsAreOptionalByDefault(); } requiredConceptsApplied = requiredConceptsApplied && (conceptResult || optional); } } return requiredConceptsApplied; }
private void writeConcepts(Collection<Concept> concepts, JqassistantRules rules) { for (Concept concept : concepts) { ConceptType conceptType = new ConceptType(); conceptType.setId(concept.getId()); conceptType.setDescription(concept.getDescription()); conceptType.setSeverity(getSeverity(concept.getSeverity(), ruleConfiguration.getDefaultConceptSeverity())); writeExecutable(conceptType, concept); writeRequiredConcepts(concept, conceptType); rules.getConceptOrConstraintOrGroup().add(conceptType); } }
@Override public boolean visitConcept(Concept concept, Severity effectiveSeverity) throws RuleException { try { analyzerContext.getStore().beginTransaction(); ConceptDescriptor conceptDescriptor = analyzerContext.getStore().find(ConceptDescriptor.class, concept.getId()); Result.Status status; if (conceptDescriptor == null || configuration.isExecuteAppliedConcepts()) { analyzerContext.getLogger() .info("Applying concept '" + concept.getId() + "' with severity: '" + concept.getSeverity().getInfo(effectiveSeverity) + "'."); reportPlugin.beginConcept(concept); Result<Concept> result = execute(concept, effectiveSeverity); reportPlugin.setResult(result); status = result.getStatus(); if (conceptDescriptor == null) { conceptDescriptor = analyzerContext.getStore().create(ConceptDescriptor.class); conceptDescriptor.setId(concept.getId()); conceptDescriptor.setStatus(status); } reportPlugin.endConcept(); } else { status = conceptDescriptor.getStatus(); } analyzerContext.getStore().commitTransaction(); return Result.Status.SUCCESS.equals(status); } catch (XOException e) { analyzerContext.getStore().rollbackTransaction(); throw new RuleException("Cannot apply concept " + concept.getId(), e); } }