예제 #1
0
        public void GOOGLE1()
        {
            TZID      tzid = "Europe/Berlin";
            iCalendar iCal = iCalendar.LoadFromFile(@"Calendars/General/GoogleCalendar.ics");
            Event     evt  = iCal.Events["*****@*****.**"];

            Assert.IsNotNull(evt);

            Date_Time         dtStart     = new Date_Time(2006, 12, 18, tzid, iCal);
            Date_Time         dtEnd       = new Date_Time(2006, 12, 23, tzid, iCal);
            List <Occurrence> occurrences = iCal.GetOccurrences(dtStart, dtEnd);

            Date_Time[] DateTimes = new Date_Time[]
            {
                new Date_Time(2006, 12, 18, 7, 0, 0, tzid, iCal),
                new Date_Time(2006, 12, 19, 7, 0, 0, tzid, iCal),
                new Date_Time(2006, 12, 20, 7, 0, 0, tzid, iCal),
                new Date_Time(2006, 12, 21, 7, 0, 0, tzid, iCal),
                new Date_Time(2006, 12, 22, 7, 0, 0, tzid, iCal)
            };

            for (int i = 0; i < DateTimes.Length; i++)
            {
                Assert.AreEqual(DateTimes[i], occurrences[i].Period.StartTime, "Event should occur at " + DateTimes[i]);
            }

            Assert.IsTrue(occurrences.Count == DateTimes.Length, "There should be exactly " + DateTimes.Length + " occurrences; there were " + occurrences.Count);
        }
예제 #2
0
        public void GOOGLE1()
        {
            TZID      tzid = "Europe/Berlin";
            iCalendar iCal = iCalendar.LoadFromFile(@"Calendars/General/GoogleCalendar.ics");
            Event     evt  = iCal.Events["*****@*****.**"];

            Assert.IsNotNull(evt);

            Date_Time dtStart = new Date_Time(2006, 12, 18, tzid, iCal);
            Date_Time dtEnd   = new Date_Time(2006, 12, 23, tzid, iCal);

            iCal.Evaluate(dtStart, dtEnd);

            Date_Time[] DateTimes = new Date_Time[]
            {
                new Date_Time(2006, 12, 11, 7, 0, 0, tzid, iCal),
                new Date_Time(2006, 12, 18, 7, 0, 0, tzid, iCal),
                new Date_Time(2006, 12, 19, 7, 0, 0, tzid, iCal),
                new Date_Time(2006, 12, 20, 7, 0, 0, tzid, iCal),
                new Date_Time(2006, 12, 21, 7, 0, 0, tzid, iCal),
                new Date_Time(2006, 12, 22, 7, 0, 0, tzid, iCal)
            };

            foreach (Date_Time dt in DateTimes)
            {
                Assert.IsTrue(evt.OccursAt(dt), "Event should occur at " + dt);
            }

            Assert.IsTrue(evt.Periods.Count == DateTimes.Length, "There should be exactly " + DateTimes.Length + " occurrences; there were " + evt.Periods.Count);
        }
예제 #3
0
 /// <summary>
 /// Retrieves the <see cref="DDay.iCal.Components.TimeZone" /> object for the specified
 /// <see cref="TZID"/> (Time Zone Identifier).
 /// </summary>
 /// <param name="tzid">A valid <see cref="TZID"/> object, or a valid <see cref="TZID"/> string.</param>
 /// <returns>A <see cref="TimeZone"/> object for the <see cref="TZID"/>.</returns>
 public DDay.iCal.Components.TimeZone GetTimeZone(TZID tzid)
 {
     foreach (DDay.iCal.Components.TimeZone tz in TimeZones)
     {
         if (tz.TZID.Equals(tzid))
         {
             return(tz);
         }
     }
     return(null);
 }
예제 #4
0
 public static DATE_TIME AsDATE_TIME(this DateTime value, TZID tzid = null)
 {
     if (value == default(DateTime)) return new DATE_TIME(default(DATE_TIME), tzid);
     if (tzid != null)
     {
         return new DATE_TIME((uint)value.Year, (uint)value.Month, (uint)value.Day, (uint)value.Hour, (uint)value.Minute, (uint)value.Second, TimeType.LocalAndTimeZone, tzid);
     }
     return value.Kind == DateTimeKind.Utc 
         ? new DATE_TIME((uint)value.Year, (uint)value.Month, (uint)value.Day, (uint)value.Hour, (uint)value.Minute, (uint)value.Second, TimeType.Utc) 
         : new DATE_TIME((uint)value.Year, (uint)value.Month, (uint)value.Day, (uint)value.Hour, (uint)value.Minute, (uint)value.Second);
 }
