示例#1
0
        public static HashSet <Occurrence> GetOccurrences(IRecurrable recurrable, IDateTime periodStart, IDateTime periodEnd, bool includeReferenceDateInResults)
        {
            var evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator;

            if (evaluator == null || recurrable.Start == null)
            {
                return(new HashSet <Occurrence>());
            }

            // Ensure the start time is associated with the object being queried
            var start = recurrable.Start;

            start.AssociatedObject = recurrable as ICalendarObject;

            // Change the time zone of periodStart/periodEnd as needed
            // so they can be used during the evaluation process.

            periodStart.TzId = start.TzId;
            periodEnd.TzId   = start.TzId;

            var periods = evaluator.Evaluate(start, DateUtil.GetSimpleDateTimeData(periodStart), DateUtil.GetSimpleDateTimeData(periodEnd),
                                             includeReferenceDateInResults);

            var otherOccurrences = from p in periods
                                   let endTime = p.EndTime ?? p.StartTime
                                                 where endTime.GreaterThan(periodStart) && p.StartTime.LessThanOrEqual(periodEnd)
                                                 select new Occurrence(recurrable, p);

            var occurrences = new HashSet <Occurrence>(otherOccurrences);

            return(occurrences);
        }
示例#2
0
        static public IList <Occurrence> GetOccurrences(IRecurrable recurrable, IDateTime periodStart, IDateTime periodEnd, bool includeReferenceDateInResults)
        {
            List <Occurrence> occurrences = new List <Occurrence>();

            IEvaluator evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator;

            if (evaluator != null)
            {
                // Change the time zone of periodStart/periodEnd as needed
                // so they can be used during the evaluation process.
                periodStart = DateUtil.MatchTimeZone(recurrable.Start, periodStart);
                periodEnd   = DateUtil.MatchTimeZone(recurrable.Start, periodEnd);

                IList <IPeriod> periods = evaluator.Evaluate(
                    recurrable.Start,
                    DateUtil.GetSimpleDateTimeData(periodStart),
                    DateUtil.GetSimpleDateTimeData(periodEnd),
                    includeReferenceDateInResults);

                foreach (IPeriod p in periods)
                {
                    // Filter the resulting periods to only contain those between
                    // startTime and endTime.
                    if (p.StartTime.GreaterThanOrEqual(periodStart) &&
                        p.StartTime.LessThanOrEqual(periodEnd))
                    {
                        occurrences.Add(new Occurrence(recurrable, p));
                    }
                }

                occurrences.Sort();
            }
            return(occurrences);
        }
示例#3
0
        /// <summary>
        ///     Gets the occurrences.
        /// </summary>
        /// <param name="recurrable">The recurrable.</param>
        /// <param name="periodStart">The period start.</param>
        /// <param name="periodEnd">The period end.</param>
        /// <param name="includeReferenceDateInResults">
        ///     if set to <c>true</c> [include reference date in results].
        /// </param>
        /// <returns></returns>
        public static IList <Occurrence> GetOccurrences(IRecurrable recurrable, IDateTime periodStart, IDateTime periodEnd, bool includeReferenceDateInResults)
        {
            var occurrences = new List <Occurrence>( );

            var evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator;

            if (evaluator != null)
            {
                // Ensure the start time is associated with the object being queried
                var start = recurrable.Start.Copy <IDateTime>( );
                start.AssociatedObject = recurrable as ICalendarObject;

                // Change the time zone of periodStart/periodEnd as needed
                // so they can be used during the evaluation process.
                periodStart = DateUtil.MatchTimeZone(start, periodStart);
                periodEnd   = DateUtil.MatchTimeZone(start, periodEnd);

                ISet <IPeriod> periods = evaluator.Evaluate(
                    start,
                    DateUtil.GetSimpleDateTimeData(periodStart),
                    DateUtil.GetSimpleDateTimeData(periodEnd),
                    includeReferenceDateInResults);

                // Filter the resulting periods to only contain those
                // that occur sometime between startTime and endTime.
                // NOTE: fixes bug #3007244 - GetOccurences not returning long spanning all-day events
                occurrences.AddRange(from p in periods
                                     let endTime = p.EndTime ?? p.StartTime
                                                   where endTime.GreaterThan(periodStart) && p.StartTime.LessThanOrEqual(periodEnd)
                                                   select new Occurrence(recurrable, p));

                occurrences.Sort( );
            }
            return(occurrences);
        }
示例#4
0
        static public IList<Occurrence> GetOccurrences(IRecurrable recurrable, IDateTime periodStart, IDateTime periodEnd, bool includeReferenceDateInResults)
        {
            List<Occurrence> occurrences = new List<Occurrence>();

            IEvaluator evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator;
            if (evaluator != null)
            {
                // Change the time zone of periodStart/periodEnd as needed 
                // so they can be used during the evaluation process.
                periodStart = DateUtil.MatchTimeZone(recurrable.Start, periodStart);
                periodEnd = DateUtil.MatchTimeZone(recurrable.Start, periodEnd);

                IList<IPeriod> periods = evaluator.Evaluate(
                    recurrable.Start,
                    DateUtil.GetSimpleDateTimeData(periodStart),
                    DateUtil.GetSimpleDateTimeData(periodEnd),
                    includeReferenceDateInResults);

                foreach (IPeriod p in periods)
                {
                    // Filter the resulting periods to only contain those 
                    // that occur sometime between startTime and endTime.
                    // NOTE: fixes bug #3007244 - GetOccurences not returning long spanning all-day events 
                    IDateTime endTime = p.EndTime ?? p.StartTime;
                    if (endTime.GreaterThan(periodStart) && p.StartTime.LessThanOrEqual(periodEnd))
                        occurrences.Add(new Occurrence(recurrable, p));
                }

                occurrences.Sort();
            }
            return occurrences;
        }
示例#5
0
        static public void ClearEvaluation(IRecurrable recurrable)
        {
            IEvaluator evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator;

            if (evaluator != null)
            {
                evaluator.Clear();
            }
        }
示例#6
0
 static public void ClearEvaluation(IRecurrable recurrable)
 {
     IEvaluator evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator;
     if (evaluator != null)
         evaluator.Clear();
 }
示例#7
0
        public static void ClearEvaluation(IRecurrable recurrable)
        {
            var evaluator = recurrable.GetService(typeof(IEvaluator)) as IEvaluator;

            evaluator?.Clear();
        }