in mail-archive/stats/src/main/java/org/apache/sling/mailarchive/stats/impl/MailStatsProcessorImpl.java [176:210]
public void flush() {
try {
ResourceResolver resolver = null;
try {
resolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
for(DataRecord r : data.values()) {
// Each org gets its own resource under our root
log.info("Storing {} at path {}", r, r.getPath());
ResourceUtil.getOrCreateResource(resolver, ROOT_PATH, DEFAULT_RESOURCE_TYPE, DEFAULT_RESOURCE_TYPE, false);
ResourceUtil.getOrCreateResource(resolver, r.getOrgPath(), DESTINATION_RESOURCE_TYPE, DEFAULT_RESOURCE_TYPE, false);
// Properties are the message counts per source for this destination
final Map<String, Object> data = new HashMap<String, Object>();
for(Map.Entry<String, Integer> e : r.getSourceCounts().entrySet()) {
data.put(e.getKey(), e.getValue());
}
data.put(PERIOD_PROP, r.timestampPath);
data.put("sling:resourceType", DATA_RESOURCE_TYPE);
// TODO for now this overwrites existing values,
// need to combine existing and new
ResourceUtil.getOrCreateResource(resolver, r.getPath(), data, DEFAULT_RESOURCE_TYPE, false);
}
data.clear();
} finally {
if(resolver != null) {
resolver.commit();
resolver.close();
}
}
} catch(Exception e) {
log.warn("Exception in flush()", e);
}
}