Esempio n. 1
0
        public void VisitIntervalSchedule(ScheduledElement parent, XElement element)
        {
            var period     = (int)element.Attribute("period");
            var periodType = (string)element.Attribute("periodType");

            switch (periodType)
            {
            case "seconds":
                parent.SecondsConsidered = Enumerable.Range(0, 60)
                                           .Where(x => (x % period) == 0)
                                           .ToArray();
                break;

            case "minutes":
                parent.MinutesConsidered = Enumerable.Range(0, 60)
                                           .Where(x => (x % period) == 0)
                                           .ToArray();
                break;

            case "hours":
                parent.HoursConsidered = Enumerable.Range(0, 24)
                                         .Where(x => (x % period) == 0)
                                         .ToArray();
                break;
            }
        }
Esempio n. 2
0
        public void VisitScheduled(ScheduledElement item, XContainer container)
        {
            foreach (var element in container.Elements())
            {
                var name = element.Name.LocalName;

                ElementTypes type;
                if (!Enum.TryParse(name, out type))
                {
                    continue;
                }

                switch (type)
                {
                case ElementTypes.IntervalSchedule:
                    VisitIntervalSchedule(item, element);
                    break;

                case ElementTypes.WeeklySchedule:
                    VisitWeeklySchedule(item, element);
                    break;

                case ElementTypes.HourlySchedule:
                    VisitHourlySchedule(item, element);
                    break;

                case ElementTypes.DailySchedule:
                    VisitDailySchedule(item, element);
                    break;
                }
            }
        }
Esempio n. 3
0
        public void VisitHourlySchedule(ScheduledElement parent, XElement element)
        {
            if (element.Attribute("includeMinutes") != null)
            {
                var include          = new List <int>();
                var includeAttribute = (string)element.Attribute("includeMinutes");
                includeAttribute.Split(',')
                .Where(x => !string.IsNullOrWhiteSpace(x))
                .ToList()
                .ForEach(x =>
                {
                    int value;
                    if (int.TryParse(x, out value) && value >= 0 && value <= 59)
                    {
                        include.Add(value);
                    }
                });

                parent.MinutesConsidered = include.ToArray();
            }

            if (parent.MinutesConsidered.Length == 0)
            {
                parent.MinutesConsidered = Enumerable.Range(0, 60).ToArray();
            }

            if (element.Attribute("excludeMinutes") == null)
            {
                return;
            }

            if (parent.MinutesConsidered.Length == 1 && parent.MinutesConsidered[0] == 0)
            {
                parent.MinutesConsidered = Enumerable.Range(0, 60).ToArray();
            }

            var exclude          = new List <int>();
            var excludeAttribute = (string)element.Attribute("excludeMinutes");

            excludeAttribute.Split(',')
            .Where(x => !string.IsNullOrWhiteSpace(x))
            .ToList()
            .ForEach(x =>
            {
                int value;
                if (int.TryParse(x, out value) && value >= 0 && value <= 59)
                {
                    exclude.Add(value);
                }
            });

            parent.MinutesConsidered = parent.MinutesConsidered
                                       .Except(exclude)
                                       .ToArray();
        }
Esempio n. 4
0
        public void VisitScheduled(ExecutionElement parent, XElement element)
        {
            var item = new ScheduledElement
            {
                Id                = (string)element.Attribute("taskId"),
                ClientId          = (int?)element.Attribute("clientId"),
                DaysConsidered    = Enumerable.Range(0, 7).ToArray(),
                HoursConsidered   = Enumerable.Range(0, 24).ToArray(),
                MinutesConsidered = new[] { 0 },
            };

            parent.AddExecutionType(item);

            if (item.ClientId.HasValue)
            {
                item.Id = string.Format("client.{0}.{1}", item.ClientId, item.Id);
            }
            else
            {
                if (!item.ClientId.HasValue && metaData.HasEntries)
                {
                    string metaClientId;
                    if (!metaData.TryGetEntry("ClientId", out metaClientId))
                    {
                        int clientId;
                        if (int.TryParse(metaClientId, out clientId))
                        {
                            item.ClientId = clientId;
                        }
                    }
                }
            }

            if (!element.HasElements)
            {
                return;
            }

            VisitScheduled(item, element);
            VisitExecutionOrder(item, element);
        }
Esempio n. 5
0
        public TaskScheduleModel CreateScheduleModel(ScheduledElement element)
        {
            var model = new TaskScheduleDateTimeModel
            {
                TaskId            = element.Id,
                MinutesConsidered = element.MinutesConsidered,
                HoursConsidered   = element.HoursConsidered,
                DaysConsidered    = element.DaysConsidered,
            };

            foreach (var subModel in element.ExecutionList)
            {
                model.AddScheduleItem(new TaskScheduleItemModel
                {
                    TaskId = subModel.Id,
                    Order  = subModel.Order,
                });
            }

            return(model);
        }