using System; using Exortech.NetReflector; namespace ThoughtWorks.CruiseControl.Core.Schedules { /// /// Mimics Java CruiseControl's PauseBuilder tag. /// [ReflectorType("pause")] public class PauseSchedule : ThoughtWorks.CruiseControl.Core.Schedules.IPauseSchedule { private string _day = ""; private DayOfWeek _dow = DayOfWeek.Sunday; private string _startTime = "0000"; private string _endTime = "2359"; private int _startHours = 0; private int _startMins = 0; private int _endHours = 0; private int _endMins = 0; #region PROPERTIES [ReflectorProperty("day", Required=false)] public string Day { get { return _day; } set { _day = value; try { _dow = this.GetDayOfWeek(_day); } catch { _day = ""; } } } [ReflectorProperty("startTime")] public string StartTime { get { return _startTime; } set { _startTime = value; _startHours = Int32.Parse(_startTime.Substring(0, 2)); _startMins = Int32.Parse(_startTime.Substring(2, 2)); } } [ReflectorProperty("endTime")] public string EndTime { get { return _endTime; } set { _endTime = value; _endHours = Int32.Parse(_endTime.Substring(0, 2)); _endMins = Int32.Parse(_endTime.Substring(2, 2)); } } #endregion public bool IsPaused(DateTime now) { bool paused = false; if (_day == "" || _dow == now.DayOfWeek) { DateTime dtStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, _startHours, _startMins, 0); DateTime dtEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, _endHours, _endMins, 0); if (now >= dtStart && now <= dtEnd) paused = true; } return paused; } private DayOfWeek GetDayOfWeek(string day) { DayOfWeek d = DayOfWeek.Sunday; day = day.Trim().ToLower(); switch (day) { case "sunday": d = DayOfWeek.Sunday; break; case "monday": d = DayOfWeek.Monday; break; case "tuesday": d = DayOfWeek.Tuesday; break; case "wednesday": d = DayOfWeek.Wednesday; break; case "thursday": d = DayOfWeek.Thursday; break; case "friday": d = DayOfWeek.Friday; break; case "saturday": d = DayOfWeek.Saturday; break; default: throw new Exception("Invalid day of week!"); break; } return d; } } }