in src/main/java/org/apache/sling/clam/job/internal/JcrPropertyScanJobConsumer.java [117:151]
public JobResult process(final Job job) {
logger.debug("processing property scan job: {}", job);
try (ResourceResolver resourceResolver = resourceResolverFactory.getServiceResourceResolver(null)) {
final String path = job.getProperty(ClamUtil.PROPERTY_PATH, String.class);
final String userId = job.getProperty(ClamUtil.USER_ID, String.class);
final Session session = resourceResolver.adaptTo(Session.class);
assert session != null;
final Property property = session.getProperty(path);
final int propertyType = property.getType();
if (property.isMultiple()) { // multiple property values
final int index = job.getProperty(ClamUtil.VALUE_INDEX, Integer.class);
final Value[] values = property.getValues();
final Value value = values[index];
try (InputStream inputStream = getInputStream(value)) {
if (logger.isDebugEnabled()) {
logger.debug("scanning property of type {} at {} [{}]", PropertyType.nameFromValue(propertyType), path, index);
}
final ScanResult scanResult = clamService.scan(inputStream);
invokeScanResultHandlers(scanResult, path, index, propertyType, userId);
}
} else { // single property value
try (InputStream inputStream = getInputStream(property.getValue())) {
if (logger.isDebugEnabled()) {
logger.debug("scanning property of type {} at {}", PropertyType.nameFromValue(propertyType), path);
}
final ScanResult scanResult = clamService.scan(inputStream);
invokeScanResultHandlers(scanResult, path, null, propertyType, userId);
}
}
return JobResult.OK;
} catch (Exception e) {
logger.error(e.getMessage(), e);
return JobResult.FAILED;
}
}