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); } }
public static ConceptBuilder builder() { return new ConceptBuilder(new Concept()); } }
/** * Prints all valid rules. * * @param visitor * The visitor. */ private void printValidRules(CollectRulesVisitor visitor) { logger.info("Groups [" + visitor.getGroups().size() + "]"); for (Group group : visitor.getGroups()) { logger.info(LOG_LINE_PREFIX + group.getId() + "\""); } logger.info("Constraints [" + visitor.getConstraints().size() + "]"); for (Constraint constraint : visitor.getConstraints().keySet()) { logger.info(LOG_LINE_PREFIX + constraint.getId() + "\" - " + constraint.getDescription()); } logger.info("Concepts [" + visitor.getConcepts().size() + "]"); for (Concept concept : visitor.getConcepts().keySet()) { logger.info(LOG_LINE_PREFIX + concept.getId() + "\" - " + concept.getDescription()); } }
@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); } }
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; }
this.processConceptOrConstraint(conceptSpec, context, concept -> context.getBuilder().addConcept(concept), Concept.builder());
for (Concept concept : ruleSet.getConceptBucket().getAll()) { JSONObject conceptObject = new JSONObject(); conceptObject.put(JSON_OBJECT_KEY_ID, concept.getId()); conceptObject.put(JSON_OBJECT_KEY_DESCRIPTION, concept.getDescription()); conceptObject.put(JSON_OBJECT_KEY_CYPHER, getCypher(concept)); concepts.put(conceptObject);
private void extractExecutableRule(RuleSource ruleSource, AbstractBlock executableRuleBlock, RuleSetBuilder builder) throws RuleException { Attributes attributes = new Attributes(executableRuleBlock.getAttributes()); String id = executableRuleBlock.id(); if (id == null) { throw new RuleException("An id attribute is required for the rule '" + executableRuleBlock + "' (i.e. '[[rule:id]]' is required."); } String description = attributes.getString(TITLE, ""); if (description == null) { LOGGER.info("Description of rule is missing: Using empty text for description (source='{}', id='{}').", ruleSource.getId(), id); } Map<String, Boolean> required = getRequiresConcepts(ruleSource, id, attributes); Map<String, Parameter> parameters = getParameters(attributes.getString(REQUIRES_PARAMETERS)); Executable<?> executable = getExecutable(executableRuleBlock, attributes); if (executable != null) { Verification verification = getVerification(attributes); Report report = getReport(executableRuleBlock); if (CONCEPT.equals(executableRuleBlock.getRole())) { Severity severity = getSeverity(attributes, getRuleConfiguration().getDefaultConceptSeverity()); Concept concept = Concept.builder().id(id).description(description).severity(severity).executable(executable).requiresConcepts(required) .parameters(parameters).verification(verification).report(report).ruleSource(ruleSource).build(); builder.addConcept(concept); } else if (CONSTRAINT.equals(executableRuleBlock.getRole())) { Severity severity = getSeverity(attributes, getRuleConfiguration().getDefaultConstraintSeverity()); Constraint constraint = Constraint.builder().id(id).description(description).severity(severity).executable(executable) .requiresConcepts(required).parameters(parameters).verification(verification).report(report).ruleSource(ruleSource).build(); builder.addConstraint(constraint); } } }
private Concept createConcept(String id, RuleSource ruleSource, ConceptType referenceableType) throws RuleException { String description = referenceableType.getDescription(); Executable executable = createExecutable(referenceableType); Map<String, Parameter> parameters = getRequiredParameters(referenceableType.getRequiresParameter()); SeverityEnumType severityType = referenceableType.getSeverity(); Severity severity = getSeverity(severityType, getRuleConfiguration().getDefaultConceptSeverity()); List<ReferenceType> requiresConcept = referenceableType.getRequiresConcept(); Map<String, Boolean> requiresConcepts = getRequiresConcepts(requiresConcept); String deprecated = referenceableType.getDeprecated(); Verification verification = getVerification(referenceableType.getVerify()); Report report = getReport(referenceableType.getReport()); return Concept.builder().id(id).description(description).ruleSource(ruleSource).severity(severity).deprecation(deprecated).executable(executable) .parameters(parameters).requiresConcepts(requiresConcepts).verification(verification).report(report).build(); }