/** * The contents of this file are subject to the OpenMRS Public License * Version 1.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://license.openmrs.org * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations * under the License. * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ package org.openmrs.scheduler; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; /** * Describes when to start a task and how often it should be executed. */ public class Schedule { /** * Schedule identifier */ private Integer id; /** * Name of the schedule */ private String name; /** * Description of the schedule */ private String description; /** * Date and time to start the task */ private Date startTime; /** * Interval used to determine the next execution time */ private long repeatInterval; /** * Flag that indicates whether to begin as soon as the scheduler starts. */ private boolean startOnStartup; /** * The date format pattern used to set the start date when start date is passed in as a string */ private String dateFormat; /** * Default TODO Move to constants or properties */ public final String DEFAULT_DATE_FORMAT = "MM-dd-yyyy hh:mm:ss"; /** * Date formatter used to format a date specified by a string */ private transient DateFormat dateFormatter; /** * Constants */ public static final int MILLISECONDS_PER_SECOND = 1000; public static final int SECONDS_PER_MINUTE = 60; public static final int MINUTES_PER_HOUR = 60; public static final int HOURS_PER_DAY = 24; public static final int DAYS_PER_WEEK = 7; //public static DEFAULT_DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss"); public static final int DAILY = MILLISECONDS_PER_SECOND * SECONDS_PER_MINUTE * MINUTES_PER_HOUR; public static final int WEEKLY = DAILY * DAYS_PER_WEEK; //public static final int MONTHLY; //public static final int ANNUALLY; /** * Public no-arg constructor. */ public Schedule() { this(null, null, new Date(), 0); } /** * Public constructor * * @param startTime Date for when to start the task (does not need to be in the future if the * interval is specified). * @param repeatInterval interval time in seconds to wait between executing task (<= 0 indicates * that it should only be run once) */ public Schedule(Date startTime, long repeatInterval) { this(null, null, startTime, repeatInterval); } /** * Public constructor * * @param name * @param description * @param startTime Date for when to start the task (does not need to be in the future if the * interval is specified). * @param repeatInterval interval time in seconds to wait between executing task (<= 0 indicates * that it should only be run once) */ public Schedule(String name, String description, Date startTime, long repeatInterval) { this.name = name; this.description = description; this.startTime = startTime; this.repeatInterval = repeatInterval; this.dateFormatter = new SimpleDateFormat(DEFAULT_DATE_FORMAT); } /** * Gets the identifier of the schedule. * * @return the identifier of the schedule */ public Integer getId() { return this.id; } /** * Sets the identifier of the schedule. * * @param id the identifier of the schedule */ public void setId(Integer id) { this.id = id; } /** * Gets the name of the schedule. * * @return the name of the schedule */ public String getName() { return this.name; } /** * Sets the name of the schedule. * * @param name the name of the schedule */ public void setName(String name) { this.name = name; } /** * Gets the description of the schedule. * * @return the description of the schedule */ public String getDescription() { return this.description; } /** * Sets the description of the schedule. * * @param description the description of the schedule */ public void setDescription(String description) { this.description = description; } /** * Get the start time for when the task should be executed. * * @return long start time */ public Date getStartTime() { return startTime; } /** * Set the start time for when the task should be executed. For instance, use "new Date()", if * you want it to start now. * * @param startTime start time for the task */ public void setStartTime(Date startTime) { this.startTime = startTime; } /** * Set the start time for when the task should be executed. For instance, use "new Date()", if * you want it to start now. * * @param startTime start time for the task */ /* public void setStartTime(String startTime) { try { this.startTime = this.dateFormatter.parse(startTime); } catch (Exception e) { //If there's an error, we'll just set the start time to now. // TODO: This might not be the desired behavior, so I'll have to come back to it. this.startTime = new Date(); } } */ /** * Gets the number of seconds until task is executed again. * * @return long number of seconds. */ public long getRepeatInterval() { return repeatInterval; } /** * Sets the number of seconds until task is executed again. * * @param repeatInterval */ public void setRepeatInterval(long repeatInterval) { this.repeatInterval = repeatInterval; } /** * Get the date format used to set the start time. */ public String getDateFormat() { return this.dateFormat; } /** * Sets the date format used to set the start time. */ public void setDateFormat(String dateFormat) { this.dateFormat = dateFormat; this.dateFormatter = new SimpleDateFormat(dateFormat); } /** * Gets the flag that indicates whether we start on scheduler startup. */ public Boolean getStartOnStartup() { return this.startOnStartup; } /** * Sets the flag that indicates whether we start on scheduler startup. */ public void setStartOnStartup(Boolean startOnStartup) { this.startOnStartup = startOnStartup; } }