in src/main/java/org/apache/sling/event/impl/jobs/scheduling/ScheduledJobHandler.java [232:292]
private Map<String, Object> writeScheduledJob(final String jobTopic,
final Map<String, Object> jobProperties,
final String scheduleName,
final boolean suspend,
final List<ScheduleInfoImpl> scheduleInfos)
throws PersistenceException {
final ResourceResolver resolver = this.configuration.createResourceResolver();
try {
// create properties
final Map<String, Object> properties = new HashMap<String, Object>();
if ( jobProperties != null ) {
for(final Map.Entry<String, Object> entry : jobProperties.entrySet() ) {
final String propName = entry.getKey();
if ( !ResourceHelper.ignoreProperty(propName) ) {
properties.put(propName, entry.getValue());
}
}
}
properties.put(ResourceHelper.PROPERTY_JOB_TOPIC, jobTopic);
properties.put(Job.PROPERTY_JOB_CREATED, Calendar.getInstance());
properties.put(Job.PROPERTY_JOB_CREATED_INSTANCE, Environment.APPLICATION_ID);
// put scheduler name and scheduler info
properties.put(ResourceHelper.PROPERTY_SCHEDULE_NAME, scheduleName);
final String[] infoArray = new String[scheduleInfos.size()];
int index = 0;
for(final ScheduleInfoImpl info : scheduleInfos) {
infoArray[index] = info.getSerializedString();
index++;
}
properties.put(ResourceHelper.PROPERTY_SCHEDULE_INFO, infoArray);
if ( suspend ) {
properties.put(ResourceHelper.PROPERTY_SCHEDULE_SUSPENDED, Boolean.TRUE);
}
// create path and resource
properties.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, ResourceHelper.RESOURCE_TYPE_SCHEDULED_JOB);
final String path = this.configuration.getScheduledJobsPath(true) + ResourceHelper.filterName(scheduleName);
// update existing resource
final Resource existingInfo = resolver.getResource(path);
if ( existingInfo != null ) {
resolver.delete(existingInfo);
logger.debug("Updating scheduled job {} at {}", properties, path);
} else {
logger.debug("Storing new scheduled job {} at {}", properties, path);
}
ResourceHelper.createAndCommitResource(resolver,
path,
properties);
// put back real schedule infos
properties.put(ResourceHelper.PROPERTY_SCHEDULE_INFO, scheduleInfos);
return properties;
} finally {
resolver.close();
}
}