/// <summary> /// Gets a list of alarm occurrences for the given recurring component, <paramref name="rc"/> /// that occur between <paramref name="fromDate"/> and <paramref name="toDate"/>. /// </summary> public virtual IList <AlarmOccurrence> GetOccurrences(IRecurringComponent rc, IDateTime fromDate, IDateTime toDate) { Occurrences.Clear(); if (Trigger != null) { // If the trigger is relative, it can recur right along with // the recurring items, otherwise, it happens once and // only once (at a precise time). if (Trigger.IsRelative) { // Ensure that "FromDate" has already been set if (fromDate == null) { fromDate = rc.Start.Copy <IDateTime>(); } var d = default(TimeSpan); foreach (var o in rc.GetOccurrences(fromDate, toDate)) { var dt = o.Period.StartTime; if (Trigger.Related == TriggerRelation.End) { if (o.Period.EndTime != null) { dt = o.Period.EndTime; if (d == default(TimeSpan)) { d = o.Period.Duration; } } // Use the "last-found" duration as a reference point else if (d != default(TimeSpan)) { dt = o.Period.StartTime.Add(d); } else { throw new ArgumentException( "Alarm trigger is relative to the END of the occurrence; however, the occurence has no discernible end."); } } Occurrences.Add(new AlarmOccurrence(this, dt.Add(Trigger.Duration.Value), rc)); } } else { var dt = Trigger.DateTime.Copy <IDateTime>(); dt.AssociatedObject = this; Occurrences.Add(new AlarmOccurrence(this, dt, rc)); } // If a REPEAT and DURATION value were specified, // then handle those repetitions here. AddRepeatedItems(); } return(Occurrences); }
/// <summary> /// Gets a list of alarm occurrences for the given recurring component, <paramref name="rc"/> /// that occur between <paramref name="FromDate"/> and <paramref name="ToDate"/>. /// </summary> virtual public IList<AlarmOccurrence> GetOccurrences(IRecurringComponent rc, IDateTime FromDate, IDateTime ToDate) { Occurrences.Clear(); if (Trigger != null) { // If the trigger is relative, it can recur right along with // the recurring items, otherwise, it happens once and // only once (at a precise time). if (Trigger.IsRelative) { // Ensure that "FromDate" has already been set if (FromDate == null) FromDate = rc.Start.Copy<IDateTime>(); TimeSpan d = default(TimeSpan); foreach (Occurrence o in rc.GetOccurrences(FromDate, ToDate)) { IDateTime dt = o.Period.StartTime; if (Trigger.Related == TriggerRelation.End) { if (o.Period.EndTime != null) { dt = o.Period.EndTime; if (d == default(TimeSpan)) d = o.Period.Duration; } // Use the "last-found" duration as a reference point else if (d != default(TimeSpan)) dt = o.Period.StartTime.Add(d); else throw new ArgumentException("Alarm trigger is relative to the END of the occurrence; however, the occurence has no discernible end."); } Occurrences.Add(new AlarmOccurrence(this, dt.Add(Trigger.Duration.Value), rc)); } } else { IDateTime dt = Trigger.DateTime.Copy<IDateTime>(); dt.AssociatedObject = this; Occurrences.Add(new AlarmOccurrence(this, dt, rc)); } // If a REPEAT and DURATION value were specified, // then handle those repetitions here. AddRepeatedItems(); } return Occurrences; }