예제 #5
0
 /// <summary>
 /// Retrieves the <see cref="DDay.iCal.Components.TimeZone" /> object for the specified
 /// <see cref="TZID"/> (Time Zone Identifier).
 /// </summary>
 /// <param name="tzid">A valid <see cref="TZID"/> object, or a valid <see cref="TZID"/> string.</param>
 /// <returns>A <see cref="TimeZone"/> object for the <see cref="TZID"/>.</returns>
 public iCalTimeZone GetTimeZone(TZID tzid)
 {
     foreach (iCalTimeZone tz in TimeZones)
     {
         if (tz.TZID.Equals(tzid))
         {
             return(tz);
         }
     }
     return(null);
 }
예제 #6
0
 /// <summary>
 /// Retrieves the <see cref="DDay.iCal.Components.TimeZone" /> object for the specified
 /// <see cref="TZID"/> (Time Zone Identifier).
 /// </summary>
 /// <param name="tzid">A valid <see cref="TZID"/> object, or a valid <see cref="TZID"/> string.</param>
 /// <returns>A <see cref="TimeZone"/> object for the <see cref="TZID"/>.</returns>
 public iCalTimeZone GetTimeZone(TZID tzid)
 {
     foreach (iCalendar iCal in this)
     {
         iCalTimeZone tz = iCal.GetTimeZone(tzid);
         if (tz != null)
         {
             return(tz);
         }
     }
     return(null);
 }
예제 #7
0
        public EventUnitTests()
        {
            keyGenerator = new SequentialGuidKeyGenerator();
            var valuesFactory = new ValuesFactory(keyGenerator);
            var parametersFactory = new ParametersFactory(valuesFactory);
            var propertiesFactory = new PropertiesFactory(keyGenerator, valuesFactory, parametersFactory);
            var alarmFactory = new AlarmFactory(keyGenerator, propertiesFactory, valuesFactory);

            factory = new EventFactory(keyGenerator, alarmFactory, propertiesFactory, valuesFactory);

            tzid = new TZID("America", "New_York");
        }
예제 #8
0
 /// <summary>
 /// Retrieves the <see cref="DDay.iCal.Components.TimeZone" /> object for the specified
 /// <see cref="TZID"/> (Time Zone Identifier).
 /// </summary>
 /// <param name="tzid">A valid <see cref="TZID"/> object, or a valid <see cref="TZID"/> string.</param>
 /// <returns>A <see cref="TimeZone"/> object for the <see cref="TZID"/>.</returns>
 public DDay.iCal.Components.TimeZone GetTimeZone(TZID tzid)
 {
     foreach (iCalendar iCal in this)
     {
         DDay.iCal.Components.TimeZone tz = iCal.GetTimeZone(tzid);
         if (tz != null)
         {
             return(tz);
         }
     }
     return(null);
 }
