@@ -22,7 +22,7 @@ public void Start()
2222 Scheduler . Start ( ) ;
2323 }
2424
25- public IJobDetail CreateJobDetail ( Type jobType )
25+ public IJobDetail JobDetailFactory ( Type jobType )
2626 {
2727 var integrationJob = Activator . CreateInstance ( jobType ) as IIntegrationJob ;
2828 var jobDetailsDataMap = new JobDataMap ( ) ;
@@ -37,59 +37,68 @@ public IJobDetail CreateJobDetail(Type jobType)
3737 public virtual void ScheduleJobWithCronTrigger ( CronTrigger triggerDefinition )
3838 {
3939 var jobType = IntegrationJobTypes . Where ( x => x . FullName == triggerDefinition . JobType ) . First ( ) ;
40- var jobDetail = CreateJobDetail ( jobType ) ;
41- ScheduleJobWithCronTrigger ( triggerDefinition , jobType , jobDetail ) ;
40+ var jobDetail = JobDetailFactory ( jobType ) ;
41+ var trigger = CronTriggerFactory ( triggerDefinition , jobType , jobDetail ) ;
42+ TryScheduleJobWithTrigger ( trigger , jobType , jobDetail ) ;
4243 }
4344
44- public void ScheduleJobWithCronTrigger ( CronTrigger triggerDefinition , Type jobType , IJobDetail jobDetail )
45+ public void ScheduleJobWithSimpleTrigger ( SimpleTrigger triggerDefinition )
46+ {
47+ var jobType = IntegrationJobTypes . Where ( x => x . FullName == triggerDefinition . JobType ) . First ( ) ;
48+ var jobDetail = JobDetailFactory ( jobType ) ;
49+ var trigger = SimpleTriggerFactory ( triggerDefinition , jobType , jobDetail ) ;
50+ TryScheduleJobWithTrigger ( trigger , jobType , jobDetail ) ;
51+ }
52+
53+ public void TryScheduleJobWithTrigger ( ITrigger trigger , Type jobType , IJobDetail jobDetail )
54+ {
55+ if ( Scheduler . CheckExists ( jobDetail . Key ) )
56+ Scheduler . RescheduleJob ( trigger . Key , trigger ) ;
57+ else
58+ Scheduler . ScheduleJob ( jobDetail , trigger ) ;
59+ }
60+
61+ public void ScheduleJobsWithTriggers ( IEnumerable < IIntegrationJobTrigger > triggerDefs , Type jobType , IJobDetail jobDetail )
4562 {
46- var trigger = TriggerBuilder . Create ( )
47- . WithIdentity ( GenerateTriggerId ( jobType , triggerDefinition ) , jobType . Namespace ) ;
48- if ( triggerDefinition . CronExpressionString != null ) {
49- trigger . WithCronSchedule ( triggerDefinition . CronExpressionString , x => x . InTimeZone ( triggerDefinition . TimeZone ) ) ;
63+ if ( ! triggerDefs . Any ( ) )
64+ return ;
65+ var triggersForJobs = new Quartz . Collection . HashSet < ITrigger > ( ) ;
66+ foreach ( var triggerDef in triggerDefs )
67+ {
68+ if ( triggerDef is CronTrigger )
69+ triggersForJobs . Add ( CronTriggerFactory ( triggerDef as CronTrigger , jobType , jobDetail ) ) ;
70+ else if ( triggerDef is SimpleTrigger )
71+ triggersForJobs . Add ( SimpleTriggerFactory ( triggerDef as SimpleTrigger , jobType , jobDetail ) ) ;
5072 }
51- Scheduler . ScheduleJob ( jobDetail , trigger . Build ( ) ) ;
73+ Scheduler . ScheduleJob ( jobDetail , triggersForJobs , true ) ;
5274 }
5375
54- public void ScheduleJobWithSimpleTrigger ( SimpleTrigger triggerDefinition )
76+ TriggerBuilder TriggerBuilderFactory ( string triggerName , string triggerGroup )
5577 {
56- var jobType = IntegrationJobTypes . Where ( x => x . FullName == triggerDefinition . JobType ) . First ( ) ;
57- var jobDetail = CreateJobDetail ( jobType ) ;
58- ScheduleJobWithSimpleTrigger ( triggerDefinition , jobType , jobDetail ) ; ;
78+ return TriggerBuilder . Create ( ) . WithIdentity ( new TriggerKey ( triggerName , triggerGroup ) ) ;
5979 }
6080
61- public void ScheduleJobWithSimpleTrigger ( SimpleTrigger triggerDefinition , Type jobType , IJobDetail jobDetail )
81+ public ITrigger SimpleTriggerFactory ( SimpleTrigger triggerDefinition , Type jobType , IJobDetail jobDetail )
6282 {
63- var trigger = TriggerBuilder . Create ( )
64- . WithIdentity ( GenerateTriggerId ( jobType , triggerDefinition ) , jobType . Namespace ) ;
83+ var triggerBuilder = TriggerBuilderFactory ( triggerDefinition . Id , jobType . FullName ) ;
6584 Action < SimpleScheduleBuilder > simpleScheduleBuilderAction ;
6685 if ( triggerDefinition . RepeatCount > 0 )
6786 simpleScheduleBuilderAction = x => x . WithInterval ( triggerDefinition . RepeatInterval ) . WithRepeatCount ( triggerDefinition . RepeatCount ) ;
6887 else
6988 simpleScheduleBuilderAction = x => x . WithInterval ( triggerDefinition . RepeatInterval ) ;
70- trigger . WithSimpleSchedule ( simpleScheduleBuilderAction ) ;
89+ triggerBuilder . WithSimpleSchedule ( simpleScheduleBuilderAction ) ;
7190 if ( ! object . Equals ( triggerDefinition . StartTimeUtc , default ( DateTimeOffset ) ) )
72- trigger . StartAt ( triggerDefinition . StartTimeUtc ) ;
91+ triggerBuilder . StartAt ( triggerDefinition . StartTimeUtc ) ;
7392 else
74- trigger . StartNow ( ) ;
75- Scheduler . ScheduleJob ( jobDetail , trigger . Build ( ) ) ;
76- }
77-
78- public void ScheduleJobsWithCronTriggers ( IEnumerable < CronTrigger > triggers , Type jobType , IJobDetail jobDetail )
79- {
80- foreach ( var triggerDefinition in triggers . Where ( x => x . JobType == jobType . FullName ) )
81- ScheduleJobWithCronTrigger ( triggerDefinition , jobType , jobDetail ) ;
82- }
83-
84- public void ScheduleJobsWithSimpleTriggers ( IEnumerable < SimpleTrigger > triggers , Type jobType , IJobDetail jobDetail )
85- {
86- foreach ( var triggerDefinition in triggers . Where ( x => x . JobType == jobType . FullName ) )
87- ScheduleJobWithSimpleTrigger ( triggerDefinition , jobType , jobDetail ) ;
93+ triggerBuilder . StartNow ( ) ;
94+ return triggerBuilder . Build ( ) ;
8895 }
8996
90- string GenerateTriggerId ( Type jobType , IHasStringId triggerDefinition )
97+ public ITrigger CronTriggerFactory ( CronTrigger triggerDefinition , Type jobType , IJobDetail jobDetail )
9198 {
92- return string . Format ( "{0}-{1}" , jobType . Name , triggerDefinition . Id ) ;
99+ var triggerBuilder = TriggerBuilderFactory ( triggerDefinition . Id , jobType . FullName ) ;
100+ triggerBuilder . WithCronSchedule ( triggerDefinition . CronExpressionString , x => x . InTimeZone ( triggerDefinition . TimeZone ) ) ;
101+ return triggerBuilder . Build ( ) ;
93102 }
94103 }
95104}
0 commit comments