You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

AddJobForm.cs 6.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using Quartz;
  10. using System.Reflection;
  11. using Quartz.Impl;
  12. using Quartz.Impl.Triggers;
  13. using Quartz.Job;
  14. using System.IO;
  15. using Quartz.Util;
  16. namespace ClickForensics.Quartz.Manager
  17. {
  18. public partial class AddJobForm : Form
  19. {
  20. public AddJobForm()
  21. {
  22. InitializeComponent();
  23. loadJobAssemblies();
  24. cboTriggerType.Items.Add("Cron");
  25. cboTriggerType.SelectedItem = "Cron";
  26. if (cboJobType.SelectedText == "NativeJob")
  27. {
  28. jobDataListView.Items.Add(new ListViewItem(new string[] { "consumeStreams", "true" }));
  29. jobDataListView.Items.Add(new ListViewItem(new string[] { "waitForProcess", "true" }));
  30. txtKey.Text = "command";
  31. }
  32. }
  33. private void loadJobAssemblies()
  34. {
  35. var assemblies = AssemblyRepository.GetAssemblies();
  36. SortedList<string, string> jobTypes = new SortedList<string, string>();
  37. foreach (var assemblyName in assemblies)
  38. {
  39. Assembly assembly = Assembly.LoadFile(Environment.CurrentDirectory + "\\" + assemblyName);
  40. foreach (Type type in assembly.GetTypes())
  41. {
  42. if (typeof(IJob).IsAssignableFrom(type) && type.IsClass)
  43. {
  44. jobTypes.Add(type.FullName, assembly.GetName().Name);
  45. }
  46. }
  47. }
  48. foreach (var item in jobTypes)
  49. {
  50. cboJobType.Items.Add(new JobType() { AssemblyName = item.Value, FullName = item.Key });
  51. }
  52. //cboJobType.Items.AddRange(jobTypes.Values.ToArray<string>());
  53. }
  54. public AddJobForm(TriggerNode node)
  55. : this()
  56. {
  57. setTriggerData((CronTriggerImpl)node.Trigger);
  58. setJobData(((JobNode)node.Parent.Parent).Detail);
  59. }
  60. private void setTriggerData(CronTriggerImpl trigger)
  61. {
  62. setTriggerType();
  63. txtCronExpression.Text = trigger.CronExpressionString;
  64. txtTriggerDescription.Text = trigger.Description;
  65. txtTriggerGroup.Text = trigger.Key.Group;
  66. txtTriggerName.Text = trigger.Key.Name;
  67. }
  68. private void setJobData(IJobDetail detail)
  69. {
  70. setJobType(detail);
  71. txtJobDescription.Text = detail.Description;
  72. txtJobGroup.Text = detail.Key.Group;
  73. txtJobName.Text = detail.Key.Name;
  74. setJobDataMap(detail);
  75. }
  76. private void setJobDataMap(IJobDetail detail)
  77. {
  78. jobDataListView.Items.Clear();
  79. foreach (var item in detail.JobDataMap.GetKeys())
  80. {
  81. jobDataListView.Items.Add(new ListViewItem(new string[] { item, detail.JobDataMap.Get(item).ToString() }));
  82. }
  83. }
  84. private void setJobType(IJobDetail detail)
  85. {
  86. cboJobType.SelectedItem = detail.JobType.FullName;
  87. }
  88. private void setTriggerType()
  89. {
  90. //nothing to do right now
  91. }
  92. public IJobDetail JobDetail { get; set; }
  93. public ITrigger Trigger { get; set; }
  94. private void btnCancel_Click(object sender, EventArgs e)
  95. {
  96. this.Close();
  97. }
  98. private void btnAdd_Click(object sender, EventArgs e)
  99. {
  100. JobDetail = getJobDetail();
  101. Trigger = getTrigger(JobDetail);
  102. this.Close();
  103. }
  104. private IJobDetail getJobDetail()
  105. {
  106. IJobDetail detail = JobBuilder
  107. .Create()
  108. .OfType(getJobType())
  109. .WithDescription(txtJobDescription.Text)
  110. .WithIdentity(new JobKey(txtJobName.Text, txtJobGroup.Text))
  111. .UsingJobData(getJobDataMap())
  112. .Build();
  113. return detail;
  114. }
  115. private ITrigger getTrigger(IJobDetail jobDetail)
  116. {
  117. var builder =
  118. TriggerBuilder
  119. .Create()
  120. .ForJob(jobDetail)
  121. .WithDescription(txtTriggerDescription.Text)
  122. .WithIdentity(new TriggerKey(txtTriggerName.Text, txtTriggerGroup.Text));
  123. if (cboTriggerType.SelectedText == "Simple")
  124. {
  125. return builder.WithSchedule(SimpleScheduleBuilder.Create()).Build();
  126. }
  127. else
  128. {
  129. return builder.WithSchedule(CronScheduleBuilder.CronSchedule(txtCronExpression.Text)).Build();
  130. }
  131. }
  132. private Type getJobType()
  133. {
  134. JobType type = (JobType)cboJobType.SelectedItem;
  135. return Type.GetType(type.FullName + "," + type.AssemblyName, true);
  136. }
  137. private JobDataMap getJobDataMap()
  138. {
  139. JobDataMap map = new JobDataMap();
  140. foreach (ListViewItem item in jobDataListView.Items)
  141. {
  142. map.Add(item.SubItems[0].Text, item.SubItems[1].Text);
  143. }
  144. return map;
  145. }
  146. private void btnAddKeyValue_Click(object sender, EventArgs e)
  147. {
  148. ListViewItem item = new ListViewItem(new string[] { txtKey.Text, txtValue.Text });
  149. jobDataListView.Items.Add(item);
  150. }
  151. private void btnDelete_Click(object sender, EventArgs e)
  152. {
  153. foreach (ListViewItem item in jobDataListView.SelectedItems)
  154. {
  155. jobDataListView.Items.Remove(item);
  156. }
  157. }
  158. }
  159. }