content: /**
   * Licensed 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.aurora.scheduler.cron;
  
  import java.util.Map;
  
  import org.apache.aurora.scheduler.storage.entities.IJobKey;
  
  /**
   * Manages the persistence and scheduling of jobs that should be run periodically on a cron
   * schedule.
   */
  public interface CronJobManager {
    /**
     * Triggers execution of a job.
     *
     * @param jobKey Key of the job to start.
     * @throws CronException If the job could not be started with the cron system.
     */
    void startJobNow(IJobKey jobKey) throws CronException;
  
    /**
     * Persist a new cron job to storage and schedule it for future execution.
     *
     * @param config Cron job configuration to update to.
     * @throws CronException If a job with the same key does not exist or the job could not be
     * scheduled.
     */
    void updateJob(SanitizedCronJob config) throws CronException;
  
    /**
     * Persist a cron job to storage and schedule it for future execution.
     *
     * @param config New cron job configuration.
     * @throws CronException If a job with the same key exists or the job could not be scheduled.
     */
    void createJob(SanitizedCronJob config) throws CronException;
  
    /**
     * Remove a job and deschedule it.
     *
     * @param jobKey Key of the job to delete.
     * @return true if a job was removed.
     */
    boolean deleteJob(IJobKey jobKey);
  
    /**
     * A list of the currently scheduled jobs and when they will run according to the underlying
     * execution engine.
     *
     * @return A map from job to the cron schedule in use for that job.
     */
    Map<IJobKey, CrontabEntry> getScheduledJobs();
  }
  