private void AddUploadJobMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                IJobDetail uploadJob;
                ITrigger   uploadTrigger;
                IJobDetail monitorJob;
                ITrigger   monitorTrigger;

                using UploadJobV3 form = new UploadJobV3();
                form.ShowDialog();
                if (form.Cancelled || (form.UploadJobDetail == null) || (form.UploadTrigger == null))
                {
                    return;
                }
                uploadJob      = form.UploadJobDetail;
                uploadTrigger  = form.UploadTrigger;
                monitorJob     = form.ProcessingJobDetail;
                monitorTrigger = form.ProcessingTrigger;

                var scheduler = Scheduler.Instance.GetScheduler();
                if (scheduler == null)
                {
                    MessageBox.Show(Resources.No_active_scheduler, Resources.Missing_scheduler);
                    return;
                }

                scheduler.ScheduleJob(uploadJob, new HashSet <ITrigger> {
                    uploadTrigger
                }, true);

                if ((monitorJob != null) && (monitorTrigger != null))
                {
                    scheduler.ScheduleJob(monitorJob, new HashSet <ITrigger> {
                        monitorTrigger
                    }, true);
                }
                _scheduleChanged = true;

                RefreshGrid();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Resources.Unexpected_error);
            }
        }
        private void EditJob()
        {
            try
            {
                var jobName  = jobsDataGridView.SelectedRows[0].Cells["JobName"].Value.ToString();
                var jobGroup = jobsDataGridView.SelectedRows[0].Cells["JobGroup"].Value.ToString();
                var jobKey   = new JobKey(jobName, jobGroup);

                var scheduler = Scheduler.Instance.GetScheduler();
                if (scheduler == null)
                {
                    MessageBox.Show(Resources.No_active_scheduler, Resources.Missing_scheduler);
                    return;
                }

                var jobDetail  = scheduler.GetJobDetail(jobKey).Result;
                var jobTrigger = scheduler.GetTriggersOfJob(jobKey).Result.First();
                switch (jobDetail.JobType.FullName)
                {
                case SettingsConstants.DownloadJob:
                {
                    using DownloadJobV3 downloadForm = new DownloadJobV3
                          {
                              JobDetail = jobDetail,
                              Trigger   = jobTrigger
                          };

                    downloadForm.ShowDialog();

                    if (downloadForm.Cancelled && downloadForm.JobDetail == null && downloadForm.Trigger == null)
                    {
                        return;
                    }

                    scheduler.ScheduleJob(downloadForm.JobDetail, new HashSet <ITrigger> {
                            downloadForm.Trigger
                        }, true);

                    RefreshGrid();
                }
                break;

                case SettingsConstants.ExportJob:
                {
                    using ExportJobV3 exportForm = new ExportJobV3
                          {
                              JobDetail = jobDetail,
                              Trigger   = jobTrigger
                          };

                    exportForm.ShowDialog();

                    if (exportForm.Cancelled && exportForm.JobDetail == null && exportForm.Trigger == null)
                    {
                        return;
                    }

                    scheduler.ScheduleJob(exportForm.JobDetail, new HashSet <ITrigger> {
                            exportForm.Trigger
                        }, true);

                    RefreshGrid();
                }
                break;

                case SettingsConstants.UploadJob:
                    //find related processing job
                    var      processingJobName    = jobDetail.Key.Name + "-Processing monitor";
                    var      processingJobKey     = new JobKey(processingJobName, jobDetail.Key.Group);
                    var      processingJobDetail  = scheduler.GetJobDetail(processingJobKey).Result;
                    ITrigger processingJobTrigger = null;

                    if (processingJobDetail != null)
                    {
                        processingJobTrigger = scheduler.GetTriggersOfJob(processingJobKey).Result.First();
                    }
                    {
                        using UploadJobV3 uploadForm = new UploadJobV3
                              {
                                  UploadJobDetail = jobDetail,
                                  UploadTrigger   = jobTrigger
                              };
                        if ((processingJobDetail != null) && (processingJobTrigger != null))
                        {
                            uploadForm.ProcessingJobDetail = processingJobDetail;
                            uploadForm.ProcessingTrigger   = processingJobTrigger;
                        }

                        uploadForm.ShowDialog();

                        if (uploadForm.Cancelled && uploadForm.UploadJobDetail == null && uploadForm.UploadTrigger == null)
                        {
                            return;
                        }

                        scheduler.ScheduleJob(uploadForm.UploadJobDetail, new HashSet <ITrigger> {
                            uploadForm.UploadTrigger
                        }, true);

                        if ((uploadForm.ProcessingJobDetail != null) && (uploadForm.ProcessingTrigger != null))
                        {
                            scheduler.ScheduleJob(uploadForm.ProcessingJobDetail, new HashSet <ITrigger> {
                                uploadForm.ProcessingTrigger
                            }, true);
                        }

                        RefreshGrid();
                    }
                    break;

                case SettingsConstants.ImportJob:
                    //find related execution job
                    var      executionJobName    = jobDetail.Key.Name + "-Execution monitor";
                    var      executionJobKey     = new JobKey(executionJobName, jobDetail.Key.Group);
                    var      executionJobDetail  = scheduler.GetJobDetail(executionJobKey).Result;
                    ITrigger executionJobTrigger = null;

                    if (executionJobDetail != null)
                    {
                        executionJobTrigger = scheduler.GetTriggersOfJob(executionJobKey).Result.First();
                    }
                    {
                        using ImportJobV3 importForm = new ImportJobV3
                              {
                                  ImportJobDetail = jobDetail,
                                  ImportTrigger   = jobTrigger
                              };

                        if ((executionJobDetail != null) && (executionJobTrigger != null))
                        {
                            importForm.ExecutionJobDetail = executionJobDetail;
                            importForm.ExecutionTrigger   = executionJobTrigger;
                        }
                        importForm.ShowDialog();

                        if (importForm.Cancelled && importForm.ImportJobDetail == null && importForm.ImportTrigger == null)
                        {
                            return;
                        }

                        scheduler.ScheduleJob(importForm.ImportJobDetail, new HashSet <ITrigger> {
                            importForm.ImportTrigger
                        }, true);

                        if (importForm.ExecutionJobDetail != null && importForm.ExecutionTrigger != null)
                        {
                            scheduler.ScheduleJob(importForm.ExecutionJobDetail, new HashSet <ITrigger> {
                                importForm.ExecutionTrigger
                            }, true);
                        }
                        RefreshGrid();
                    }
                    break;

                default:
                    MessageBox.Show(Resources.This_type_of_job_is_not_supported_for_direct_editing);
                    return;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, Resources.Unexpected_error);
            }
        }