-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathSchedule.cs
More file actions
63 lines (54 loc) · 2.23 KB
/
Schedule.cs
File metadata and controls
63 lines (54 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using InEngine.Core.Commands;
using InEngine.Core.Exceptions;
using InEngine.Core.IO;
using Quartz;
using Serialize.Linq.Extensions;
namespace InEngine.Core.Scheduling;
public class Schedule : ISchedule
{
public IDictionary<string, JobGroup> JobGroups { get; set; } = new Dictionary<string, JobGroup>();
public MailSettings MailSettings { get; set; }
public Occurence Command(AbstractCommand command)
{
var jobDetail = MakeJobBuilder(command).Build();
command.MailSettings = command.CommandLifeCycle.MailSettings = MailSettings;
command.GetType()
.GetProperties()
.ToList()
.Where(x => !x.GetCustomAttributes(typeof(DoNotAutoWireAttribute), true).Any())
.ToList()
.ForEach(x => jobDetail.JobDataMap.Add(x.Name, x.GetValue(command)));
return new Occurence() {
Schedule = this,
JobDetail = jobDetail,
Command = command
};
}
public Occurence Command(Expression<Action> expressionAction)
{
return Command(new Lambda() { ExpressionNode = expressionAction.ToExpressionNode() });
}
public Occurence Command(IList<AbstractCommand> commands)
{
return Command(new Chain() { Commands = commands });
}
public JobRegistration RegisterJob(AbstractCommand command, IJobDetail jobDetail, ITrigger trigger)
{
if (!JobGroups.ContainsKey(command.SchedulerGroup))
JobGroups.Add(command.SchedulerGroup, new JobGroup());
if (JobGroups[command.SchedulerGroup].Registrations.ContainsKey(command.ScheduleId))
throw new DuplicateScheduledCommandException(command.Name, command.ScheduleId, command.SchedulerGroup);
var registration = new JobRegistration(command, jobDetail, trigger);
JobGroups[command.SchedulerGroup].Registrations.Add(command.ScheduleId, registration);
return registration;
}
public JobBuilder MakeJobBuilder(AbstractCommand command)
{
return JobBuilder.Create(command.GetType())
.WithIdentity($"{command.Name}:job:{command.ScheduleId}", command.SchedulerGroup);
}
}