예제 #9
0
        /// <summary>
        /// Lists the event.
        /// </summary>
        /// <param name="request">The request.</param>
        /// <remarks>
        ///  - Удаляет FilterElement с source (DTStart, DTEnd)в запросе и формирует на основании их предикат
        ///    позволяющий производить выборку по данным критериям из произвольной коллекции
        ///
        /// </remarks>
        /// <returns></returns>
        public static ListResponse ListEvent(CalendarEventListRequest request)
        {
            List <CalendarEventEntity> retVal = new List <CalendarEventEntity>();

            TZID dtStartTZID = String.IsNullOrEmpty(request.DTStartTimeZoneId) ? null : new TZID(request.DTStartTimeZoneId);
            TZID dtEndTZID   = String.IsNullOrEmpty(request.DTEndTimeZoneId) ? null : new TZID(request.DTEndTimeZoneId);

            //Заполняем FIlterElementCollection элементами исходного массива фильтров
            FilterElementCollection filterColl = new FilterElementCollection();

            foreach (FilterElement filterEl in request.Filters)
            {
                filterColl.Add(filterEl);
            }
            AndBlockFilterElementPredicate <DateTime> andBlockDTStartFilterPredicate =
                new AndBlockFilterElementPredicate <DateTime>();
            AndBlockFilterElementPredicate <DateTime> andBlockDTEndFilterPredicate =
                new AndBlockFilterElementPredicate <DateTime>();

            ConstructPredicate(andBlockDTStartFilterPredicate, filterColl, CalendarEventEntity.FieldStart);
            ConstructPredicate(andBlockDTEndFilterPredicate, filterColl, CalendarEventEntity.FieldEnd);

            //Получаем все FilterElement которые связаны с датой и формируем на основе их дерево выражений
            foreach (FilterElement filterEl in FindFilterElementBySource(new string[] { CalendarEventEntity.FieldStart,
                                                                                        CalendarEventEntity.FieldEnd },
                                                                         request.Filters, true))
            {
                //Рекурсивно удаляем найденный filterElement из исходного набора
                DeepRemoveFilter(filterColl, filterEl);
            }
            //добавляем дополнительные критерии
            AddExtraCriteria(filterColl);
            //Получаем список эвентов
            retVal.AddRange(ListEvents(filterColl, request));

            //Применяем критерии отбора по датам начала и завершения взятые из первоначального запроса, и преобразованные
            //для отбора из коллекции EntityObjects
            retVal.RemoveAll(delegate(CalendarEventEntity eventEntity) { return(!andBlockDTStartFilterPredicate.Evaluate(eventEntity.Start)); });
            retVal.RemoveAll(delegate(CalendarEventEntity eventEntity) { return(!andBlockDTEndFilterPredicate.Evaluate(eventEntity.End)); });

            retVal.Sort();

            return(new ListResponse(retVal.ToArray()));
        }
예제 #10
0
        public void PARSE11()
        {
            iCalendar iCal = iCalendar.LoadFromUri(new Uri("http://www.google.com/calendar/ical/tvhot064q4p48frqdalgo3fb2k%40group.calendar.google.com/public/basic.ics"));

            Assert.IsNotNull(iCal);
            Assert.AreEqual(1, iCal.Events.Count);
            Assert.AreEqual(1, iCal.TimeZones.Count);

            TZID tzid = iCal.TimeZones[0].TZID;
            IList <Occurrence> occurrences = iCal.GetOccurrences(new iCalDateTime(2009, 8, 24, tzid, iCal), new iCalDateTime(2009, 9, 28, tzid, iCal));

            Assert.AreEqual(5, occurrences.Count);
            Assert.AreEqual(new iCalDateTime(2009, 8, 26, 8, 0, 0, tzid, iCal), occurrences[0].Period.StartTime);
            Assert.AreEqual(new iCalDateTime(2009, 9, 2, 8, 0, 0, tzid, iCal), occurrences[1].Period.StartTime);
            Assert.AreEqual(new iCalDateTime(2009, 9, 9, 8, 0, 0, tzid, iCal), occurrences[2].Period.StartTime);
            Assert.AreEqual(new iCalDateTime(2009, 9, 16, 8, 0, 0, tzid, iCal), occurrences[3].Period.StartTime);
            Assert.AreEqual(new iCalDateTime(2009, 9, 23, 8, 0, 0, tzid, iCal), occurrences[4].Period.StartTime);
            Assert.AreEqual(new iCalDateTime(2009, 8, 26, 10, 0, 0, tzid, iCal), occurrences[0].Period.EndTime);
        }
예제 #11
0
 public void InitAll()
 {
     TotalTime = new TimeSpan(0);
     tzid      = new TZID("US-Eastern");
 }
예제 #12
0
 public void InitAll()
 {
     tzid = new TZID("US-Eastern");
 }
예제 #13
0
 public static IEnumerable<DATE_TIME> AsDATE_TIMEs(this IEnumerable<DateTime> values, TZID tzid = null)
 {
     if (values == null) throw new ArgumentNullException("values");
     return values.Select(x => x.AsDATE_TIME(tzid));
 }
예제 #14
0
 public static TIME AsTIME(this TimeSpan span, TZID tzid, TimeType format = TimeType.NONE)
 {
     if (tzid != null)
     {
         if (format == TimeType.Utc) throw new ArgumentException();
         return format == TimeType.LocalAndTimeZone 
             ? new TIME((uint)span.Hours, (uint)span.Minutes, (uint)span.Seconds, format, tzid) 
             : new TIME((uint)span.Hours, (uint)span.Minutes, (uint)span.Seconds);
     }
     return format == TimeType.Utc 
         ? new TIME((uint)span.Hours, (uint)span.Minutes, (uint)span.Seconds, format) 
         : new TIME((uint)span.Hours, (uint)span.Minutes, (uint)span.Seconds);
 }