Search in sources :

Example 1 with AuditPath

use of org.alfresco.repo.audit.model._3.AuditPath in project alfresco-repository by Alfresco.

the class AuditApplication method buildAuditPaths.

/**
 * Recursive method to build generator and extractor mappings
 */
private void buildAuditPaths(AuditPath auditPath, String currentPath, Set<String> existingPaths, Map<String, DataGenerator> upperGeneratorsByPath) {
    // Clone the upper maps to prevent pollution
    upperGeneratorsByPath = new HashMap<String, DataGenerator>(upperGeneratorsByPath);
    // Append the current audit path to the current path
    if (currentPath == null) {
        currentPath = AuditApplication.buildPath(auditPath.getKey());
    } else {
        currentPath = AuditApplication.buildPath(currentPath, auditPath.getKey());
    }
    // Make sure we have not processed it before
    if (!existingPaths.add(currentPath)) {
        generateException(currentPath, "The audit path already exists.");
    }
    // Get the data extractors declared for this key
    for (RecordValue element : auditPath.getRecordValue()) {
        String key = element.getKey();
        String extractorPath = AuditApplication.buildPath(currentPath, key);
        if (!existingPaths.add(extractorPath)) {
            generateException(extractorPath, "The audit path already exists.");
        }
        String extractorName = element.getDataExtractor();
        DataExtractor extractor = dataExtractorsByName.get(extractorName);
        if (extractor == null) {
            generateException(extractorPath, "No data extractor exists for name: " + extractorName);
        }
        // The extractor may pull data from somewhere else
        String sourcePath = element.getDataSource();
        if (sourcePath == null) {
            sourcePath = currentPath;
        }
        // The extractor may be triggered by data from elsewhere
        String dataTrigger = element.getDataTrigger();
        if (dataTrigger == null) {
            dataTrigger = currentPath;
        }
        // Store the extractor definition
        DataExtractorDefinition extractorDef = new DataExtractorDefinition(dataTrigger, sourcePath, extractorPath, extractor);
        dataExtractors.add(extractorDef);
    }
    // Get the data generators declared for this key
    for (GenerateValue element : auditPath.getGenerateValue()) {
        String key = element.getKey();
        String generatorPath = AuditApplication.buildPath(currentPath, key);
        if (!existingPaths.add(generatorPath)) {
            generateException(generatorPath, "The audit path already exists.");
        }
        String generatorName = element.getDataGenerator();
        DataGenerator generator = dataGeneratorsByName.get(generatorName);
        if (generator == null) {
            generateException(generatorPath, "No data generator exists for name: " + generatorName);
        }
        // All generators that occur earlier in the path will also be applicable here
        upperGeneratorsByPath.put(generatorPath, generator);
    }
    // All the generators apply to the current path
    dataGenerators.put(currentPath, upperGeneratorsByPath);
    // Find all sub audit paths and recurse
    for (AuditPath element : auditPath.getAuditPath()) {
        buildAuditPaths(element, currentPath, existingPaths, upperGeneratorsByPath);
    }
}
Also used : GenerateValue(org.alfresco.repo.audit.model._3.GenerateValue) DataGenerator(org.alfresco.repo.audit.generator.DataGenerator) RecordValue(org.alfresco.repo.audit.model._3.RecordValue) DataExtractor(org.alfresco.repo.audit.extractor.DataExtractor) AuditPath(org.alfresco.repo.audit.model._3.AuditPath)

Aggregations

DataExtractor (org.alfresco.repo.audit.extractor.DataExtractor)1 DataGenerator (org.alfresco.repo.audit.generator.DataGenerator)1 AuditPath (org.alfresco.repo.audit.model._3.AuditPath)1 GenerateValue (org.alfresco.repo.audit.model._3.GenerateValue)1 RecordValue (org.alfresco.repo.audit.model._3.RecordValue)1