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);
}
}
Aggregations