blob: 1455a6166fdf098ae12fd3c8cc8dd1b455849cda [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.sling.event.jobs;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.osgi.annotation.versioning.ProviderType;
/**
* This is a builder interface to build jobs and scheduled jobs.
* Instances of this class can be retrieved using {@link JobManager#createJob(String)}
*
* @since 1.3
*/
@ProviderType
public interface JobBuilder {
/**
* Set the optional configuration properties for the job.
* @param props The properties of the job. All values must be {@code java.io.Serializable}.
* @return The job builder to continue building.
*/
JobBuilder properties(final Map<String, Object> props);
/**
* Add the job.
* @return The job or <code>null</code>
* @see JobManager#addJob(String, Map)
*/
Job add();
/**
* Add the job.
* @param errors Optional list which will be filled with error messages.
* @return The job or <code>null</code>
* @see JobManager#addJob(String, Map)
*/
Job add(final List<String> errors);
/**
* Schedule the job
* @return A schedule builder to schedule the jobs
*/
ScheduleBuilder schedule();
/**
* This is a builder interface for creating schedule information
*/
public interface ScheduleBuilder {
/**
* Suspend this scheduling by default.
* Invoking this method several times has the same effect as calling it just once.
* @return The schedule builder to continue building.
*/
ScheduleBuilder suspend();
/**
* Schedule the job hourly at the given minute.
* If the minutes argument is less than 0 or higher than 59, the job can't be scheduled.
* @param minute Between 0 and 59.
* @return The schedule builder to continue building.
*/
ScheduleBuilder hourly(final int minute);
/**
* Schedule the job daily at the given time.
* If a value less than zero for hour or minute is specified or a value higher than 23 for hour or
* a value higher than 59 for minute than the job can't be scheduled.
* @param hour Hour of the day ranging from 0 to 23.
* @param minute Minute of the hour ranging from 0 to 59.
* @return The schedule builder to continue building.
*/
ScheduleBuilder daily(final int hour, final int minute);
/**
* Schedule the job weekly, the time needs to be specified in addition.
* If a value lower than 1 or higher than 7 is used for the day, the job can't be scheduled.
* If a value less than zero for hour or minute is specified or a value higher than 23 for hour or
* a value higher than 59 for minute than the job can't be scheduled.
* @param day Day of the week, 1:Sunday, 2:Monday, ... 7:Saturday.
* @param hour Hour of the day ranging from 0 to 23.
* @param minute Minute of the hour ranging from 0 to 59.
* @return The schedule builder to continue building.
*/
ScheduleBuilder weekly(final int day, final int hour, final int minute);
/**
* Schedule the job monthly, the time needs to be specified in addition.
* If a value lower than 1 or higher than 28 is used for the day, the job can't be scheduled.
* If a value less than zero for hour or minute is specified or a value higher than 23 for hour or
* a value higher than 59 for minute than the job can't be scheduled.
* @param day Day of the month from 1 to 28.
* @param hour Hour of the day ranging from 0 to 23.
* @param minute Minute of the hour ranging from 0 to 59.
* @return The schedule builder to continue building.
*/
ScheduleBuilder monthly(final int day, final int hour, final int minute);
/**
* Schedule the job yearly, the time needs to be specified in addition.
* If a value lower than 1 or higher than 12 is used for the month, the job can't be scheduled.
* If a value lower than 1 or higher than 28 is used for the day, the job can't be scheduled.
* If a value less than zero for hour or minute is specified or a value higher than 23 for hour or
* a value higher than 59 for minute than the job can't be scheduled.
* @param month Month of the year from 1 to 12.
* @param day Day of the month from 1 to 28.
* @param hour Hour of the day ranging from 0 to 23.
* @param minute Minute of the hour ranging from 0 to 59.
* @return The schedule builder to continue building.
*/
ScheduleBuilder yearly(final int month, final int day, final int hour, final int minute);
/**
* Schedule the job for a specific date.
* If no date or a a date in the past is provided, the job can't be scheduled.
* @param date The date
* @return The schedule builder to continue building.
*/
ScheduleBuilder at(final Date date);
/**
* Schedule the job for according to the cron expression.
* If no expression is specified, the job can't be scheduled.
* @param expression The cron expression
* @return The schedule builder to continue building.
*/
ScheduleBuilder cron(final String expression);
/**
* Finally add the job to the schedule
* @return Returns the info object if the job could be scheduled, <code>null</code>otherwise.
*/
ScheduledJobInfo add();
/**
* Finally add the job to the schedule
* @param errors Optional list which will be filled with error messages.
* @return Returns the info object if the job could be scheduled, <code>null</code>otherwise.
*/
ScheduledJobInfo add(final List<String> errors);
}
}