@@ -0,0 +1,4 @@ | |||
obj/ | |||
bin/ | |||
*.user | |||
*.suo |
@@ -0,0 +1,61 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
<PropertyGroup> | |||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||
<ProductVersion>8.0.30703</ProductVersion> | |||
<SchemaVersion>2.0</SchemaVersion> | |||
<ProjectGuid>{B8B682CC-3E41-4810-86BF-B6728FB26D3A}</ProjectGuid> | |||
<OutputType>Library</OutputType> | |||
<AppDesignerFolder>Properties</AppDesignerFolder> | |||
<RootNamespace>ClickForensics.Quartz.Manager.Tests</RootNamespace> | |||
<AssemblyName>ClickForensics.Quartz.Manager.Tests</AssemblyName> | |||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> | |||
<FileAlignment>512</FileAlignment> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\Debug\</OutputPath> | |||
<DefineConstants>DEBUG;TRACE</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||
<DebugType>pdbonly</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\Release\</OutputPath> | |||
<DefineConstants>TRACE</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<Reference Include="nunit.framework, Version=2.5.7.10213, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL" /> | |||
<Reference Include="System" /> | |||
<Reference Include="System.Core" /> | |||
<Reference Include="System.Xml.Linq" /> | |||
<Reference Include="System.Data.DataSetExtensions" /> | |||
<Reference Include="Microsoft.CSharp" /> | |||
<Reference Include="System.Data" /> | |||
<Reference Include="System.Xml" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Compile Include="QuartzScehdulerTests.cs" /> | |||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="..\ClickForensics.Quartz.Manager\ClickForensics.Quartz.Manager.csproj"> | |||
<Project>{D23DACFA-11A1-480E-A6C4-1F37B564523D}</Project> | |||
<Name>ClickForensics.Quartz.Manager</Name> | |||
</ProjectReference> | |||
</ItemGroup> | |||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||
Other similar extension points exist, see Microsoft.Common.targets. | |||
<Target Name="BeforeBuild"> | |||
</Target> | |||
<Target Name="AfterBuild"> | |||
</Target> | |||
--> | |||
</Project> |
@@ -0,0 +1,36 @@ | |||
using System.Reflection; | |||
using System.Runtime.CompilerServices; | |||
using System.Runtime.InteropServices; | |||
// General Information about an assembly is controlled through the following | |||
// set of attributes. Change these attribute values to modify the information | |||
// associated with an assembly. | |||
[assembly: AssemblyTitle("ClickForensics.Quartz.Manager.Tests")] | |||
[assembly: AssemblyDescription("")] | |||
[assembly: AssemblyConfiguration("")] | |||
[assembly: AssemblyCompany("Microsoft")] | |||
[assembly: AssemblyProduct("ClickForensics.Quartz.Manager.Tests")] | |||
[assembly: AssemblyCopyright("Copyright © Microsoft 2010")] | |||
[assembly: AssemblyTrademark("")] | |||
[assembly: AssemblyCulture("")] | |||
// Setting ComVisible to false makes the types in this assembly not visible | |||
// to COM components. If you need to access a type in this assembly from | |||
// COM, set the ComVisible attribute to true on that type. | |||
[assembly: ComVisible(false)] | |||
// The following GUID is for the ID of the typelib if this project is exposed to COM | |||
[assembly: Guid("7f77159f-68ea-4291-83b2-1cd71e6c9d70")] | |||
// Version information for an assembly consists of the following four values: | |||
// | |||
// Major Version | |||
// Minor Version | |||
// Build Number | |||
// Revision | |||
// | |||
// You can specify all the values or you can default the Build and Revision Numbers | |||
// by using the '*' as shown below: | |||
// [assembly: AssemblyVersion("1.0.*")] | |||
[assembly: AssemblyVersion("1.0.0.0")] | |||
[assembly: AssemblyFileVersion("1.0.0.0")] |
@@ -0,0 +1,20 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using NUnit.Framework; | |||
namespace ClickForensics.Quartz.Manager.Tests | |||
{ | |||
[TestFixture] | |||
public class QuartzScehdulerTests | |||
{ | |||
[Test] | |||
public void BackupToFileTests() | |||
{ | |||
QuartzScheduler scheduler = new QuartzScheduler("app01", 555, "QuartzScheduler"); | |||
scheduler.BackupToFile(new System.IO.FileInfo(@"C:\Users\jvilalta\Documents\toto.xml")); | |||
} | |||
} | |||
} |
@@ -0,0 +1,390 @@ | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
partial class AddJobForm | |||
{ | |||
/// <summary> | |||
/// Required designer variable. | |||
/// </summary> | |||
private System.ComponentModel.IContainer components = null; | |||
/// <summary> | |||
/// Clean up any resources being used. | |||
/// </summary> | |||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | |||
protected override void Dispose(bool disposing) | |||
{ | |||
if (disposing && (components != null)) | |||
{ | |||
components.Dispose(); | |||
} | |||
base.Dispose(disposing); | |||
} | |||
#region Windows Form Designer generated code | |||
/// <summary> | |||
/// Required method for Designer support - do not modify | |||
/// the contents of this method with the code editor. | |||
/// </summary> | |||
private void InitializeComponent() | |||
{ | |||
this.btnAdd = new System.Windows.Forms.Button(); | |||
this.btnCancel = new System.Windows.Forms.Button(); | |||
this.cboJobType = new System.Windows.Forms.ComboBox(); | |||
this.cboTriggerType = new System.Windows.Forms.ComboBox(); | |||
this.label1 = new System.Windows.Forms.Label(); | |||
this.txtJobGroup = new System.Windows.Forms.TextBox(); | |||
this.txtJobName = new System.Windows.Forms.TextBox(); | |||
this.txtTriggerName = new System.Windows.Forms.TextBox(); | |||
this.txtTriggerDescription = new System.Windows.Forms.TextBox(); | |||
this.txtCronExpression = new System.Windows.Forms.TextBox(); | |||
this.txtTriggerGroup = new System.Windows.Forms.TextBox(); | |||
this.label2 = new System.Windows.Forms.Label(); | |||
this.label3 = new System.Windows.Forms.Label(); | |||
this.label4 = new System.Windows.Forms.Label(); | |||
this.label5 = new System.Windows.Forms.Label(); | |||
this.label6 = new System.Windows.Forms.Label(); | |||
this.label7 = new System.Windows.Forms.Label(); | |||
this.label8 = new System.Windows.Forms.Label(); | |||
this.lblJobDescription = new System.Windows.Forms.Label(); | |||
this.txtJobDescription = new System.Windows.Forms.TextBox(); | |||
this.jobDataListView = new System.Windows.Forms.ListView(); | |||
this.columnHeader1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); | |||
this.columnHeader2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); | |||
this.label10 = new System.Windows.Forms.Label(); | |||
this.label11 = new System.Windows.Forms.Label(); | |||
this.txtKey = new System.Windows.Forms.TextBox(); | |||
this.label12 = new System.Windows.Forms.Label(); | |||
this.txtValue = new System.Windows.Forms.TextBox(); | |||
this.btnAddKeyValue = new System.Windows.Forms.Button(); | |||
this.btnDelete = new System.Windows.Forms.Button(); | |||
this.SuspendLayout(); | |||
// | |||
// btnAdd | |||
// | |||
this.btnAdd.Location = new System.Drawing.Point(32, 273); | |||
this.btnAdd.Name = "btnAdd"; | |||
this.btnAdd.Size = new System.Drawing.Size(75, 23); | |||
this.btnAdd.TabIndex = 0; | |||
this.btnAdd.Text = "Add"; | |||
this.btnAdd.UseVisualStyleBackColor = true; | |||
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); | |||
// | |||
// btnCancel | |||
// | |||
this.btnCancel.Location = new System.Drawing.Point(140, 273); | |||
this.btnCancel.Name = "btnCancel"; | |||
this.btnCancel.Size = new System.Drawing.Size(75, 23); | |||
this.btnCancel.TabIndex = 1; | |||
this.btnCancel.Text = "Cancel"; | |||
this.btnCancel.UseVisualStyleBackColor = true; | |||
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); | |||
// | |||
// cboJobType | |||
// | |||
this.cboJobType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; | |||
this.cboJobType.FormattingEnabled = true; | |||
this.cboJobType.Location = new System.Drawing.Point(131, 13); | |||
this.cboJobType.Name = "cboJobType"; | |||
this.cboJobType.Size = new System.Drawing.Size(277, 21); | |||
this.cboJobType.TabIndex = 2; | |||
// | |||
// cboTriggerType | |||
// | |||
this.cboTriggerType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; | |||
this.cboTriggerType.FormattingEnabled = true; | |||
this.cboTriggerType.Location = new System.Drawing.Point(131, 122); | |||
this.cboTriggerType.Name = "cboTriggerType"; | |||
this.cboTriggerType.Size = new System.Drawing.Size(277, 21); | |||
this.cboTriggerType.TabIndex = 3; | |||
// | |||
// label1 | |||
// | |||
this.label1.AutoSize = true; | |||
this.label1.Location = new System.Drawing.Point(29, 17); | |||
this.label1.Name = "label1"; | |||
this.label1.Size = new System.Drawing.Size(54, 13); | |||
this.label1.TabIndex = 4; | |||
this.label1.Text = "Job Type:"; | |||
// | |||
// txtJobGroup | |||
// | |||
this.txtJobGroup.Location = new System.Drawing.Point(131, 41); | |||
this.txtJobGroup.Name = "txtJobGroup"; | |||
this.txtJobGroup.Size = new System.Drawing.Size(277, 20); | |||
this.txtJobGroup.TabIndex = 5; | |||
// | |||
// txtJobName | |||
// | |||
this.txtJobName.Location = new System.Drawing.Point(131, 68); | |||
this.txtJobName.Name = "txtJobName"; | |||
this.txtJobName.Size = new System.Drawing.Size(277, 20); | |||
this.txtJobName.TabIndex = 6; | |||
// | |||
// txtTriggerName | |||
// | |||
this.txtTriggerName.Location = new System.Drawing.Point(131, 177); | |||
this.txtTriggerName.Name = "txtTriggerName"; | |||
this.txtTriggerName.Size = new System.Drawing.Size(277, 20); | |||
this.txtTriggerName.TabIndex = 8; | |||
// | |||
// txtTriggerDescription | |||
// | |||
this.txtTriggerDescription.Location = new System.Drawing.Point(131, 204); | |||
this.txtTriggerDescription.Name = "txtTriggerDescription"; | |||
this.txtTriggerDescription.Size = new System.Drawing.Size(277, 20); | |||
this.txtTriggerDescription.TabIndex = 7; | |||
// | |||
// txtCronExpression | |||
// | |||
this.txtCronExpression.Location = new System.Drawing.Point(131, 231); | |||
this.txtCronExpression.Name = "txtCronExpression"; | |||
this.txtCronExpression.Size = new System.Drawing.Size(277, 20); | |||
this.txtCronExpression.TabIndex = 10; | |||
// | |||
// txtTriggerGroup | |||
// | |||
this.txtTriggerGroup.Location = new System.Drawing.Point(131, 150); | |||
this.txtTriggerGroup.Name = "txtTriggerGroup"; | |||
this.txtTriggerGroup.Size = new System.Drawing.Size(277, 20); | |||
this.txtTriggerGroup.TabIndex = 9; | |||
// | |||
// label2 | |||
// | |||
this.label2.AutoSize = true; | |||
this.label2.Location = new System.Drawing.Point(29, 44); | |||
this.label2.Name = "label2"; | |||
this.label2.Size = new System.Drawing.Size(59, 13); | |||
this.label2.TabIndex = 11; | |||
this.label2.Text = "Job Group:"; | |||
// | |||
// label3 | |||
// | |||
this.label3.AutoSize = true; | |||
this.label3.Location = new System.Drawing.Point(29, 71); | |||
this.label3.Name = "label3"; | |||
this.label3.Size = new System.Drawing.Size(58, 13); | |||
this.label3.TabIndex = 12; | |||
this.label3.Text = "Job Name:"; | |||
// | |||
// label4 | |||
// | |||
this.label4.AutoSize = true; | |||
this.label4.Location = new System.Drawing.Point(29, 125); | |||
this.label4.Name = "label4"; | |||
this.label4.Size = new System.Drawing.Size(70, 13); | |||
this.label4.TabIndex = 13; | |||
this.label4.Text = "Trigger Type:"; | |||
// | |||
// label5 | |||
// | |||
this.label5.AutoSize = true; | |||
this.label5.Location = new System.Drawing.Point(29, 207); | |||
this.label5.Name = "label5"; | |||
this.label5.Size = new System.Drawing.Size(99, 13); | |||
this.label5.TabIndex = 14; | |||
this.label5.Text = "Trigger Description:"; | |||
// | |||
// label6 | |||
// | |||
this.label6.AutoSize = true; | |||
this.label6.Location = new System.Drawing.Point(29, 180); | |||
this.label6.Name = "label6"; | |||
this.label6.Size = new System.Drawing.Size(74, 13); | |||
this.label6.TabIndex = 15; | |||
this.label6.Text = "Trigger Name:"; | |||
// | |||
// label7 | |||
// | |||
this.label7.AutoSize = true; | |||
this.label7.Location = new System.Drawing.Point(29, 153); | |||
this.label7.Name = "label7"; | |||
this.label7.Size = new System.Drawing.Size(75, 13); | |||
this.label7.TabIndex = 16; | |||
this.label7.Text = "Trigger Group:"; | |||
// | |||
// label8 | |||
// | |||
this.label8.AutoSize = true; | |||
this.label8.Location = new System.Drawing.Point(29, 234); | |||
this.label8.Name = "label8"; | |||
this.label8.Size = new System.Drawing.Size(86, 13); | |||
this.label8.TabIndex = 17; | |||
this.label8.Text = "Cron Expression:"; | |||
// | |||
// lblJobDescription | |||
// | |||
this.lblJobDescription.AutoSize = true; | |||
this.lblJobDescription.Location = new System.Drawing.Point(29, 98); | |||
this.lblJobDescription.Name = "lblJobDescription"; | |||
this.lblJobDescription.Size = new System.Drawing.Size(83, 13); | |||
this.lblJobDescription.TabIndex = 19; | |||
this.lblJobDescription.Text = "Job Description:"; | |||
// | |||
// txtJobDescription | |||
// | |||
this.txtJobDescription.Location = new System.Drawing.Point(131, 95); | |||
this.txtJobDescription.Name = "txtJobDescription"; | |||
this.txtJobDescription.Size = new System.Drawing.Size(277, 20); | |||
this.txtJobDescription.TabIndex = 18; | |||
// | |||
// jobDataListView | |||
// | |||
this.jobDataListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { | |||
this.columnHeader1, | |||
this.columnHeader2}); | |||
this.jobDataListView.FullRowSelect = true; | |||
this.jobDataListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; | |||
this.jobDataListView.Location = new System.Drawing.Point(559, 43); | |||
this.jobDataListView.MultiSelect = false; | |||
this.jobDataListView.Name = "jobDataListView"; | |||
this.jobDataListView.Size = new System.Drawing.Size(233, 99); | |||
this.jobDataListView.TabIndex = 20; | |||
this.jobDataListView.UseCompatibleStateImageBehavior = false; | |||
this.jobDataListView.View = System.Windows.Forms.View.Details; | |||
// | |||
// columnHeader1 | |||
// | |||
this.columnHeader1.Text = "Key"; | |||
this.columnHeader1.Width = 82; | |||
// | |||
// columnHeader2 | |||
// | |||
this.columnHeader2.Text = "Value"; | |||
this.columnHeader2.Width = 145; | |||
// | |||
// label10 | |||
// | |||
this.label10.AutoSize = true; | |||
this.label10.Location = new System.Drawing.Point(556, 17); | |||
this.label10.Name = "label10"; | |||
this.label10.Size = new System.Drawing.Size(53, 13); | |||
this.label10.TabIndex = 21; | |||
this.label10.Text = "Job Data:"; | |||
// | |||
// label11 | |||
// | |||
this.label11.AutoSize = true; | |||
this.label11.Location = new System.Drawing.Point(560, 162); | |||
this.label11.Name = "label11"; | |||
this.label11.Size = new System.Drawing.Size(28, 13); | |||
this.label11.TabIndex = 23; | |||
this.label11.Text = "Key:"; | |||
// | |||
// txtKey | |||
// | |||
this.txtKey.Location = new System.Drawing.Point(604, 159); | |||
this.txtKey.Name = "txtKey"; | |||
this.txtKey.Size = new System.Drawing.Size(188, 20); | |||
this.txtKey.TabIndex = 22; | |||
// | |||
// label12 | |||
// | |||
this.label12.AutoSize = true; | |||
this.label12.Location = new System.Drawing.Point(560, 188); | |||
this.label12.Name = "label12"; | |||
this.label12.Size = new System.Drawing.Size(37, 13); | |||
this.label12.TabIndex = 25; | |||
this.label12.Text = "Value:"; | |||
// | |||
// txtValue | |||
// | |||
this.txtValue.Location = new System.Drawing.Point(604, 185); | |||
this.txtValue.Name = "txtValue"; | |||
this.txtValue.Size = new System.Drawing.Size(188, 20); | |||
this.txtValue.TabIndex = 24; | |||
// | |||
// btnAddKeyValue | |||
// | |||
this.btnAddKeyValue.Location = new System.Drawing.Point(559, 211); | |||
this.btnAddKeyValue.Name = "btnAddKeyValue"; | |||
this.btnAddKeyValue.Size = new System.Drawing.Size(50, 23); | |||
this.btnAddKeyValue.TabIndex = 26; | |||
this.btnAddKeyValue.Text = "Add"; | |||
this.btnAddKeyValue.UseVisualStyleBackColor = true; | |||
this.btnAddKeyValue.Click += new System.EventHandler(this.btnAddKeyValue_Click); | |||
// | |||
// btnDelete | |||
// | |||
this.btnDelete.Location = new System.Drawing.Point(798, 41); | |||
this.btnDelete.Name = "btnDelete"; | |||
this.btnDelete.Size = new System.Drawing.Size(52, 23); | |||
this.btnDelete.TabIndex = 27; | |||
this.btnDelete.Text = "Delete"; | |||
this.btnDelete.UseVisualStyleBackColor = true; | |||
this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); | |||
// | |||
// AddJobForm | |||
// | |||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | |||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | |||
this.ClientSize = new System.Drawing.Size(1044, 338); | |||
this.Controls.Add(this.btnDelete); | |||
this.Controls.Add(this.btnAddKeyValue); | |||
this.Controls.Add(this.label12); | |||
this.Controls.Add(this.txtValue); | |||
this.Controls.Add(this.label11); | |||
this.Controls.Add(this.txtKey); | |||
this.Controls.Add(this.label10); | |||
this.Controls.Add(this.jobDataListView); | |||
this.Controls.Add(this.lblJobDescription); | |||
this.Controls.Add(this.txtJobDescription); | |||
this.Controls.Add(this.label8); | |||
this.Controls.Add(this.label7); | |||
this.Controls.Add(this.label6); | |||
this.Controls.Add(this.label5); | |||
this.Controls.Add(this.label4); | |||
this.Controls.Add(this.label3); | |||
this.Controls.Add(this.label2); | |||
this.Controls.Add(this.txtCronExpression); | |||
this.Controls.Add(this.txtTriggerGroup); | |||
this.Controls.Add(this.txtTriggerName); | |||
this.Controls.Add(this.txtTriggerDescription); | |||
this.Controls.Add(this.txtJobName); | |||
this.Controls.Add(this.txtJobGroup); | |||
this.Controls.Add(this.label1); | |||
this.Controls.Add(this.cboTriggerType); | |||
this.Controls.Add(this.cboJobType); | |||
this.Controls.Add(this.btnCancel); | |||
this.Controls.Add(this.btnAdd); | |||
this.Name = "AddJobForm"; | |||
this.Text = "AddJobForm"; | |||
this.ResumeLayout(false); | |||
this.PerformLayout(); | |||
} | |||
#endregion | |||
private System.Windows.Forms.Button btnAdd; | |||
private System.Windows.Forms.Button btnCancel; | |||
private System.Windows.Forms.ComboBox cboJobType; | |||
private System.Windows.Forms.ComboBox cboTriggerType; | |||
private System.Windows.Forms.Label label1; | |||
private System.Windows.Forms.TextBox txtJobGroup; | |||
private System.Windows.Forms.TextBox txtJobName; | |||
private System.Windows.Forms.TextBox txtTriggerName; | |||
private System.Windows.Forms.TextBox txtTriggerDescription; | |||
private System.Windows.Forms.TextBox txtCronExpression; | |||
private System.Windows.Forms.TextBox txtTriggerGroup; | |||
private System.Windows.Forms.Label label2; | |||
private System.Windows.Forms.Label label3; | |||
private System.Windows.Forms.Label label4; | |||
private System.Windows.Forms.Label label5; | |||
private System.Windows.Forms.Label label6; | |||
private System.Windows.Forms.Label label7; | |||
private System.Windows.Forms.Label label8; | |||
private System.Windows.Forms.Label lblJobDescription; | |||
private System.Windows.Forms.TextBox txtJobDescription; | |||
private System.Windows.Forms.ListView jobDataListView; | |||
private System.Windows.Forms.Label label10; | |||
private System.Windows.Forms.Label label11; | |||
private System.Windows.Forms.TextBox txtKey; | |||
private System.Windows.Forms.Label label12; | |||
private System.Windows.Forms.TextBox txtValue; | |||
private System.Windows.Forms.Button btnAddKeyValue; | |||
private System.Windows.Forms.Button btnDelete; | |||
private System.Windows.Forms.ColumnHeader columnHeader1; | |||
private System.Windows.Forms.ColumnHeader columnHeader2; | |||
} | |||
} |
@@ -0,0 +1,176 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.ComponentModel; | |||
using System.Data; | |||
using System.Drawing; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
using Quartz; | |||
using System.Reflection; | |||
using Quartz.Job; | |||
using System.IO; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public partial class AddJobForm : Form | |||
{ | |||
public AddJobForm() | |||
{ | |||
InitializeComponent(); | |||
loadJobAssemblies(); | |||
cboTriggerType.Items.Add("Cron"); | |||
cboTriggerType.SelectedItem = "Cron"; | |||
if (cboJobType.SelectedText == "NativeJob") | |||
{ | |||
jobDataListView.Items.Add(new ListViewItem(new string[] { "consumeStreams", "true" })); | |||
jobDataListView.Items.Add(new ListViewItem(new string[] { "waitForProcess", "true" })); | |||
txtKey.Text = "command"; | |||
} | |||
} | |||
private void loadJobAssemblies() | |||
{ | |||
FileStream stream = File.OpenRead("JobAssemblies.txt"); | |||
StreamReader reader = new StreamReader(stream); | |||
string line; | |||
SortedList<string, string> jobTypes = new SortedList<string, string>(); | |||
while ((line = reader.ReadLine()) != null) | |||
{ | |||
Assembly assembly = Assembly.LoadFile(Environment.CurrentDirectory + "\\" + line); | |||
foreach (Type type in assembly.GetTypes()) | |||
{ | |||
if (typeof(IJob).IsAssignableFrom(type)) | |||
{ | |||
jobTypes.Add(type.FullName, assembly.GetName().Name); | |||
} | |||
} | |||
} | |||
foreach (var item in jobTypes) | |||
{ | |||
cboJobType.Items.Add(new JobType() { AssemblyName = item.Value, FullName = item.Key }); | |||
} | |||
//cboJobType.Items.AddRange(jobTypes.Values.ToArray<string>()); | |||
} | |||
public AddJobForm(TriggerNode node) | |||
: this() | |||
{ | |||
setTriggerData((CronTrigger)node.Trigger); | |||
setJobData(((JobNode)node.Parent.Parent).Detail); | |||
} | |||
private void setTriggerData(CronTrigger trigger) | |||
{ | |||
setTriggerType(); | |||
txtCronExpression.Text = trigger.CronExpressionString; | |||
txtTriggerDescription.Text = trigger.Description; | |||
txtTriggerGroup.Text = trigger.Group; | |||
txtTriggerName.Text = trigger.Name; | |||
} | |||
private void setJobData(JobDetail detail) | |||
{ | |||
setJobType(detail); | |||
txtJobDescription.Text = detail.Description; | |||
txtJobGroup.Text = detail.Group; | |||
txtJobName.Text = detail.Name; | |||
setJobDataMap(detail); | |||
} | |||
private void setJobDataMap(JobDetail detail) | |||
{ | |||
jobDataListView.Items.Clear(); | |||
foreach (var item in detail.JobDataMap.GetKeys()) | |||
{ | |||
jobDataListView.Items.Add(new ListViewItem(new string[] { item, detail.JobDataMap.Get(item).ToString() })); | |||
} | |||
} | |||
private void setJobType(JobDetail detail) | |||
{ | |||
cboJobType.SelectedItem = detail.JobType.FullName; | |||
} | |||
private void setTriggerType() | |||
{ | |||
//nothing to do right now | |||
} | |||
public JobDetail JobDetail { get; set; } | |||
public Trigger Trigger { get; set; } | |||
private void btnCancel_Click(object sender, EventArgs e) | |||
{ | |||
this.Close(); | |||
} | |||
private void btnAdd_Click(object sender, EventArgs e) | |||
{ | |||
JobDetail = getJobDetail(); | |||
Trigger = getTrigger(); | |||
Trigger.JobGroup = JobDetail.Group; | |||
Trigger.JobName = JobDetail.Name; | |||
this.Close(); | |||
} | |||
private JobDetail getJobDetail() | |||
{ | |||
JobDetail detail = new JobDetail(); | |||
detail.Description = txtJobDescription.Text; | |||
detail.Group = txtJobGroup.Text; | |||
detail.JobDataMap = getJobDataMap(); | |||
detail.JobType = getJobType(); | |||
detail.Name = txtJobName.Text; | |||
return detail; | |||
} | |||
private Trigger getTrigger() | |||
{ | |||
Trigger trigger; | |||
if (cboTriggerType.SelectedText == "Simple") | |||
{ | |||
trigger = new SimpleTrigger(); | |||
} | |||
else | |||
{ | |||
trigger = new CronTrigger(); | |||
((CronTrigger)trigger).CronExpressionString = txtCronExpression.Text; | |||
} | |||
trigger.Description = txtTriggerDescription.Text; | |||
trigger.Group = txtTriggerGroup.Text; | |||
trigger.Name = txtTriggerName.Text; | |||
return trigger; | |||
} | |||
private Type getJobType() | |||
{ | |||
JobType type = (JobType)cboJobType.SelectedItem; | |||
return Type.GetType(type.FullName + "," + type.AssemblyName, true); | |||
} | |||
private JobDataMap getJobDataMap() | |||
{ | |||
JobDataMap map = new JobDataMap(); | |||
foreach (ListViewItem item in jobDataListView.Items) | |||
{ | |||
map.Add(item.SubItems[0].Text, item.SubItems[1].Text); | |||
} | |||
return map; | |||
} | |||
private void btnAddKeyValue_Click(object sender, EventArgs e) | |||
{ | |||
ListViewItem item = new ListViewItem(new string[] { txtKey.Text, txtValue.Text }); | |||
jobDataListView.Items.Add(item); | |||
} | |||
private void btnDelete_Click(object sender, EventArgs e) | |||
{ | |||
foreach (ListViewItem item in jobDataListView.SelectedItems) | |||
{ | |||
jobDataListView.Items.Remove(item); | |||
} | |||
} | |||
} | |||
} |
@@ -0,0 +1,120 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<root> | |||
<!-- | |||
Microsoft ResX Schema | |||
Version 2.0 | |||
The primary goals of this format is to allow a simple XML format | |||
that is mostly human readable. The generation and parsing of the | |||
various data types are done through the TypeConverter classes | |||
associated with the data types. | |||
Example: | |||
... ado.net/XML headers & schema ... | |||
<resheader name="resmimetype">text/microsoft-resx</resheader> | |||
<resheader name="version">2.0</resheader> | |||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |||
<value>[base64 mime encoded serialized .NET Framework object]</value> | |||
</data> | |||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |||
<comment>This is a comment</comment> | |||
</data> | |||
There are any number of "resheader" rows that contain simple | |||
name/value pairs. | |||
Each data row contains a name, and value. The row also contains a | |||
type or mimetype. Type corresponds to a .NET class that support | |||
text/value conversion through the TypeConverter architecture. | |||
Classes that don't support this are serialized and stored with the | |||
mimetype set. | |||
The mimetype is used for serialized objects, and tells the | |||
ResXResourceReader how to depersist the object. This is currently not | |||
extensible. For a given mimetype the value must be set accordingly: | |||
Note - application/x-microsoft.net.object.binary.base64 is the format | |||
that the ResXResourceWriter will generate, however the reader can | |||
read any of the formats listed below. | |||
mimetype: application/x-microsoft.net.object.binary.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.soap.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.bytearray.base64 | |||
value : The object must be serialized into a byte array | |||
: using a System.ComponentModel.TypeConverter | |||
: and then encoded with base64 encoding. | |||
--> | |||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | |||
<xsd:element name="root" msdata:IsDataSet="true"> | |||
<xsd:complexType> | |||
<xsd:choice maxOccurs="unbounded"> | |||
<xsd:element name="metadata"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" use="required" type="xsd:string" /> | |||
<xsd:attribute name="type" type="xsd:string" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="assembly"> | |||
<xsd:complexType> | |||
<xsd:attribute name="alias" type="xsd:string" /> | |||
<xsd:attribute name="name" type="xsd:string" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="data"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | |||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="resheader"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:choice> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:schema> | |||
<resheader name="resmimetype"> | |||
<value>text/microsoft-resx</value> | |||
</resheader> | |||
<resheader name="version"> | |||
<value>2.0</value> | |||
</resheader> | |||
<resheader name="reader"> | |||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
<resheader name="writer"> | |||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
</root> |
@@ -0,0 +1,118 @@ | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
partial class AddListenerForm | |||
{ | |||
/// <summary> | |||
/// Required designer variable. | |||
/// </summary> | |||
private System.ComponentModel.IContainer components = null; | |||
/// <summary> | |||
/// Clean up any resources being used. | |||
/// </summary> | |||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | |||
protected override void Dispose(bool disposing) | |||
{ | |||
if (disposing && (components != null)) | |||
{ | |||
components.Dispose(); | |||
} | |||
base.Dispose(disposing); | |||
} | |||
#region Windows Form Designer generated code | |||
/// <summary> | |||
/// Required method for Designer support - do not modify | |||
/// the contents of this method with the code editor. | |||
/// </summary> | |||
private void InitializeComponent() | |||
{ | |||
this.txtListenerName = new System.Windows.Forms.TextBox(); | |||
this.label1 = new System.Windows.Forms.Label(); | |||
this.label2 = new System.Windows.Forms.Label(); | |||
this.btnAdd = new System.Windows.Forms.Button(); | |||
this.btnCancel = new System.Windows.Forms.Button(); | |||
this.txtListenerType = new System.Windows.Forms.TextBox(); | |||
this.SuspendLayout(); | |||
// | |||
// txtListenerName | |||
// | |||
this.txtListenerName.Location = new System.Drawing.Point(98, 12); | |||
this.txtListenerName.Name = "txtListenerName"; | |||
this.txtListenerName.Size = new System.Drawing.Size(100, 20); | |||
this.txtListenerName.TabIndex = 7; | |||
// | |||
// label1 | |||
// | |||
this.label1.AutoSize = true; | |||
this.label1.Location = new System.Drawing.Point(21, 15); | |||
this.label1.Name = "label1"; | |||
this.label1.Size = new System.Drawing.Size(38, 13); | |||
this.label1.TabIndex = 6; | |||
this.label1.Text = "Name:"; | |||
// | |||
// label2 | |||
// | |||
this.label2.AutoSize = true; | |||
this.label2.Location = new System.Drawing.Point(21, 41); | |||
this.label2.Name = "label2"; | |||
this.label2.Size = new System.Drawing.Size(74, 13); | |||
this.label2.TabIndex = 9; | |||
this.label2.Text = "Listener Type:"; | |||
// | |||
// btnAdd | |||
// | |||
this.btnAdd.Location = new System.Drawing.Point(24, 75); | |||
this.btnAdd.Name = "btnAdd"; | |||
this.btnAdd.Size = new System.Drawing.Size(75, 23); | |||
this.btnAdd.TabIndex = 10; | |||
this.btnAdd.Text = "Add"; | |||
this.btnAdd.UseVisualStyleBackColor = true; | |||
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click); | |||
// | |||
// btnCancel | |||
// | |||
this.btnCancel.Location = new System.Drawing.Point(123, 75); | |||
this.btnCancel.Name = "btnCancel"; | |||
this.btnCancel.Size = new System.Drawing.Size(75, 23); | |||
this.btnCancel.TabIndex = 11; | |||
this.btnCancel.Text = "Cancel"; | |||
this.btnCancel.UseVisualStyleBackColor = true; | |||
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); | |||
// | |||
// txtListenerType | |||
// | |||
this.txtListenerType.Location = new System.Drawing.Point(98, 38); | |||
this.txtListenerType.Name = "txtListenerType"; | |||
this.txtListenerType.Size = new System.Drawing.Size(100, 20); | |||
this.txtListenerType.TabIndex = 12; | |||
// | |||
// AddListenerForm | |||
// | |||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | |||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | |||
this.ClientSize = new System.Drawing.Size(360, 110); | |||
this.Controls.Add(this.txtListenerType); | |||
this.Controls.Add(this.btnCancel); | |||
this.Controls.Add(this.btnAdd); | |||
this.Controls.Add(this.label2); | |||
this.Controls.Add(this.txtListenerName); | |||
this.Controls.Add(this.label1); | |||
this.Name = "AddListenerForm"; | |||
this.Text = "AddListenerForm"; | |||
this.ResumeLayout(false); | |||
this.PerformLayout(); | |||
} | |||
#endregion | |||
private System.Windows.Forms.TextBox txtListenerName; | |||
private System.Windows.Forms.Label label1; | |||
private System.Windows.Forms.Label label2; | |||
private System.Windows.Forms.Button btnAdd; | |||
private System.Windows.Forms.Button btnCancel; | |||
private System.Windows.Forms.TextBox txtListenerType; | |||
} | |||
} |
@@ -0,0 +1,68 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.ComponentModel; | |||
using System.Data; | |||
using System.Drawing; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
using System.Reflection; | |||
//using ClickForensics.Quartz.Jobs; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public partial class AddListenerForm : Form | |||
{ | |||
public AddListenerForm() | |||
{ | |||
InitializeComponent(); | |||
this.Load += new EventHandler(AddListenerForm_Load); | |||
} | |||
void AddListenerForm_Load(object sender, EventArgs e) | |||
{ | |||
//loadListenerTypes(); | |||
} | |||
private List<Type> getListenerTypes() | |||
{ | |||
//JobHistoryListener listener = new JobHistoryListener(); | |||
List<Type> types = new List<Type>(); | |||
Type theThing = ListenerInterface.BaseType; | |||
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) | |||
{ | |||
foreach (Type type in assembly.GetTypes()) | |||
{ | |||
if (ListenerInterface.UnderlyingSystemType.IsAssignableFrom(type)) | |||
{ | |||
types.Add(type); | |||
} | |||
} | |||
} | |||
return types; | |||
} | |||
//private void loadListenerTypes() | |||
//{ | |||
// listenerTypeCombo.Items.Clear(); | |||
// foreach (var type in getListenerTypes()) | |||
// { | |||
// listenerTypeCombo.Items.Add(type); | |||
// } | |||
//} | |||
public Type ListenerInterface { get; set; } | |||
public string ListenerType { get; set; } | |||
public string ListenerName { get; set; } | |||
private void btnCancel_Click(object sender, EventArgs e) | |||
{ | |||
this.Close(); | |||
} | |||
private void btnAdd_Click(object sender, EventArgs e) | |||
{ | |||
ListenerName=txtListenerName.Text; | |||
ListenerType = txtListenerType.Text; | |||
this.Close(); | |||
} | |||
} | |||
} |
@@ -0,0 +1,120 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<root> | |||
<!-- | |||
Microsoft ResX Schema | |||
Version 2.0 | |||
The primary goals of this format is to allow a simple XML format | |||
that is mostly human readable. The generation and parsing of the | |||
various data types are done through the TypeConverter classes | |||
associated with the data types. | |||
Example: | |||
... ado.net/XML headers & schema ... | |||
<resheader name="resmimetype">text/microsoft-resx</resheader> | |||
<resheader name="version">2.0</resheader> | |||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |||
<value>[base64 mime encoded serialized .NET Framework object]</value> | |||
</data> | |||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |||
<comment>This is a comment</comment> | |||
</data> | |||
There are any number of "resheader" rows that contain simple | |||
name/value pairs. | |||
Each data row contains a name, and value. The row also contains a | |||
type or mimetype. Type corresponds to a .NET class that support | |||
text/value conversion through the TypeConverter architecture. | |||
Classes that don't support this are serialized and stored with the | |||
mimetype set. | |||
The mimetype is used for serialized objects, and tells the | |||
ResXResourceReader how to depersist the object. This is currently not | |||
extensible. For a given mimetype the value must be set accordingly: | |||
Note - application/x-microsoft.net.object.binary.base64 is the format | |||
that the ResXResourceWriter will generate, however the reader can | |||
read any of the formats listed below. | |||
mimetype: application/x-microsoft.net.object.binary.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.soap.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.bytearray.base64 | |||
value : The object must be serialized into a byte array | |||
: using a System.ComponentModel.TypeConverter | |||
: and then encoded with base64 encoding. | |||
--> | |||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | |||
<xsd:element name="root" msdata:IsDataSet="true"> | |||
<xsd:complexType> | |||
<xsd:choice maxOccurs="unbounded"> | |||
<xsd:element name="metadata"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" use="required" type="xsd:string" /> | |||
<xsd:attribute name="type" type="xsd:string" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="assembly"> | |||
<xsd:complexType> | |||
<xsd:attribute name="alias" type="xsd:string" /> | |||
<xsd:attribute name="name" type="xsd:string" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="data"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | |||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="resheader"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:choice> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:schema> | |||
<resheader name="resmimetype"> | |||
<value>text/microsoft-resx</value> | |||
</resheader> | |||
<resheader name="version"> | |||
<value>2.0</value> | |||
</resheader> | |||
<resheader name="reader"> | |||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
<resheader name="writer"> | |||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
</root> |
@@ -0,0 +1,200 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
<PropertyGroup> | |||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||
<ProductVersion>9.0.30729</ProductVersion> | |||
<SchemaVersion>2.0</SchemaVersion> | |||
<ProjectGuid>{D23DACFA-11A1-480E-A6C4-1F37B564523D}</ProjectGuid> | |||
<OutputType>WinExe</OutputType> | |||
<AppDesignerFolder>Properties</AppDesignerFolder> | |||
<RootNamespace>ClickForensics.Quartz.Manager</RootNamespace> | |||
<AssemblyName>ClickForensics.Quartz.Manager</AssemblyName> | |||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> | |||
<FileAlignment>512</FileAlignment> | |||
<FileUpgradeFlags> | |||
</FileUpgradeFlags> | |||
<OldToolsVersion>3.5</OldToolsVersion> | |||
<UpgradeBackupLocation /> | |||
<TargetFrameworkProfile /> | |||
<PublishUrl>publish\</PublishUrl> | |||
<Install>true</Install> | |||
<InstallFrom>Disk</InstallFrom> | |||
<UpdateEnabled>false</UpdateEnabled> | |||
<UpdateMode>Foreground</UpdateMode> | |||
<UpdateInterval>7</UpdateInterval> | |||
<UpdateIntervalUnits>Days</UpdateIntervalUnits> | |||
<UpdatePeriodically>false</UpdatePeriodically> | |||
<UpdateRequired>false</UpdateRequired> | |||
<MapFileExtensions>true</MapFileExtensions> | |||
<ApplicationRevision>0</ApplicationRevision> | |||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion> | |||
<IsWebBootstrapper>false</IsWebBootstrapper> | |||
<UseApplicationTrust>false</UseApplicationTrust> | |||
<BootstrapperEnabled>true</BootstrapperEnabled> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||
<DebugSymbols>true</DebugSymbols> | |||
<DebugType>full</DebugType> | |||
<Optimize>false</Optimize> | |||
<OutputPath>bin\Debug\</OutputPath> | |||
<DefineConstants>DEBUG;TRACE</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
</PropertyGroup> | |||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||
<DebugType>pdbonly</DebugType> | |||
<Optimize>true</Optimize> | |||
<OutputPath>bin\Release\</OutputPath> | |||
<DefineConstants>TRACE</DefineConstants> | |||
<ErrorReport>prompt</ErrorReport> | |||
<WarningLevel>4</WarningLevel> | |||
</PropertyGroup> | |||
<ItemGroup> | |||
<Reference Include="Common.Logging"> | |||
<HintPath>..\lib\Common.Logging.dll</HintPath> | |||
</Reference> | |||
<Reference Include="Quartz, Version=1.0.3.3, Culture=neutral, PublicKeyToken=f6b8c98a402cc8a4, processorArchitecture=MSIL"> | |||
<SpecificVersion>False</SpecificVersion> | |||
<HintPath>..\lib\Quartz.dll</HintPath> | |||
</Reference> | |||
<Reference Include="System" /> | |||
<Reference Include="System.configuration" /> | |||
<Reference Include="System.Core"> | |||
<RequiredTargetFramework>3.5</RequiredTargetFramework> | |||
</Reference> | |||
<Reference Include="System.Xml.Linq"> | |||
<RequiredTargetFramework>3.5</RequiredTargetFramework> | |||
</Reference> | |||
<Reference Include="System.Data.DataSetExtensions"> | |||
<RequiredTargetFramework>3.5</RequiredTargetFramework> | |||
</Reference> | |||
<Reference Include="System.Data" /> | |||
<Reference Include="System.Deployment" /> | |||
<Reference Include="System.Drawing" /> | |||
<Reference Include="System.Windows.Forms" /> | |||
<Reference Include="System.Xml" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Compile Include="AddJobForm.cs"> | |||
<SubType>Form</SubType> | |||
</Compile> | |||
<Compile Include="AddJobForm.Designer.cs"> | |||
<DependentUpon>AddJobForm.cs</DependentUpon> | |||
</Compile> | |||
<Compile Include="AddListenerForm.cs"> | |||
<SubType>Form</SubType> | |||
</Compile> | |||
<Compile Include="AddListenerForm.Designer.cs"> | |||
<DependentUpon>AddListenerForm.cs</DependentUpon> | |||
</Compile> | |||
<Compile Include="ErrorDialog.cs"> | |||
<SubType>Form</SubType> | |||
</Compile> | |||
<Compile Include="ErrorDialog.Designer.cs"> | |||
<DependentUpon>ErrorDialog.cs</DependentUpon> | |||
</Compile> | |||
<Compile Include="JobType.cs" /> | |||
<Compile Include="NativeJobDetailDisplay.cs"> | |||
<SubType>UserControl</SubType> | |||
</Compile> | |||
<Compile Include="NativeJobDetailDisplay.Designer.cs"> | |||
<DependentUpon>NativeJobDetailDisplay.cs</DependentUpon> | |||
</Compile> | |||
<Compile Include="JobNode.cs" /> | |||
<Compile Include="MainForm.cs"> | |||
<SubType>Form</SubType> | |||
</Compile> | |||
<Compile Include="MainForm.Designer.cs"> | |||
<DependentUpon>MainForm.cs</DependentUpon> | |||
</Compile> | |||
<Compile Include="Program.cs" /> | |||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||
<EmbeddedResource Include="AddJobForm.resx"> | |||
<DependentUpon>AddJobForm.cs</DependentUpon> | |||
</EmbeddedResource> | |||
<EmbeddedResource Include="AddListenerForm.resx"> | |||
<DependentUpon>AddListenerForm.cs</DependentUpon> | |||
</EmbeddedResource> | |||
<EmbeddedResource Include="CronTriggerDisplay.resx"> | |||
<DependentUpon>CronTriggerDisplay.cs</DependentUpon> | |||
</EmbeddedResource> | |||
<EmbeddedResource Include="ErrorDialog.resx"> | |||
<DependentUpon>ErrorDialog.cs</DependentUpon> | |||
</EmbeddedResource> | |||
<EmbeddedResource Include="MainForm.resx"> | |||
<DependentUpon>MainForm.cs</DependentUpon> | |||
</EmbeddedResource> | |||
<EmbeddedResource Include="NativeJobDetailDisplay.resx"> | |||
<DependentUpon>NativeJobDetailDisplay.cs</DependentUpon> | |||
</EmbeddedResource> | |||
<EmbeddedResource Include="Properties\Resources.resx"> | |||
<Generator>ResXFileCodeGenerator</Generator> | |||
<LastGenOutput>Resources.Designer.cs</LastGenOutput> | |||
<SubType>Designer</SubType> | |||
</EmbeddedResource> | |||
<EmbeddedResource Include="ServerConnectForm.resx"> | |||
<DependentUpon>ServerConnectForm.cs</DependentUpon> | |||
</EmbeddedResource> | |||
<Compile Include="Properties\Resources.Designer.cs"> | |||
<AutoGen>True</AutoGen> | |||
<DependentUpon>Resources.resx</DependentUpon> | |||
<DesignTime>True</DesignTime> | |||
</Compile> | |||
<None Include="app.config" /> | |||
<None Include="Properties\Settings.settings"> | |||
<Generator>SettingsSingleFileGenerator</Generator> | |||
<LastGenOutput>Settings.Designer.cs</LastGenOutput> | |||
</None> | |||
<Compile Include="Properties\Settings.Designer.cs"> | |||
<AutoGen>True</AutoGen> | |||
<DependentUpon>Settings.settings</DependentUpon> | |||
<DesignTimeSharedInput>True</DesignTimeSharedInput> | |||
</Compile> | |||
<Compile Include="QuartzScheduler.cs" /> | |||
<Compile Include="SchedulerNode.cs" /> | |||
<Compile Include="ServerConnectForm.cs"> | |||
<SubType>Form</SubType> | |||
</Compile> | |||
<Compile Include="ServerConnectForm.Designer.cs"> | |||
<DependentUpon>ServerConnectForm.cs</DependentUpon> | |||
</Compile> | |||
<Compile Include="CronTriggerDisplay.cs"> | |||
<SubType>UserControl</SubType> | |||
</Compile> | |||
<Compile Include="CronTriggerDisplay.Designer.cs"> | |||
<DependentUpon>CronTriggerDisplay.cs</DependentUpon> | |||
</Compile> | |||
<Compile Include="TriggerNode.cs" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<Content Include="JobAssemblies.txt"> | |||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> | |||
</Content> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<BootstrapperPackage Include="Microsoft.Net.Client.3.5"> | |||
<Visible>False</Visible> | |||
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName> | |||
<Install>false</Install> | |||
</BootstrapperPackage> | |||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> | |||
<Visible>False</Visible> | |||
<ProductName>.NET Framework 3.5 SP1</ProductName> | |||
<Install>true</Install> | |||
</BootstrapperPackage> | |||
<BootstrapperPackage Include="Microsoft.Windows.Installer.3.1"> | |||
<Visible>False</Visible> | |||
<ProductName>Windows Installer 3.1</ProductName> | |||
<Install>true</Install> | |||
</BootstrapperPackage> | |||
</ItemGroup> | |||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||
Other similar extension points exist, see Microsoft.Common.targets. | |||
<Target Name="BeforeBuild"> | |||
</Target> | |||
<Target Name="AfterBuild"> | |||
</Target> | |||
--> | |||
</Project> |
@@ -0,0 +1,191 @@ | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
partial class CronTriggerDisplay | |||
{ | |||
/// <summary> | |||
/// Required designer variable. | |||
/// </summary> | |||
private System.ComponentModel.IContainer components = null; | |||
/// <summary> | |||
/// Clean up any resources being used. | |||
/// </summary> | |||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | |||
protected override void Dispose(bool disposing) | |||
{ | |||
if (disposing && (components != null)) | |||
{ | |||
components.Dispose(); | |||
} | |||
base.Dispose(disposing); | |||
} | |||
#region Component Designer generated code | |||
/// <summary> | |||
/// Required method for Designer support - do not modify | |||
/// the contents of this method with the code editor. | |||
/// </summary> | |||
private void InitializeComponent() | |||
{ | |||
this.label1 = new System.Windows.Forms.Label(); | |||
this.lblName = new System.Windows.Forms.Label(); | |||
this.label3 = new System.Windows.Forms.Label(); | |||
this.lblGroup = new System.Windows.Forms.Label(); | |||
this.label5 = new System.Windows.Forms.Label(); | |||
this.lblDescription = new System.Windows.Forms.Label(); | |||
this.label7 = new System.Windows.Forms.Label(); | |||
this.lblPreviousFireTime = new System.Windows.Forms.Label(); | |||
this.label9 = new System.Windows.Forms.Label(); | |||
this.lblNextFireTime = new System.Windows.Forms.Label(); | |||
this.label11 = new System.Windows.Forms.Label(); | |||
this.txtCronExpression = new System.Windows.Forms.TextBox(); | |||
this.SuspendLayout(); | |||
// | |||
// label1 | |||
// | |||
this.label1.AutoSize = true; | |||
this.label1.Location = new System.Drawing.Point(14, 26); | |||
this.label1.Name = "label1"; | |||
this.label1.Size = new System.Drawing.Size(86, 13); | |||
this.label1.TabIndex = 0; | |||
this.label1.Text = "Cron Expression:"; | |||
// | |||
// lblName | |||
// | |||
this.lblName.AutoSize = true; | |||
this.lblName.Location = new System.Drawing.Point(116, 47); | |||
this.lblName.Name = "lblName"; | |||
this.lblName.Size = new System.Drawing.Size(35, 13); | |||
this.lblName.TabIndex = 3; | |||
this.lblName.Text = "label2"; | |||
// | |||
// label3 | |||
// | |||
this.label3.AutoSize = true; | |||
this.label3.Location = new System.Drawing.Point(14, 47); | |||
this.label3.Name = "label3"; | |||
this.label3.Size = new System.Drawing.Size(38, 13); | |||
this.label3.TabIndex = 2; | |||
this.label3.Text = "Name:"; | |||
// | |||
// lblGroup | |||
// | |||
this.lblGroup.AutoSize = true; | |||
this.lblGroup.Location = new System.Drawing.Point(116, 68); | |||
this.lblGroup.Name = "lblGroup"; | |||
this.lblGroup.Size = new System.Drawing.Size(35, 13); | |||
this.lblGroup.TabIndex = 5; | |||
this.lblGroup.Text = "label4"; | |||
// | |||
// label5 | |||
// | |||
this.label5.AutoSize = true; | |||
this.label5.Location = new System.Drawing.Point(14, 68); | |||
this.label5.Name = "label5"; | |||
this.label5.Size = new System.Drawing.Size(39, 13); | |||
this.label5.TabIndex = 4; | |||
this.label5.Text = "Group:"; | |||
// | |||
// lblDescription | |||
// | |||
this.lblDescription.AutoSize = true; | |||
this.lblDescription.Location = new System.Drawing.Point(116, 89); | |||
this.lblDescription.Name = "lblDescription"; | |||
this.lblDescription.Size = new System.Drawing.Size(35, 13); | |||
this.lblDescription.TabIndex = 7; | |||
this.lblDescription.Text = "label6"; | |||
// | |||
// label7 | |||
// | |||
this.label7.AutoSize = true; | |||
this.label7.Location = new System.Drawing.Point(14, 89); | |||
this.label7.Name = "label7"; | |||
this.label7.Size = new System.Drawing.Size(63, 13); | |||
this.label7.TabIndex = 6; | |||
this.label7.Text = "Description:"; | |||
// | |||
// lblPreviousFireTime | |||
// | |||
this.lblPreviousFireTime.AutoSize = true; | |||
this.lblPreviousFireTime.Location = new System.Drawing.Point(116, 131); | |||
this.lblPreviousFireTime.Name = "lblPreviousFireTime"; | |||
this.lblPreviousFireTime.Size = new System.Drawing.Size(35, 13); | |||
this.lblPreviousFireTime.TabIndex = 9; | |||
this.lblPreviousFireTime.Text = "label8"; | |||
// | |||
// label9 | |||
// | |||
this.label9.AutoSize = true; | |||
this.label9.Location = new System.Drawing.Point(14, 131); | |||
this.label9.Name = "label9"; | |||
this.label9.Size = new System.Drawing.Size(97, 13); | |||
this.label9.TabIndex = 8; | |||
this.label9.Text = "Previous Fire Time:"; | |||
// | |||
// lblNextFireTime | |||
// | |||
this.lblNextFireTime.AutoSize = true; | |||
this.lblNextFireTime.Location = new System.Drawing.Point(116, 110); | |||
this.lblNextFireTime.Name = "lblNextFireTime"; | |||
this.lblNextFireTime.Size = new System.Drawing.Size(41, 13); | |||
this.lblNextFireTime.TabIndex = 11; | |||
this.lblNextFireTime.Text = "label10"; | |||
// | |||
// label11 | |||
// | |||
this.label11.AutoSize = true; | |||
this.label11.Location = new System.Drawing.Point(14, 110); | |||
this.label11.Name = "label11"; | |||
this.label11.Size = new System.Drawing.Size(78, 13); | |||
this.label11.TabIndex = 10; | |||
this.label11.Text = "Next Fire Time:"; | |||
// | |||
// txtCronExpression | |||
// | |||
this.txtCronExpression.Location = new System.Drawing.Point(119, 23); | |||
this.txtCronExpression.Name = "txtCronExpression"; | |||
this.txtCronExpression.ReadOnly = true; | |||
this.txtCronExpression.Size = new System.Drawing.Size(100, 20); | |||
this.txtCronExpression.TabIndex = 12; | |||
this.txtCronExpression.Text = "txtCronExpression"; | |||
// | |||
// CronTriggerDisplay | |||
// | |||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | |||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | |||
this.Controls.Add(this.txtCronExpression); | |||
this.Controls.Add(this.lblNextFireTime); | |||
this.Controls.Add(this.label11); | |||
this.Controls.Add(this.lblPreviousFireTime); | |||
this.Controls.Add(this.label9); | |||
this.Controls.Add(this.lblDescription); | |||
this.Controls.Add(this.label7); | |||
this.Controls.Add(this.lblGroup); | |||
this.Controls.Add(this.label5); | |||
this.Controls.Add(this.lblName); | |||
this.Controls.Add(this.label3); | |||
this.Controls.Add(this.label1); | |||
this.Name = "CronTriggerDisplay"; | |||
this.Size = new System.Drawing.Size(324, 168); | |||
this.ResumeLayout(false); | |||
this.PerformLayout(); | |||
} | |||
#endregion | |||
private System.Windows.Forms.Label label1; | |||
private System.Windows.Forms.Label lblName; | |||
private System.Windows.Forms.Label label3; | |||
private System.Windows.Forms.Label lblGroup; | |||
private System.Windows.Forms.Label label5; | |||
private System.Windows.Forms.Label lblDescription; | |||
private System.Windows.Forms.Label label7; | |||
private System.Windows.Forms.Label lblPreviousFireTime; | |||
private System.Windows.Forms.Label label9; | |||
private System.Windows.Forms.Label lblNextFireTime; | |||
private System.Windows.Forms.Label label11; | |||
private System.Windows.Forms.TextBox txtCronExpression; | |||
} | |||
} |
@@ -0,0 +1,54 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.ComponentModel; | |||
using System.Drawing; | |||
using System.Data; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
using Quartz; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public partial class CronTriggerDisplay : UserControl | |||
{ | |||
public CronTriggerDisplay() | |||
{ | |||
InitializeComponent(); | |||
this.Load += new EventHandler(CronTriggerDisplay_Load); | |||
} | |||
void CronTriggerDisplay_Load(object sender, EventArgs e) | |||
{ | |||
txtCronExpression.Text = _trigger.CronExpressionString; | |||
lblDescription.Text = _trigger.Description; | |||
lblGroup.Text = _trigger.Group; | |||
lblName.Text = _trigger.Name; | |||
if (_trigger.GetNextFireTimeUtc().HasValue) | |||
{ | |||
lblNextFireTime.Text = _trigger.GetNextFireTimeUtc().Value.ToLocalTime().ToString(); | |||
} | |||
else | |||
{ | |||
lblNextFireTime.Text = "Unknown"; | |||
} | |||
if (_trigger.GetPreviousFireTimeUtc().HasValue) | |||
{ | |||
lblPreviousFireTime.Text = _trigger.GetPreviousFireTimeUtc().Value.ToLocalTime().ToString(); | |||
} | |||
else | |||
{ | |||
lblPreviousFireTime.Text = "Unknown"; | |||
} | |||
} | |||
public CronTriggerDisplay(CronTrigger trigger) | |||
: this() | |||
{ | |||
_trigger = trigger; | |||
} | |||
private CronTrigger _trigger; | |||
} | |||
} |
@@ -0,0 +1,120 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<root> | |||
<!-- | |||
Microsoft ResX Schema | |||
Version 2.0 | |||
The primary goals of this format is to allow a simple XML format | |||
that is mostly human readable. The generation and parsing of the | |||
various data types are done through the TypeConverter classes | |||
associated with the data types. | |||
Example: | |||
... ado.net/XML headers & schema ... | |||
<resheader name="resmimetype">text/microsoft-resx</resheader> | |||
<resheader name="version">2.0</resheader> | |||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |||
<value>[base64 mime encoded serialized .NET Framework object]</value> | |||
</data> | |||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |||
<comment>This is a comment</comment> | |||
</data> | |||
There are any number of "resheader" rows that contain simple | |||
name/value pairs. | |||
Each data row contains a name, and value. The row also contains a | |||
type or mimetype. Type corresponds to a .NET class that support | |||
text/value conversion through the TypeConverter architecture. | |||
Classes that don't support this are serialized and stored with the | |||
mimetype set. | |||
The mimetype is used for serialized objects, and tells the | |||
ResXResourceReader how to depersist the object. This is currently not | |||
extensible. For a given mimetype the value must be set accordingly: | |||
Note - application/x-microsoft.net.object.binary.base64 is the format | |||
that the ResXResourceWriter will generate, however the reader can | |||
read any of the formats listed below. | |||
mimetype: application/x-microsoft.net.object.binary.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.soap.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.bytearray.base64 | |||
value : The object must be serialized into a byte array | |||
: using a System.ComponentModel.TypeConverter | |||
: and then encoded with base64 encoding. | |||
--> | |||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | |||
<xsd:element name="root" msdata:IsDataSet="true"> | |||
<xsd:complexType> | |||
<xsd:choice maxOccurs="unbounded"> | |||
<xsd:element name="metadata"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" use="required" type="xsd:string" /> | |||
<xsd:attribute name="type" type="xsd:string" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="assembly"> | |||
<xsd:complexType> | |||
<xsd:attribute name="alias" type="xsd:string" /> | |||
<xsd:attribute name="name" type="xsd:string" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="data"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | |||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="resheader"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:choice> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:schema> | |||
<resheader name="resmimetype"> | |||
<value>text/microsoft-resx</value> | |||
</resheader> | |||
<resheader name="version"> | |||
<value>2.0</value> | |||
</resheader> | |||
<resheader name="reader"> | |||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
<resheader name="writer"> | |||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
</root> |
@@ -0,0 +1,84 @@ | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
partial class ErrorDialog | |||
{ | |||
/// <summary> | |||
/// Required designer variable. | |||
/// </summary> | |||
private System.ComponentModel.IContainer components = null; | |||
/// <summary> | |||
/// Clean up any resources being used. | |||
/// </summary> | |||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | |||
protected override void Dispose(bool disposing) | |||
{ | |||
if (disposing && (components != null)) | |||
{ | |||
components.Dispose(); | |||
} | |||
base.Dispose(disposing); | |||
} | |||
#region Windows Form Designer generated code | |||
/// <summary> | |||
/// Required method for Designer support - do not modify | |||
/// the contents of this method with the code editor. | |||
/// </summary> | |||
private void InitializeComponent() | |||
{ | |||
this.btnOk = new System.Windows.Forms.Button(); | |||
this.lblMessage = new System.Windows.Forms.Label(); | |||
this.txtLongMessage = new System.Windows.Forms.TextBox(); | |||
this.SuspendLayout(); | |||
// | |||
// btnOk | |||
// | |||
this.btnOk.Location = new System.Drawing.Point(168, 184); | |||
this.btnOk.Name = "btnOk"; | |||
this.btnOk.Size = new System.Drawing.Size(75, 23); | |||
this.btnOk.TabIndex = 0; | |||
this.btnOk.Text = "OK"; | |||
this.btnOk.UseVisualStyleBackColor = true; | |||
this.btnOk.Click += new System.EventHandler(this.btnOk_Click); | |||
// | |||
// lblMessage | |||
// | |||
this.lblMessage.AutoSize = true; | |||
this.lblMessage.Location = new System.Drawing.Point(41, 44); | |||
this.lblMessage.Name = "lblMessage"; | |||
this.lblMessage.Size = new System.Drawing.Size(29, 13); | |||
this.lblMessage.TabIndex = 1; | |||
this.lblMessage.Text = "Error"; | |||
// | |||
// txtLongMessage | |||
// | |||
this.txtLongMessage.Location = new System.Drawing.Point(44, 72); | |||
this.txtLongMessage.Multiline = true; | |||
this.txtLongMessage.Name = "txtLongMessage"; | |||
this.txtLongMessage.Size = new System.Drawing.Size(335, 96); | |||
this.txtLongMessage.TabIndex = 2; | |||
// | |||
// ErrorDialog | |||
// | |||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | |||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | |||
this.ClientSize = new System.Drawing.Size(437, 266); | |||
this.Controls.Add(this.txtLongMessage); | |||
this.Controls.Add(this.lblMessage); | |||
this.Controls.Add(this.btnOk); | |||
this.Name = "ErrorDialog"; | |||
this.Text = "ErrorDialog"; | |||
this.ResumeLayout(false); | |||
this.PerformLayout(); | |||
} | |||
#endregion | |||
private System.Windows.Forms.Button btnOk; | |||
private System.Windows.Forms.Label lblMessage; | |||
private System.Windows.Forms.TextBox txtLongMessage; | |||
} | |||
} |
@@ -0,0 +1,32 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.ComponentModel; | |||
using System.Data; | |||
using System.Drawing; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public partial class ErrorDialog : Form | |||
{ | |||
public ErrorDialog() | |||
{ | |||
InitializeComponent(); | |||
Load += new EventHandler(ErrorDialog_Load); | |||
} | |||
void ErrorDialog_Load(object sender, EventArgs e) | |||
{ | |||
lblMessage.Text = Message; | |||
txtLongMessage.Text = Description; | |||
} | |||
public string Message { get; set; } | |||
public string Description { get; set; } | |||
private void btnOk_Click(object sender, EventArgs e) | |||
{ | |||
this.Close(); | |||
} | |||
} | |||
} |
@@ -0,0 +1,120 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<root> | |||
<!-- | |||
Microsoft ResX Schema | |||
Version 2.0 | |||
The primary goals of this format is to allow a simple XML format | |||
that is mostly human readable. The generation and parsing of the | |||
various data types are done through the TypeConverter classes | |||
associated with the data types. | |||
Example: | |||
... ado.net/XML headers & schema ... | |||
<resheader name="resmimetype">text/microsoft-resx</resheader> | |||
<resheader name="version">2.0</resheader> | |||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |||
<value>[base64 mime encoded serialized .NET Framework object]</value> | |||
</data> | |||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |||
<comment>This is a comment</comment> | |||
</data> | |||
There are any number of "resheader" rows that contain simple | |||
name/value pairs. | |||
Each data row contains a name, and value. The row also contains a | |||
type or mimetype. Type corresponds to a .NET class that support | |||
text/value conversion through the TypeConverter architecture. | |||
Classes that don't support this are serialized and stored with the | |||
mimetype set. | |||
The mimetype is used for serialized objects, and tells the | |||
ResXResourceReader how to depersist the object. This is currently not | |||
extensible. For a given mimetype the value must be set accordingly: | |||
Note - application/x-microsoft.net.object.binary.base64 is the format | |||
that the ResXResourceWriter will generate, however the reader can | |||
read any of the formats listed below. | |||
mimetype: application/x-microsoft.net.object.binary.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.soap.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.bytearray.base64 | |||
value : The object must be serialized into a byte array | |||
: using a System.ComponentModel.TypeConverter | |||
: and then encoded with base64 encoding. | |||
--> | |||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | |||
<xsd:element name="root" msdata:IsDataSet="true"> | |||
<xsd:complexType> | |||
<xsd:choice maxOccurs="unbounded"> | |||
<xsd:element name="metadata"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" use="required" type="xsd:string" /> | |||
<xsd:attribute name="type" type="xsd:string" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="assembly"> | |||
<xsd:complexType> | |||
<xsd:attribute name="alias" type="xsd:string" /> | |||
<xsd:attribute name="name" type="xsd:string" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="data"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | |||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="resheader"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:choice> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:schema> | |||
<resheader name="resmimetype"> | |||
<value>text/microsoft-resx</value> | |||
</resheader> | |||
<resheader name="version"> | |||
<value>2.0</value> | |||
</resheader> | |||
<resheader name="reader"> | |||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
<resheader name="writer"> | |||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
</root> |
@@ -0,0 +1,2 @@ | |||
ClickForensics.Quartz.Jobs.dll | |||
Quartz.dll |
@@ -0,0 +1,21 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
using Quartz; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public class JobNode : TreeNode | |||
{ | |||
public JobNode(JobDetail jobDetail) | |||
: base() | |||
{ | |||
this.Text = jobDetail.Name; | |||
Detail = jobDetail; | |||
} | |||
public JobDetail Detail { get; private set; } | |||
} | |||
} |
@@ -0,0 +1,17 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
class JobType | |||
{ | |||
public string FullName { get; set; } | |||
public string AssemblyName { get; set; } | |||
public override string ToString() | |||
{ | |||
return FullName; | |||
} | |||
} | |||
} |
@@ -0,0 +1,486 @@ | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
partial class MainForm | |||
{ | |||
/// <summary> | |||
/// Required designer variable. | |||
/// </summary> | |||
private System.ComponentModel.IContainer components = null; | |||
/// <summary> | |||
/// Clean up any resources being used. | |||
/// </summary> | |||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | |||
protected override void Dispose(bool disposing) | |||
{ | |||
if (disposing && (components != null)) | |||
{ | |||
components.Dispose(); | |||
} | |||
base.Dispose(disposing); | |||
} | |||
#region Windows Form Designer generated code | |||
/// <summary> | |||
/// Required method for Designer support - do not modify | |||
/// the contents of this method with the code editor. | |||
/// </summary> | |||
private void InitializeComponent() | |||
{ | |||
this.components = new System.ComponentModel.Container(); | |||
this.mainMenuStrip = new System.Windows.Forms.MenuStrip(); | |||
this.schedulerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.connectToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.configureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.jobsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.addJobToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.listenersStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.globalListenersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.addGlobalJobListenerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.addTriggerListenerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.addJobListenerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.deleteThemAllToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.statusStrip1 = new System.Windows.Forms.StatusStrip(); | |||
this.serverConnectStatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); | |||
this.StripStatusLabel_Job_Groups = new System.Windows.Forms.ToolStripStatusLabel(); | |||
this.StripStatusLabel_Jobs_Refresh_date = new System.Windows.Forms.ToolStripStatusLabel(); | |||
this.jobGroupsTreeView = new System.Windows.Forms.TreeView(); | |||
this.label1 = new System.Windows.Forms.Label(); | |||
this.label2 = new System.Windows.Forms.Label(); | |||
this.btnRefreshRunningJobs = new System.Windows.Forms.Button(); | |||
this.btnRefreshJobGroups = new System.Windows.Forms.Button(); | |||
this.btnDeleteJob = new System.Windows.Forms.Button(); | |||
this.btnRunJobNow = new System.Windows.Forms.Button(); | |||
this.btnPause = new System.Windows.Forms.Button(); | |||
this.pnlDetails = new System.Windows.Forms.Panel(); | |||
this.label3 = new System.Windows.Forms.Label(); | |||
this.btnEdit = new System.Windows.Forms.Button(); | |||
this.ctxScheduler = new System.Windows.Forms.ContextMenuStrip(this.components); | |||
this.backupToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); | |||
this.timer_Refresh_Running_Jobs = new System.Windows.Forms.Timer(this.components); | |||
this.listView_RunningJobs = new System.Windows.Forms.ListView(); | |||
this.JobName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); | |||
this.JobDuration = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); | |||
this.button1 = new System.Windows.Forms.Button(); | |||
this.button2 = new System.Windows.Forms.Button(); | |||
this.button3 = new System.Windows.Forms.Button(); | |||
this.button4 = new System.Windows.Forms.Button(); | |||
this.mainMenuStrip.SuspendLayout(); | |||
this.statusStrip1.SuspendLayout(); | |||
this.ctxScheduler.SuspendLayout(); | |||
this.SuspendLayout(); | |||
// | |||
// mainMenuStrip | |||
// | |||
this.mainMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
this.schedulerToolStripMenuItem, | |||
this.jobsToolStripMenuItem, | |||
this.listenersStripMenuItem, | |||
this.toolStripMenuItem1}); | |||
this.mainMenuStrip.Location = new System.Drawing.Point(0, 0); | |||
this.mainMenuStrip.Name = "mainMenuStrip"; | |||
this.mainMenuStrip.Size = new System.Drawing.Size(913, 24); | |||
this.mainMenuStrip.TabIndex = 0; | |||
this.mainMenuStrip.Text = "menuStrip1"; | |||
// | |||
// schedulerToolStripMenuItem | |||
// | |||
this.schedulerToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
this.connectToolStripMenuItem, | |||
this.configureToolStripMenuItem}); | |||
this.schedulerToolStripMenuItem.Name = "schedulerToolStripMenuItem"; | |||
this.schedulerToolStripMenuItem.Size = new System.Drawing.Size(71, 20); | |||
this.schedulerToolStripMenuItem.Text = "Scheduler"; | |||
// | |||
// connectToolStripMenuItem | |||
// | |||
this.connectToolStripMenuItem.Name = "connectToolStripMenuItem"; | |||
this.connectToolStripMenuItem.Size = new System.Drawing.Size(127, 22); | |||
this.connectToolStripMenuItem.Text = "Connect"; | |||
this.connectToolStripMenuItem.Click += new System.EventHandler(this.connectToolStripMenuItem_Click); | |||
// | |||
// configureToolStripMenuItem | |||
// | |||
this.configureToolStripMenuItem.Name = "configureToolStripMenuItem"; | |||
this.configureToolStripMenuItem.Size = new System.Drawing.Size(127, 22); | |||
this.configureToolStripMenuItem.Text = "Configure"; | |||
this.configureToolStripMenuItem.Click += new System.EventHandler(this.configureToolStripMenuItem_Click); | |||
// | |||
// jobsToolStripMenuItem | |||
// | |||
this.jobsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
this.addJobToolStripMenuItem}); | |||
this.jobsToolStripMenuItem.Enabled = false; | |||
this.jobsToolStripMenuItem.Name = "jobsToolStripMenuItem"; | |||
this.jobsToolStripMenuItem.Size = new System.Drawing.Size(42, 20); | |||
this.jobsToolStripMenuItem.Text = "Jobs"; | |||
// | |||
// addJobToolStripMenuItem | |||
// | |||
this.addJobToolStripMenuItem.Name = "addJobToolStripMenuItem"; | |||
this.addJobToolStripMenuItem.Size = new System.Drawing.Size(96, 22); | |||
this.addJobToolStripMenuItem.Text = "Add"; | |||
this.addJobToolStripMenuItem.Click += new System.EventHandler(this.addJobToolStripMenuItem_Click); | |||
// | |||
// listenersStripMenuItem | |||
// | |||
this.listenersStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
this.globalListenersToolStripMenuItem, | |||
this.addJobListenerToolStripMenuItem}); | |||
this.listenersStripMenuItem.Enabled = false; | |||
this.listenersStripMenuItem.Name = "listenersStripMenuItem"; | |||
this.listenersStripMenuItem.Size = new System.Drawing.Size(65, 20); | |||
this.listenersStripMenuItem.Text = "Listeners"; | |||
// | |||
// globalListenersToolStripMenuItem | |||
// | |||
this.globalListenersToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
this.addGlobalJobListenerToolStripMenuItem, | |||
this.addTriggerListenerToolStripMenuItem}); | |||
this.globalListenersToolStripMenuItem.Name = "globalListenersToolStripMenuItem"; | |||
this.globalListenersToolStripMenuItem.Size = new System.Drawing.Size(161, 22); | |||
this.globalListenersToolStripMenuItem.Text = "Global"; | |||
// | |||
// addGlobalJobListenerToolStripMenuItem | |||
// | |||
this.addGlobalJobListenerToolStripMenuItem.Name = "addGlobalJobListenerToolStripMenuItem"; | |||
this.addGlobalJobListenerToolStripMenuItem.Size = new System.Drawing.Size(181, 22); | |||
this.addGlobalJobListenerToolStripMenuItem.Text = "Add Job Listener"; | |||
this.addGlobalJobListenerToolStripMenuItem.Click += new System.EventHandler(this.addGlobalListenerToolStripMenuItem_Click); | |||
// | |||
// addTriggerListenerToolStripMenuItem | |||
// | |||
this.addTriggerListenerToolStripMenuItem.Name = "addTriggerListenerToolStripMenuItem"; | |||
this.addTriggerListenerToolStripMenuItem.Size = new System.Drawing.Size(181, 22); | |||
this.addTriggerListenerToolStripMenuItem.Text = "Add Trigger Listener"; | |||
// | |||
// addJobListenerToolStripMenuItem | |||
// | |||
this.addJobListenerToolStripMenuItem.Name = "addJobListenerToolStripMenuItem"; | |||
this.addJobListenerToolStripMenuItem.Size = new System.Drawing.Size(161, 22); | |||
this.addJobListenerToolStripMenuItem.Text = "Add Job Listener"; | |||
this.addJobListenerToolStripMenuItem.Click += new System.EventHandler(this.addJobListenerToolStripMenuItem_Click); | |||
// | |||
// toolStripMenuItem1 | |||
// | |||
this.toolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
this.deleteThemAllToolStripMenuItem}); | |||
this.toolStripMenuItem1.Name = "toolStripMenuItem1"; | |||
this.toolStripMenuItem1.Size = new System.Drawing.Size(94, 20); | |||
this.toolStripMenuItem1.Text = "Miscellaneous"; | |||
// | |||
// deleteThemAllToolStripMenuItem | |||
// | |||
this.deleteThemAllToolStripMenuItem.Name = "deleteThemAllToolStripMenuItem"; | |||
this.deleteThemAllToolStripMenuItem.Size = new System.Drawing.Size(152, 22); | |||
this.deleteThemAllToolStripMenuItem.Text = "DeleteThemAll"; | |||
this.deleteThemAllToolStripMenuItem.Click += new System.EventHandler(this.deleteThemAllToolStripMenuItem_Click); | |||
// | |||
// statusStrip1 | |||
// | |||
this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
this.serverConnectStatusLabel, | |||
this.StripStatusLabel_Job_Groups, | |||
this.StripStatusLabel_Jobs_Refresh_date}); | |||
this.statusStrip1.Location = new System.Drawing.Point(0, 639); | |||
this.statusStrip1.Name = "statusStrip1"; | |||
this.statusStrip1.Size = new System.Drawing.Size(913, 22); | |||
this.statusStrip1.TabIndex = 1; | |||
this.statusStrip1.Text = "statusStrip1"; | |||
// | |||
// serverConnectStatusLabel | |||
// | |||
this.serverConnectStatusLabel.Name = "serverConnectStatusLabel"; | |||
this.serverConnectStatusLabel.Size = new System.Drawing.Size(86, 17); | |||
this.serverConnectStatusLabel.Text = "Not connected"; | |||
// | |||
// StripStatusLabel_Job_Groups | |||
// | |||
this.StripStatusLabel_Job_Groups.BackColor = System.Drawing.Color.LightCyan; | |||
this.StripStatusLabel_Job_Groups.Name = "StripStatusLabel_Job_Groups"; | |||
this.StripStatusLabel_Job_Groups.Size = new System.Drawing.Size(157, 17); | |||
this.StripStatusLabel_Job_Groups.Text = "StripStatusLabel_Job_Groups"; | |||
this.StripStatusLabel_Job_Groups.ToolTipText = "Last Refresh of Job Groups"; | |||
// | |||
// StripStatusLabel_Jobs_Refresh_date | |||
// | |||
this.StripStatusLabel_Jobs_Refresh_date.BackColor = System.Drawing.SystemColors.ActiveCaptionText; | |||
this.StripStatusLabel_Jobs_Refresh_date.Name = "StripStatusLabel_Jobs_Refresh_date"; | |||
this.StripStatusLabel_Jobs_Refresh_date.Size = new System.Drawing.Size(191, 17); | |||
this.StripStatusLabel_Jobs_Refresh_date.Text = "StripStatusLabel_Jobs_Refresh_date"; | |||
this.StripStatusLabel_Jobs_Refresh_date.ToolTipText = "Last Refresh Date of Running Jobs"; | |||
// | |||
// jobGroupsTreeView | |||
// | |||
this.jobGroupsTreeView.HideSelection = false; | |||
this.jobGroupsTreeView.Location = new System.Drawing.Point(8, 48); | |||
this.jobGroupsTreeView.Name = "jobGroupsTreeView"; | |||
this.jobGroupsTreeView.Size = new System.Drawing.Size(351, 252); | |||
this.jobGroupsTreeView.TabIndex = 2; | |||
// | |||
// label1 | |||
// | |||
this.label1.AutoSize = true; | |||
this.label1.Location = new System.Drawing.Point(8, 32); | |||
this.label1.Name = "label1"; | |||
this.label1.Size = new System.Drawing.Size(94, 13); | |||
this.label1.TabIndex = 4; | |||
this.label1.Text = "Scheduler Objects"; | |||
// | |||
// label2 | |||
// | |||
this.label2.AutoSize = true; | |||
this.label2.Location = new System.Drawing.Point(9, 319); | |||
this.label2.Name = "label2"; | |||
this.label2.Size = new System.Drawing.Size(72, 13); | |||
this.label2.TabIndex = 5; | |||
this.label2.Text = "Running Jobs"; | |||
// | |||
// btnRefreshRunningJobs | |||
// | |||
this.btnRefreshRunningJobs.Location = new System.Drawing.Point(371, 609); | |||
this.btnRefreshRunningJobs.Name = "btnRefreshRunningJobs"; | |||
this.btnRefreshRunningJobs.Size = new System.Drawing.Size(75, 23); | |||
this.btnRefreshRunningJobs.TabIndex = 6; | |||
this.btnRefreshRunningJobs.Text = "Refresh"; | |||
this.btnRefreshRunningJobs.UseVisualStyleBackColor = true; | |||
this.btnRefreshRunningJobs.Click += new System.EventHandler(this.btnRefreshRunningJobs_Click); | |||
// | |||
// btnRefreshJobGroups | |||
// | |||
this.btnRefreshJobGroups.Location = new System.Drawing.Point(284, 306); | |||
this.btnRefreshJobGroups.Name = "btnRefreshJobGroups"; | |||
this.btnRefreshJobGroups.Size = new System.Drawing.Size(75, 23); | |||
this.btnRefreshJobGroups.TabIndex = 7; | |||
this.btnRefreshJobGroups.Text = "Refresh"; | |||
this.btnRefreshJobGroups.UseVisualStyleBackColor = true; | |||
this.btnRefreshJobGroups.Click += new System.EventHandler(this.btnRefreshJobGroups_Click); | |||
// | |||
// btnDeleteJob | |||
// | |||
this.btnDeleteJob.Enabled = false; | |||
this.btnDeleteJob.Location = new System.Drawing.Point(665, 309); | |||
this.btnDeleteJob.Name = "btnDeleteJob"; | |||
this.btnDeleteJob.Size = new System.Drawing.Size(65, 23); | |||
this.btnDeleteJob.TabIndex = 8; | |||
this.btnDeleteJob.Text = "Delete"; | |||
this.btnDeleteJob.UseVisualStyleBackColor = true; | |||
this.btnDeleteJob.Click += new System.EventHandler(this.btnDeleteJob_Click); | |||
// | |||
// btnRunJobNow | |||
// | |||
this.btnRunJobNow.Enabled = false; | |||
this.btnRunJobNow.Location = new System.Drawing.Point(523, 309); | |||
this.btnRunJobNow.Name = "btnRunJobNow"; | |||
this.btnRunJobNow.Size = new System.Drawing.Size(65, 23); | |||
this.btnRunJobNow.TabIndex = 9; | |||
this.btnRunJobNow.Text = "Run"; | |||
this.btnRunJobNow.UseVisualStyleBackColor = true; | |||
this.btnRunJobNow.Click += new System.EventHandler(this.btnRunJobNow_Click); | |||
// | |||
// btnPause | |||
// | |||
this.btnPause.Enabled = false; | |||
this.btnPause.Location = new System.Drawing.Point(594, 309); | |||
this.btnPause.Name = "btnPause"; | |||
this.btnPause.Size = new System.Drawing.Size(65, 23); | |||
this.btnPause.TabIndex = 10; | |||
this.btnPause.Text = "Pause"; | |||
this.btnPause.UseVisualStyleBackColor = true; | |||
this.btnPause.Click += new System.EventHandler(this.btnPause_Click); | |||
// | |||
// pnlDetails | |||
// | |||
this.pnlDetails.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; | |||
this.pnlDetails.Location = new System.Drawing.Point(523, 48); | |||
this.pnlDetails.Name = "pnlDetails"; | |||
this.pnlDetails.Size = new System.Drawing.Size(342, 252); | |||
this.pnlDetails.TabIndex = 11; | |||
// | |||
// label3 | |||
// | |||
this.label3.AutoSize = true; | |||
this.label3.Location = new System.Drawing.Point(520, 32); | |||
this.label3.Name = "label3"; | |||
this.label3.Size = new System.Drawing.Size(39, 13); | |||
this.label3.TabIndex = 12; | |||
this.label3.Text = "Details"; | |||
// | |||
// btnEdit | |||
// | |||
this.btnEdit.Enabled = false; | |||
this.btnEdit.Location = new System.Drawing.Point(736, 309); | |||
this.btnEdit.Name = "btnEdit"; | |||
this.btnEdit.Size = new System.Drawing.Size(65, 23); | |||
this.btnEdit.TabIndex = 13; | |||
this.btnEdit.Text = "Edit"; | |||
this.btnEdit.UseVisualStyleBackColor = true; | |||
this.btnEdit.Click += new System.EventHandler(this.btnEdit_Click); | |||
// | |||
// ctxScheduler | |||
// | |||
this.ctxScheduler.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { | |||
this.backupToolStripMenuItem}); | |||
this.ctxScheduler.Name = "ctxScheduler"; | |||
this.ctxScheduler.Size = new System.Drawing.Size(109, 26); | |||
// | |||
// backupToolStripMenuItem | |||
// | |||
this.backupToolStripMenuItem.Name = "backupToolStripMenuItem"; | |||
this.backupToolStripMenuItem.Size = new System.Drawing.Size(108, 22); | |||
this.backupToolStripMenuItem.Text = "Backup"; | |||
this.backupToolStripMenuItem.Click += new System.EventHandler(this.backupToolStripMenuItem_Click); | |||
// | |||
// timer_Refresh_Running_Jobs | |||
// | |||
this.timer_Refresh_Running_Jobs.Interval = 30000; | |||
this.timer_Refresh_Running_Jobs.Tick += new System.EventHandler(this.timer_Refresh_Running_Jobs_Tick); | |||
// | |||
// listView_RunningJobs | |||
// | |||
this.listView_RunningJobs.AllowColumnReorder = true; | |||
this.listView_RunningJobs.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { | |||
this.JobName, | |||
this.JobDuration}); | |||
this.listView_RunningJobs.Location = new System.Drawing.Point(11, 335); | |||
this.listView_RunningJobs.Name = "listView_RunningJobs"; | |||
this.listView_RunningJobs.Size = new System.Drawing.Size(719, 268); | |||
this.listView_RunningJobs.Sorting = System.Windows.Forms.SortOrder.Ascending; | |||
this.listView_RunningJobs.TabIndex = 14; | |||
this.listView_RunningJobs.UseCompatibleStateImageBehavior = false; | |||
this.listView_RunningJobs.View = System.Windows.Forms.View.Details; | |||
this.listView_RunningJobs.SelectedIndexChanged += new System.EventHandler(this.listView_RunningJobs_SelectedIndexChanged); | |||
// | |||
// JobName | |||
// | |||
this.JobName.Text = "Job Name"; | |||
// | |||
// JobDuration | |||
// | |||
this.JobDuration.Text = "Duration"; | |||
// | |||
// button1 | |||
// | |||
this.button1.Enabled = false; | |||
this.button1.Location = new System.Drawing.Point(665, 309); | |||
this.button1.Name = "button1"; | |||
this.button1.Size = new System.Drawing.Size(65, 23); | |||
this.button1.TabIndex = 8; | |||
this.button1.Text = "Delete"; | |||
this.button1.UseVisualStyleBackColor = true; | |||
this.button1.Click += new System.EventHandler(this.btnDeleteJob_Click); | |||
// | |||
// button2 | |||
// | |||
this.button2.Enabled = false; | |||
this.button2.Location = new System.Drawing.Point(523, 309); | |||
this.button2.Name = "button2"; | |||
this.button2.Size = new System.Drawing.Size(65, 23); | |||
this.button2.TabIndex = 9; | |||
this.button2.Text = "Run"; | |||
this.button2.UseVisualStyleBackColor = true; | |||
this.button2.Click += new System.EventHandler(this.btnRunJobNow_Click); | |||
// | |||
// button3 | |||
// | |||
this.button3.Enabled = false; | |||
this.button3.Location = new System.Drawing.Point(594, 309); | |||
this.button3.Name = "button3"; | |||
this.button3.Size = new System.Drawing.Size(65, 23); | |||
this.button3.TabIndex = 10; | |||
this.button3.Text = "Pause"; | |||
this.button3.UseVisualStyleBackColor = true; | |||
this.button3.Click += new System.EventHandler(this.btnPause_Click); | |||
// | |||
// button4 | |||
// | |||
this.button4.Enabled = false; | |||
this.button4.Location = new System.Drawing.Point(736, 309); | |||
this.button4.Name = "button4"; | |||
this.button4.Size = new System.Drawing.Size(65, 23); | |||
this.button4.TabIndex = 13; | |||
this.button4.Text = "Edit"; | |||
this.button4.UseVisualStyleBackColor = true; | |||
this.button4.Click += new System.EventHandler(this.btnEdit_Click); | |||
// | |||
// MainForm | |||
// | |||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | |||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | |||
this.ClientSize = new System.Drawing.Size(913, 661); | |||
this.Controls.Add(this.listView_RunningJobs); | |||
this.Controls.Add(this.pnlDetails); | |||
this.Controls.Add(this.label3); | |||
this.Controls.Add(this.btnRefreshJobGroups); | |||
this.Controls.Add(this.button4); | |||
this.Controls.Add(this.btnEdit); | |||
this.Controls.Add(this.label1); | |||
this.Controls.Add(this.button3); | |||
this.Controls.Add(this.btnPause); | |||
this.Controls.Add(this.btnRefreshRunningJobs); | |||
this.Controls.Add(this.label2); | |||
this.Controls.Add(this.button2); | |||
this.Controls.Add(this.statusStrip1); | |||
this.Controls.Add(this.btnRunJobNow); | |||
this.Controls.Add(this.mainMenuStrip); | |||
this.Controls.Add(this.button1); | |||
this.Controls.Add(this.btnDeleteJob); | |||
this.Controls.Add(this.jobGroupsTreeView); | |||
this.MainMenuStrip = this.mainMenuStrip; | |||
this.Name = "MainForm"; | |||
this.Text = "Quartz Manager"; | |||
this.mainMenuStrip.ResumeLayout(false); | |||
this.mainMenuStrip.PerformLayout(); | |||
this.statusStrip1.ResumeLayout(false); | |||
this.statusStrip1.PerformLayout(); | |||
this.ctxScheduler.ResumeLayout(false); | |||
this.ResumeLayout(false); | |||
this.PerformLayout(); | |||
} | |||
#endregion | |||
private System.Windows.Forms.MenuStrip mainMenuStrip; | |||
private System.Windows.Forms.ToolStripMenuItem schedulerToolStripMenuItem; | |||
private System.Windows.Forms.ToolStripMenuItem connectToolStripMenuItem; | |||
private System.Windows.Forms.StatusStrip statusStrip1; | |||
private System.Windows.Forms.ToolStripStatusLabel serverConnectStatusLabel; | |||
private System.Windows.Forms.TreeView jobGroupsTreeView; | |||
private System.Windows.Forms.ToolStripMenuItem listenersStripMenuItem; | |||
private System.Windows.Forms.ToolStripMenuItem globalListenersToolStripMenuItem; | |||
private System.Windows.Forms.ToolStripMenuItem addGlobalJobListenerToolStripMenuItem; | |||
private System.Windows.Forms.ToolStripMenuItem addTriggerListenerToolStripMenuItem; | |||
private System.Windows.Forms.ToolStripMenuItem addJobListenerToolStripMenuItem; | |||
private System.Windows.Forms.Label label1; | |||
private System.Windows.Forms.Label label2; | |||
private System.Windows.Forms.ToolStripMenuItem jobsToolStripMenuItem; | |||
private System.Windows.Forms.ToolStripMenuItem addJobToolStripMenuItem; | |||
private System.Windows.Forms.Button btnRefreshRunningJobs; | |||
private System.Windows.Forms.Button btnRefreshJobGroups; | |||
private System.Windows.Forms.Button btnDeleteJob; | |||
private System.Windows.Forms.Button btnRunJobNow; | |||
private System.Windows.Forms.Button btnPause; | |||
private System.Windows.Forms.ToolStripMenuItem configureToolStripMenuItem; | |||
private System.Windows.Forms.Panel pnlDetails; | |||
private System.Windows.Forms.Label label3; | |||
private System.Windows.Forms.Button btnEdit; | |||
private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; | |||
private System.Windows.Forms.ToolStripMenuItem deleteThemAllToolStripMenuItem; | |||
private System.Windows.Forms.ContextMenuStrip ctxScheduler; | |||
private System.Windows.Forms.ToolStripMenuItem backupToolStripMenuItem; | |||
private System.Windows.Forms.Timer timer_Refresh_Running_Jobs; | |||
private System.Windows.Forms.ToolStripStatusLabel StripStatusLabel_Jobs_Refresh_date; | |||
private System.Windows.Forms.ToolStripStatusLabel StripStatusLabel_Job_Groups; | |||
private System.Windows.Forms.ListView listView_RunningJobs; | |||
private System.Windows.Forms.ColumnHeader JobName; | |||
private System.Windows.Forms.ColumnHeader JobDuration; | |||
private System.Windows.Forms.Button button1; | |||
private System.Windows.Forms.Button button2; | |||
private System.Windows.Forms.Button button3; | |||
private System.Windows.Forms.Button button4; | |||
} | |||
} | |||
@@ -0,0 +1,412 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.ComponentModel; | |||
using System.Data; | |||
using System.Drawing; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
using Quartz; | |||
using Quartz.Collection; | |||
using System.Net.Sockets; | |||
//using ClickForensics.Quartz.Jobs; | |||
using System.IO; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public partial class MainForm : Form | |||
{ | |||
public MainForm() | |||
{ | |||
InitializeComponent(); | |||
jobGroupsTreeView.AfterSelect += new TreeViewEventHandler(jobGroupsTreeView_AfterSelect); | |||
ctxScheduler.Opening += new CancelEventHandler(ctxScheduler_Opening); | |||
jobGroupsTreeView.MouseDown += new MouseEventHandler(jobGroupsTreeView_MouseDown); | |||
} | |||
void ctxScheduler_Opening(object sender, CancelEventArgs e) | |||
{ | |||
} | |||
void jobGroupsTreeView_AfterSelect(object sender, TreeViewEventArgs e) | |||
{ | |||
jobDetailsToggle(false); | |||
if (e.Node is TriggerNode || e.Node is JobNode) | |||
{ | |||
btnDeleteJob.Enabled = true; | |||
} | |||
else | |||
{ | |||
btnDeleteJob.Enabled = false; | |||
} | |||
if (e.Node is JobNode) | |||
{ | |||
btnRunJobNow.Enabled = true; | |||
pnlDetails.Controls.Add(new NativeJobDetailDisplay(((JobNode)e.Node).Detail)); | |||
jobDetailsToggle(true); | |||
} | |||
else | |||
{ | |||
btnRunJobNow.Enabled = false; | |||
} | |||
if (e.Node is TriggerNode) | |||
{ | |||
btnPause.Enabled = true; | |||
setPauseButtonText(); | |||
if (((TriggerNode)e.Node).Trigger is CronTrigger) | |||
{ | |||
pnlDetails.Controls.Add(new CronTriggerDisplay((CronTrigger)((TriggerNode)e.Node).Trigger)); | |||
jobDetailsToggle(true); | |||
} | |||
btnEdit.Enabled = true; | |||
} | |||
else | |||
{ | |||
btnEdit.Enabled = false; | |||
btnPause.Enabled = false; | |||
} | |||
} | |||
private void setPauseButtonText() | |||
{ | |||
TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode; | |||
string name = node.Trigger.Name; | |||
string group = node.Trigger.Group; | |||
if (Scheduler.GetScheduler().GetTriggerState(name, group) == TriggerState.Paused) | |||
{ | |||
btnPause.Text = "Resume"; | |||
} | |||
else | |||
{ | |||
btnPause.Text = "Pause"; | |||
} | |||
} | |||
private void connectToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
using (ServerConnectForm form = new ServerConnectForm()) | |||
{ | |||
form.ShowDialog(); | |||
try | |||
{ | |||
Scheduler = new QuartzScheduler(form.Server, form.Port, form.Scheduler); | |||
serverConnectStatusLabel.Text = string.Format("Connected to {0}", Scheduler.Address); | |||
connectToolStripMenuItem.Enabled = false; | |||
jobsToolStripMenuItem.Enabled = true; | |||
loadJobGroups(); | |||
updateRunningJobs(); | |||
} | |||
catch (SocketException ex) | |||
{ | |||
ErrorDialog dialog = new ErrorDialog(); | |||
dialog.Message = string.Format("Unable to connect to scheduler {0} on {1}:{2}", form.Scheduler, form.Server, form.Port); | |||
dialog.Description = ex.Message; | |||
dialog.ShowDialog(); | |||
} | |||
form.Close(); | |||
} | |||
//loadGlobalTriggers(); | |||
} | |||
//private void loadGlobalTriggers() | |||
//{ | |||
// foreach (IJobListener jobListener in Scheduler.GetScheduler().GetJobDetail(null,null)..GlobalJobListeners) | |||
// { | |||
// globalTriggersListView.Items.Add(jobListener.Name); | |||
// } | |||
//} | |||
private void loadJobGroups() | |||
{ | |||
try | |||
{ | |||
this.Cursor = Cursors.WaitCursor; | |||
jobDetailsToggle(false); | |||
jobGroupsTreeView.Nodes.Clear(); | |||
SchedulerNode schedulerNode = new SchedulerNode(Scheduler); | |||
schedulerNode.ContextMenuStrip = ctxScheduler; | |||
jobGroupsTreeView.Nodes.Add(schedulerNode); | |||
TreeNode jobGroupsNode = schedulerNode.Nodes.Add("Job Groups"); | |||
string[] jobGroups = Scheduler.GetScheduler().JobGroupNames; | |||
foreach (string jobGroup in jobGroups) | |||
{ | |||
TreeNode jobGroupNode = jobGroupsNode.Nodes.Add(jobGroup); | |||
TreeNode jobsNode = jobGroupNode.Nodes.Add("Jobs"); | |||
addJobNodes(jobsNode); | |||
} | |||
jobGroupsTreeView.Nodes[0].Expand(); | |||
jobGroupsNode.Expand(); | |||
StripStatusLabel_Job_Groups.Text = System.DateTime.Now.ToString("yyyy.MM.dd HH:mm.ss"); | |||
} | |||
finally | |||
{ | |||
this.Cursor = Cursors.Default; | |||
} | |||
} | |||
private void jobDetailsToggle(System.Boolean isVisible) | |||
{ | |||
if (isVisible == false) | |||
{ | |||
pnlDetails.Controls.Clear(); | |||
} | |||
} | |||
void jobGroupsTreeView_MouseDown(object sender, MouseEventArgs e) | |||
{ | |||
if (e.Button == MouseButtons.Right) | |||
{ | |||
TreeNode node = jobGroupsTreeView.GetNodeAt(e.X, e.Y); | |||
if (node != null) | |||
{ | |||
jobGroupsTreeView.SelectedNode = node; | |||
ctxScheduler.Show(jobGroupsTreeView, e.Location); | |||
} | |||
} | |||
} | |||
//private void loadJobs() | |||
//{ | |||
// foreach (TreeNode node in jobGroupsTreeView.Nodes) | |||
// { | |||
// addJobNodes(node); | |||
// } | |||
//} | |||
private void addJobNodes(TreeNode node) | |||
{ | |||
string group = node.Parent.Text; | |||
string[] jobs = Scheduler.GetScheduler().GetJobNames(group); | |||
foreach (string jobName in jobs) | |||
{ | |||
try | |||
{ | |||
JobDetail detail = Scheduler.GetScheduler().GetJobDetail(jobName, group); | |||
JobNode jobNode = new JobNode(detail); | |||
node.Nodes.Add(jobNode); | |||
addTriggerNodes(jobNode); | |||
addListenerNodes(jobNode); | |||
} | |||
catch (Exception ex) | |||
{ | |||
//TODO: Do something useful with this exception. Most likely cause is the client does not have a copy of a given dll and can't load the type. | |||
} | |||
} | |||
} | |||
private void addListenerNodes(JobNode node) | |||
{ | |||
string jobName = node.Text; | |||
string jobGroupName = node.Parent.Text; | |||
string[] listenerNames = node.Detail.JobListenerNames; | |||
foreach (string listener in listenerNames) | |||
{ | |||
node.Text = string.Format("JL {0}", listenerNames); | |||
} | |||
//ISet set = Scheduler.GetScheduler().JobListenerNames; | |||
} | |||
private void addTriggerNodes(TreeNode treeNode) | |||
{ | |||
Trigger[] triggers = Scheduler.GetScheduler().GetTriggersOfJob(treeNode.Text, treeNode.Parent.Parent.Text); | |||
TreeNode triggersNode = treeNode.Nodes.Add("Triggers"); | |||
foreach (Trigger trigger in triggers) | |||
{ | |||
TriggerNode node = new TriggerNode(trigger); | |||
triggersNode.Nodes.Add(node); | |||
} | |||
} | |||
private void updateRunningJobs() | |||
{ | |||
try | |||
{ | |||
this.Cursor = Cursors.WaitCursor; | |||
timer_Refresh_Running_Jobs.Stop(); | |||
listView_RunningJobs.Items.Clear(); | |||
DataTable table = Scheduler.GetRunningJobs(); | |||
foreach (DataRow row in table.Rows) | |||
{ | |||
//JobName JobDuration | |||
ListViewItem item = new ListViewItem(new string[] { System.Convert.ToString(row["JobName"]), System.Convert.ToString(row["Runtime"]) }); | |||
listView_RunningJobs.Items.Add(item); | |||
} | |||
StripStatusLabel_Jobs_Refresh_date.Text = System.DateTime.Now.ToString("yyyy.MM.dd HH:mm.ss"); | |||
//reset the timer ( documentation not clear if .stop = restart @ 0 in timing, but changing the interval sure should do that. ) | |||
int timer_was = timer_Refresh_Running_Jobs.Interval; | |||
timer_Refresh_Running_Jobs.Interval = timer_was + 1; | |||
timer_Refresh_Running_Jobs.Interval = timer_was; | |||
timer_Refresh_Running_Jobs.Start(); | |||
} | |||
finally | |||
{ | |||
this.Cursor = Cursors.Default; | |||
} | |||
} | |||
public QuartzScheduler Scheduler { get; set; } | |||
private void addGlobalListenerToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
AddListenerForm form = new AddListenerForm(); | |||
form.ListenerInterface = typeof(IJobListener); | |||
form.ShowDialog(); | |||
JobDataMap map = new JobDataMap(); | |||
map.Add("type", form.ListenerType); | |||
//Scheduler.ScheduleOneTimeJob(typeof(AddJobListenerJob), map, 0); | |||
loadJobGroups(); | |||
} | |||
private void addJobListenerToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
TreeNode selectedNode = jobGroupsTreeView.SelectedNode; | |||
if (selectedNode != null && selectedNode is JobNode) | |||
{ | |||
AddListenerForm form = new AddListenerForm(); | |||
form.ListenerInterface = typeof(IJobListener); | |||
form.ShowDialog(); | |||
//JobHistoryListener listener = new JobHistoryListener(); | |||
//listener.Name = null; | |||
//((JobNode)selectedNode).Detail.AddJobListener(); | |||
} | |||
} | |||
private void addJobToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
AddJobForm form = new AddJobForm(); | |||
form.ShowDialog(); | |||
if (form.JobDetail != null && form.Trigger != null) | |||
{ | |||
Scheduler.GetScheduler().ScheduleJob(form.JobDetail, form.Trigger); | |||
loadJobGroups(); | |||
} | |||
} | |||
private void btnRefreshRunningJobs_Click(object sender, EventArgs e) | |||
{ | |||
updateRunningJobs(); | |||
} | |||
private void btnRefreshJobGroups_Click(object sender, EventArgs e) | |||
{ | |||
loadJobGroups(); | |||
} | |||
private void btnRunJobNow_Click(object sender, EventArgs e) | |||
{ | |||
JobNode node = (JobNode)jobGroupsTreeView.SelectedNode; | |||
string job = node.Detail.Name; | |||
string group = node.Detail.Group; | |||
Scheduler.GetScheduler().TriggerJobWithVolatileTrigger(job, group); | |||
} | |||
private void btnDeleteJob_Click(object sender, EventArgs e) | |||
{ | |||
TreeNode selectedNode = jobGroupsTreeView.SelectedNode; | |||
if (selectedNode is JobNode) | |||
{ | |||
JobNode node = (JobNode)jobGroupsTreeView.SelectedNode; | |||
string job = node.Detail.Name; | |||
string group = node.Detail.Group; | |||
Scheduler.GetScheduler().DeleteJob(job, group); | |||
jobGroupsTreeView.SelectedNode.Remove(); | |||
} | |||
if (selectedNode is TriggerNode) | |||
{ | |||
Scheduler.GetScheduler().UnscheduleJob(((TriggerNode)selectedNode).Trigger.Name, ((TriggerNode)selectedNode).Trigger.Group); | |||
} | |||
//loadJobGroups(); | |||
} | |||
private void btnPause_Click(object sender, EventArgs e) | |||
{ | |||
TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode; | |||
string name = node.Trigger.Name; | |||
string group = node.Trigger.Group; | |||
if (Scheduler.GetScheduler().GetTriggerState(name, group) == TriggerState.Paused) | |||
{ | |||
Scheduler.GetScheduler().ResumeTrigger(name, group); | |||
} | |||
else | |||
{ | |||
Scheduler.GetScheduler().PauseTrigger(name, group); | |||
} | |||
setPauseButtonText(); | |||
} | |||
private void assembliesToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
} | |||
private void configureToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
} | |||
private void btnEdit_Click(object sender, EventArgs e) | |||
{ | |||
TriggerNode node = (TriggerNode)jobGroupsTreeView.SelectedNode; | |||
AddJobForm form = new AddJobForm(node); | |||
form.ShowDialog(); | |||
if (form.JobDetail != null && form.Trigger != null) | |||
{ | |||
Scheduler.GetScheduler().RescheduleJob(node.Trigger.Name, node.Trigger.Group, form.Trigger); | |||
loadJobGroups(); | |||
} | |||
} | |||
private void deleteThemAllToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
foreach (var job in Scheduler.GetScheduler().GetJobNames("Cube")) | |||
{ | |||
if (job.Contains("CreateCubeFor")) | |||
{ | |||
Scheduler.GetScheduler().DeleteJob(job, "Cube"); | |||
} | |||
} | |||
} | |||
private void backupToolStripMenuItem_Click(object sender, EventArgs e) | |||
{ | |||
QuartzScheduler scheduler = ((SchedulerNode)((TreeView)((ContextMenuStrip)((ToolStripMenuItem)sender).Owner).SourceControl).SelectedNode).Scheduler; | |||
FileDialog dialog = new SaveFileDialog(); | |||
dialog.ShowDialog(); | |||
FileInfo file = new FileInfo(dialog.FileName); | |||
scheduler.BackupToFile(file); | |||
} | |||
private void timer_Refresh_Running_Jobs_Tick(object sender, EventArgs e) | |||
{ | |||
updateRunningJobs(); | |||
} | |||
private void runningJobsListView_SelectedIndexChanged(object sender, EventArgs e) | |||
{ | |||
} | |||
private void listView_RunningJobs_SelectedIndexChanged(object sender, EventArgs e) | |||
{ | |||
} | |||
} | |||
} |
@@ -0,0 +1,135 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<root> | |||
<!-- | |||
Microsoft ResX Schema | |||
Version 2.0 | |||
The primary goals of this format is to allow a simple XML format | |||
that is mostly human readable. The generation and parsing of the | |||
various data types are done through the TypeConverter classes | |||
associated with the data types. | |||
Example: | |||
... ado.net/XML headers & schema ... | |||
<resheader name="resmimetype">text/microsoft-resx</resheader> | |||
<resheader name="version">2.0</resheader> | |||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |||
<value>[base64 mime encoded serialized .NET Framework object]</value> | |||
</data> | |||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |||
<comment>This is a comment</comment> | |||
</data> | |||
There are any number of "resheader" rows that contain simple | |||
name/value pairs. | |||
Each data row contains a name, and value. The row also contains a | |||
type or mimetype. Type corresponds to a .NET class that support | |||
text/value conversion through the TypeConverter architecture. | |||
Classes that don't support this are serialized and stored with the | |||
mimetype set. | |||
The mimetype is used for serialized objects, and tells the | |||
ResXResourceReader how to depersist the object. This is currently not | |||
extensible. For a given mimetype the value must be set accordingly: | |||
Note - application/x-microsoft.net.object.binary.base64 is the format | |||
that the ResXResourceWriter will generate, however the reader can | |||
read any of the formats listed below. | |||
mimetype: application/x-microsoft.net.object.binary.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.soap.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.bytearray.base64 | |||
value : The object must be serialized into a byte array | |||
: using a System.ComponentModel.TypeConverter | |||
: and then encoded with base64 encoding. | |||
--> | |||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | |||
<xsd:element name="root" msdata:IsDataSet="true"> | |||
<xsd:complexType> | |||
<xsd:choice maxOccurs="unbounded"> | |||
<xsd:element name="metadata"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" use="required" type="xsd:string" /> | |||
<xsd:attribute name="type" type="xsd:string" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="assembly"> | |||
<xsd:complexType> | |||
<xsd:attribute name="alias" type="xsd:string" /> | |||
<xsd:attribute name="name" type="xsd:string" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="data"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | |||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="resheader"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:choice> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:schema> | |||
<resheader name="resmimetype"> | |||
<value>text/microsoft-resx</value> | |||
</resheader> | |||
<resheader name="version"> | |||
<value>2.0</value> | |||
</resheader> | |||
<resheader name="reader"> | |||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
<resheader name="writer"> | |||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
<metadata name="mainMenuStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | |||
<value>17, 17</value> | |||
</metadata> | |||
<metadata name="statusStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | |||
<value>143, 17</value> | |||
</metadata> | |||
<metadata name="ctxScheduler.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | |||
<value>259, 17</value> | |||
</metadata> | |||
<metadata name="timer_Refresh_Running_Jobs.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> | |||
<value>374, 5</value> | |||
</metadata> | |||
<metadata name="$this.TrayHeight" type="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> | |||
<value>25</value> | |||
</metadata> | |||
</root> |
@@ -0,0 +1,163 @@ | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
partial class NativeJobDetailDisplay | |||
{ | |||
/// <summary> | |||
/// Required designer variable. | |||
/// </summary> | |||
private System.ComponentModel.IContainer components = null; | |||
/// <summary> | |||
/// Clean up any resources being used. | |||
/// </summary> | |||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | |||
protected override void Dispose(bool disposing) | |||
{ | |||
if (disposing && (components != null)) | |||
{ | |||
components.Dispose(); | |||
} | |||
base.Dispose(disposing); | |||
} | |||
#region Component Designer generated code | |||
/// <summary> | |||
/// Required method for Designer support - do not modify | |||
/// the contents of this method with the code editor. | |||
/// </summary> | |||
private void InitializeComponent() | |||
{ | |||
this.lblName = new System.Windows.Forms.Label(); | |||
this.label3 = new System.Windows.Forms.Label(); | |||
this.lblGroup = new System.Windows.Forms.Label(); | |||
this.label2 = new System.Windows.Forms.Label(); | |||
this.lblDescription = new System.Windows.Forms.Label(); | |||
this.label5 = new System.Windows.Forms.Label(); | |||
this.label10 = new System.Windows.Forms.Label(); | |||
this.jobDataListView = new System.Windows.Forms.ListView(); | |||
this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); | |||
this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); | |||
this.SuspendLayout(); | |||
// | |||
// lblName | |||
// | |||
this.lblName.AutoSize = true; | |||
this.lblName.Location = new System.Drawing.Point(121, 15); | |||
this.lblName.Name = "lblName"; | |||
this.lblName.Size = new System.Drawing.Size(35, 13); | |||
this.lblName.TabIndex = 5; | |||
this.lblName.Text = "label2"; | |||
// | |||
// label3 | |||
// | |||
this.label3.AutoSize = true; | |||
this.label3.Location = new System.Drawing.Point(21, 15); | |||
this.label3.Name = "label3"; | |||
this.label3.Size = new System.Drawing.Size(38, 13); | |||
this.label3.TabIndex = 4; | |||
this.label3.Text = "Name:"; | |||
// | |||
// lblGroup | |||
// | |||
this.lblGroup.AutoSize = true; | |||
this.lblGroup.Location = new System.Drawing.Point(121, 36); | |||
this.lblGroup.Name = "lblGroup"; | |||
this.lblGroup.Size = new System.Drawing.Size(35, 13); | |||
this.lblGroup.TabIndex = 7; | |||
this.lblGroup.Text = "label2"; | |||
// | |||
// label2 | |||
// | |||
this.label2.AutoSize = true; | |||
this.label2.Location = new System.Drawing.Point(21, 36); | |||
this.label2.Name = "label2"; | |||
this.label2.Size = new System.Drawing.Size(39, 13); | |||
this.label2.TabIndex = 6; | |||
this.label2.Text = "Group:"; | |||
// | |||
// lblDescription | |||
// | |||
this.lblDescription.AutoSize = true; | |||
this.lblDescription.Location = new System.Drawing.Point(121, 57); | |||
this.lblDescription.Name = "lblDescription"; | |||
this.lblDescription.Size = new System.Drawing.Size(35, 13); | |||
this.lblDescription.TabIndex = 9; | |||
this.lblDescription.Text = "label2"; | |||
// | |||
// label5 | |||
// | |||
this.label5.AutoSize = true; | |||
this.label5.Location = new System.Drawing.Point(21, 57); | |||
this.label5.Name = "label5"; | |||
this.label5.Size = new System.Drawing.Size(63, 13); | |||
this.label5.TabIndex = 8; | |||
this.label5.Text = "Description:"; | |||
// | |||
// label10 | |||
// | |||
this.label10.AutoSize = true; | |||
this.label10.Location = new System.Drawing.Point(21, 79); | |||
this.label10.Name = "label10"; | |||
this.label10.Size = new System.Drawing.Size(53, 13); | |||
this.label10.TabIndex = 23; | |||
this.label10.Text = "Job Data:"; | |||
// | |||
// jobDataListView | |||
// | |||
this.jobDataListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { | |||
this.columnHeader1, | |||
this.columnHeader2}); | |||
this.jobDataListView.FullRowSelect = true; | |||
this.jobDataListView.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; | |||
this.jobDataListView.Location = new System.Drawing.Point(24, 105); | |||
this.jobDataListView.MultiSelect = false; | |||
this.jobDataListView.Name = "jobDataListView"; | |||
this.jobDataListView.Size = new System.Drawing.Size(298, 142); | |||
this.jobDataListView.TabIndex = 22; | |||
this.jobDataListView.UseCompatibleStateImageBehavior = false; | |||
this.jobDataListView.View = System.Windows.Forms.View.Details; | |||
// | |||
// columnHeader1 | |||
// | |||
this.columnHeader1.Text = "Key"; | |||
this.columnHeader1.Width = 82; | |||
// | |||
// columnHeader2 | |||
// | |||
this.columnHeader2.Text = "Value"; | |||
this.columnHeader2.Width = 145; | |||
// | |||
// NativeJobDetailDisplay | |||
// | |||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | |||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | |||
this.Controls.Add(this.label10); | |||
this.Controls.Add(this.jobDataListView); | |||
this.Controls.Add(this.lblDescription); | |||
this.Controls.Add(this.label5); | |||
this.Controls.Add(this.lblGroup); | |||
this.Controls.Add(this.label2); | |||
this.Controls.Add(this.lblName); | |||
this.Controls.Add(this.label3); | |||
this.Name = "NativeJobDetailDisplay"; | |||
this.Size = new System.Drawing.Size(342, 273); | |||
this.ResumeLayout(false); | |||
this.PerformLayout(); | |||
} | |||
#endregion | |||
private System.Windows.Forms.Label lblName; | |||
private System.Windows.Forms.Label label3; | |||
private System.Windows.Forms.Label lblGroup; | |||
private System.Windows.Forms.Label label2; | |||
private System.Windows.Forms.Label lblDescription; | |||
private System.Windows.Forms.Label label5; | |||
private System.Windows.Forms.Label label10; | |||
private System.Windows.Forms.ListView jobDataListView; | |||
private System.Windows.Forms.ColumnHeader columnHeader1; | |||
private System.Windows.Forms.ColumnHeader columnHeader2; | |||
} | |||
} |
@@ -0,0 +1,44 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.ComponentModel; | |||
using System.Drawing; | |||
using System.Data; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
using Quartz; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public partial class NativeJobDetailDisplay : UserControl | |||
{ | |||
public NativeJobDetailDisplay() | |||
{ | |||
InitializeComponent(); | |||
this.Load += new EventHandler(NativeJobDetailDisplay_Load); | |||
} | |||
void NativeJobDetailDisplay_Load(object sender, EventArgs e) | |||
{ | |||
lblDescription.Text = _detail.Description; | |||
lblGroup.Text = _detail.Group; | |||
lblName.Text = _detail.Name; | |||
loadJobDataMap(); | |||
} | |||
private void loadJobDataMap() | |||
{ | |||
foreach (var item in _detail.JobDataMap.GetKeys()) | |||
{ | |||
jobDataListView.Items.Add(new ListViewItem(new string[] { item, _detail.JobDataMap.Get(item).ToString() })); | |||
} | |||
} | |||
public NativeJobDetailDisplay(JobDetail detail) | |||
: this() | |||
{ | |||
_detail = detail; | |||
} | |||
private JobDetail _detail; | |||
} | |||
} |
@@ -0,0 +1,120 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<root> | |||
<!-- | |||
Microsoft ResX Schema | |||
Version 2.0 | |||
The primary goals of this format is to allow a simple XML format | |||
that is mostly human readable. The generation and parsing of the | |||
various data types are done through the TypeConverter classes | |||
associated with the data types. | |||
Example: | |||
... ado.net/XML headers & schema ... | |||
<resheader name="resmimetype">text/microsoft-resx</resheader> | |||
<resheader name="version">2.0</resheader> | |||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |||
<value>[base64 mime encoded serialized .NET Framework object]</value> | |||
</data> | |||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |||
<comment>This is a comment</comment> | |||
</data> | |||
There are any number of "resheader" rows that contain simple | |||
name/value pairs. | |||
Each data row contains a name, and value. The row also contains a | |||
type or mimetype. Type corresponds to a .NET class that support | |||
text/value conversion through the TypeConverter architecture. | |||
Classes that don't support this are serialized and stored with the | |||
mimetype set. | |||
The mimetype is used for serialized objects, and tells the | |||
ResXResourceReader how to depersist the object. This is currently not | |||
extensible. For a given mimetype the value must be set accordingly: | |||
Note - application/x-microsoft.net.object.binary.base64 is the format | |||
that the ResXResourceWriter will generate, however the reader can | |||
read any of the formats listed below. | |||
mimetype: application/x-microsoft.net.object.binary.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.soap.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.bytearray.base64 | |||
value : The object must be serialized into a byte array | |||
: using a System.ComponentModel.TypeConverter | |||
: and then encoded with base64 encoding. | |||
--> | |||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | |||
<xsd:element name="root" msdata:IsDataSet="true"> | |||
<xsd:complexType> | |||
<xsd:choice maxOccurs="unbounded"> | |||
<xsd:element name="metadata"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" use="required" type="xsd:string" /> | |||
<xsd:attribute name="type" type="xsd:string" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="assembly"> | |||
<xsd:complexType> | |||
<xsd:attribute name="alias" type="xsd:string" /> | |||
<xsd:attribute name="name" type="xsd:string" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="data"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | |||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="resheader"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:choice> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:schema> | |||
<resheader name="resmimetype"> | |||
<value>text/microsoft-resx</value> | |||
</resheader> | |||
<resheader name="version"> | |||
<value>2.0</value> | |||
</resheader> | |||
<resheader name="reader"> | |||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
<resheader name="writer"> | |||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
</root> |
@@ -0,0 +1,21 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Windows.Forms; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
static class Program | |||
{ | |||
/// <summary> | |||
/// The main entry point for the application. | |||
/// </summary> | |||
[STAThread] | |||
static void Main() | |||
{ | |||
Application.EnableVisualStyles(); | |||
Application.SetCompatibleTextRenderingDefault(false); | |||
Application.Run(new MainForm()); | |||
} | |||
} | |||
} |
@@ -0,0 +1,36 @@ | |||
using System.Reflection; | |||
using System.Runtime.CompilerServices; | |||
using System.Runtime.InteropServices; | |||
// General Information about an assembly is controlled through the following | |||
// set of attributes. Change these attribute values to modify the information | |||
// associated with an assembly. | |||
[assembly: AssemblyTitle("ClickForensics.Quartz.Manager")] | |||
[assembly: AssemblyDescription("")] | |||
[assembly: AssemblyConfiguration("")] | |||
[assembly: AssemblyCompany("")] | |||
[assembly: AssemblyProduct("ClickForensics.Quartz.Manager")] | |||
[assembly: AssemblyCopyright("Copyright © 2009")] | |||
[assembly: AssemblyTrademark("")] | |||
[assembly: AssemblyCulture("")] | |||
// Setting ComVisible to false makes the types in this assembly not visible | |||
// to COM components. If you need to access a type in this assembly from | |||
// COM, set the ComVisible attribute to true on that type. | |||
[assembly: ComVisible(false)] | |||
// The following GUID is for the ID of the typelib if this project is exposed to COM | |||
[assembly: Guid("e3c9ecad-833f-427c-9354-8e487448d3ee")] | |||
// Version information for an assembly consists of the following four values: | |||
// | |||
// Major Version | |||
// Minor Version | |||
// Build Number | |||
// Revision | |||
// | |||
// You can specify all the values or you can default the Build and Revision Numbers | |||
// by using the '*' as shown below: | |||
// [assembly: AssemblyVersion("1.0.*")] | |||
[assembly: AssemblyVersion("1.0.0.0")] | |||
[assembly: AssemblyFileVersion("1.0.0.0")] |
@@ -0,0 +1,63 @@ | |||
//------------------------------------------------------------------------------ | |||
// <auto-generated> | |||
// This code was generated by a tool. | |||
// Runtime Version:4.0.30319.1 | |||
// | |||
// Changes to this file may cause incorrect behavior and will be lost if | |||
// the code is regenerated. | |||
// </auto-generated> | |||
//------------------------------------------------------------------------------ | |||
namespace ClickForensics.Quartz.Manager.Properties { | |||
using System; | |||
/// <summary> | |||
/// A strongly-typed resource class, for looking up localized strings, etc. | |||
/// </summary> | |||
// This class was auto-generated by the StronglyTypedResourceBuilder | |||
// class via a tool like ResGen or Visual Studio. | |||
// To add or remove a member, edit your .ResX file then rerun ResGen | |||
// with the /str option, or rebuild your VS project. | |||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] | |||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] | |||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | |||
internal class Resources { | |||
private static global::System.Resources.ResourceManager resourceMan; | |||
private static global::System.Globalization.CultureInfo resourceCulture; | |||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] | |||
internal Resources() { | |||
} | |||
/// <summary> | |||
/// Returns the cached ResourceManager instance used by this class. | |||
/// </summary> | |||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] | |||
internal static global::System.Resources.ResourceManager ResourceManager { | |||
get { | |||
if (object.ReferenceEquals(resourceMan, null)) { | |||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ClickForensics.Quartz.Manager.Properties.Resources", typeof(Resources).Assembly); | |||
resourceMan = temp; | |||
} | |||
return resourceMan; | |||
} | |||
} | |||
/// <summary> | |||
/// Overrides the current thread's CurrentUICulture property for all | |||
/// resource lookups using this strongly typed resource class. | |||
/// </summary> | |||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] | |||
internal static global::System.Globalization.CultureInfo Culture { | |||
get { | |||
return resourceCulture; | |||
} | |||
set { | |||
resourceCulture = value; | |||
} | |||
} | |||
} | |||
} |
@@ -0,0 +1,117 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<root> | |||
<!-- | |||
Microsoft ResX Schema | |||
Version 2.0 | |||
The primary goals of this format is to allow a simple XML format | |||
that is mostly human readable. The generation and parsing of the | |||
various data types are done through the TypeConverter classes | |||
associated with the data types. | |||
Example: | |||
... ado.net/XML headers & schema ... | |||
<resheader name="resmimetype">text/microsoft-resx</resheader> | |||
<resheader name="version">2.0</resheader> | |||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |||
<value>[base64 mime encoded serialized .NET Framework object]</value> | |||
</data> | |||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |||
<comment>This is a comment</comment> | |||
</data> | |||
There are any number of "resheader" rows that contain simple | |||
name/value pairs. | |||
Each data row contains a name, and value. The row also contains a | |||
type or mimetype. Type corresponds to a .NET class that support | |||
text/value conversion through the TypeConverter architecture. | |||
Classes that don't support this are serialized and stored with the | |||
mimetype set. | |||
The mimetype is used for serialized objects, and tells the | |||
ResXResourceReader how to depersist the object. This is currently not | |||
extensible. For a given mimetype the value must be set accordingly: | |||
Note - application/x-microsoft.net.object.binary.base64 is the format | |||
that the ResXResourceWriter will generate, however the reader can | |||
read any of the formats listed below. | |||
mimetype: application/x-microsoft.net.object.binary.base64 | |||
value : The object must be serialized with | |||
: System.Serialization.Formatters.Binary.BinaryFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.soap.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.bytearray.base64 | |||
value : The object must be serialized into a byte array | |||
: using a System.ComponentModel.TypeConverter | |||
: and then encoded with base64 encoding. | |||
--> | |||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |||
<xsd:element name="root" msdata:IsDataSet="true"> | |||
<xsd:complexType> | |||
<xsd:choice maxOccurs="unbounded"> | |||
<xsd:element name="metadata"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" /> | |||
<xsd:attribute name="type" type="xsd:string" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="assembly"> | |||
<xsd:complexType> | |||
<xsd:attribute name="alias" type="xsd:string" /> | |||
<xsd:attribute name="name" type="xsd:string" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="data"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" /> | |||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="resheader"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:choice> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:schema> | |||
<resheader name="resmimetype"> | |||
<value>text/microsoft-resx</value> | |||
</resheader> | |||
<resheader name="version"> | |||
<value>2.0</value> | |||
</resheader> | |||
<resheader name="reader"> | |||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
<resheader name="writer"> | |||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
</root> |
@@ -0,0 +1,26 @@ | |||
//------------------------------------------------------------------------------ | |||
// <auto-generated> | |||
// This code was generated by a tool. | |||
// Runtime Version:4.0.30319.1 | |||
// | |||
// Changes to this file may cause incorrect behavior and will be lost if | |||
// the code is regenerated. | |||
// </auto-generated> | |||
//------------------------------------------------------------------------------ | |||
namespace ClickForensics.Quartz.Manager.Properties { | |||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] | |||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] | |||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { | |||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); | |||
public static Settings Default { | |||
get { | |||
return defaultInstance; | |||
} | |||
} | |||
} | |||
} |
@@ -0,0 +1,7 @@ | |||
<?xml version='1.0' encoding='utf-8'?> | |||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)"> | |||
<Profiles> | |||
<Profile Name="(Default)" /> | |||
</Profiles> | |||
<Settings /> | |||
</SettingsFile> |
@@ -0,0 +1,304 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Web; | |||
using System.Collections.Specialized; | |||
using Quartz.Impl; | |||
using Quartz; | |||
using System.Data; | |||
using System.Configuration; | |||
using System.Collections; | |||
using System.Windows.Forms; | |||
using System.IO; | |||
using System.Xml.Linq; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public class QuartzScheduler | |||
{ | |||
public QuartzScheduler(string server, int port, string scheduler) | |||
{ | |||
Address = string.Format("tcp://{0}:{1}/{2}", server, port, scheduler); | |||
_schedulerFactory = new StdSchedulerFactory(getProperties(Address)); | |||
try | |||
{ | |||
_scheduler = _schedulerFactory.GetScheduler(); | |||
} | |||
catch (SchedulerException se) | |||
{ | |||
MessageBox.Show("Unable to connect to the specified server", "Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); | |||
} | |||
} | |||
public string Address { get; private set; } | |||
private NameValueCollection getProperties(string address) | |||
{ | |||
NameValueCollection properties = new NameValueCollection(); | |||
properties["quartz.scheduler.instanceName"] = "RemoteClient"; | |||
properties["quartz.scheduler.proxy"] = "true"; | |||
properties["quartz.threadPool.threadCount"] = "0"; | |||
properties["quartz.scheduler.proxy.address"] = address; | |||
return properties; | |||
} | |||
public IScheduler GetScheduler() | |||
{ | |||
return _scheduler; | |||
} | |||
public DataTable GetJobs() | |||
{ | |||
DataTable table = new DataTable(); | |||
table.Columns.Add("GroupName"); | |||
table.Columns.Add("JobName"); | |||
table.Columns.Add("JobDescription"); | |||
table.Columns.Add("TriggerName"); | |||
table.Columns.Add("TriggerGroupName"); | |||
table.Columns.Add("TriggerType"); | |||
table.Columns.Add("TriggerState"); | |||
table.Columns.Add("NextFireTime"); | |||
table.Columns.Add("PreviousFireTime"); | |||
string[] jobGroups = GetScheduler().JobGroupNames; | |||
foreach (string group in jobGroups) | |||
{ | |||
string[] jobNames = GetScheduler().GetJobNames(group); | |||
foreach (string job in jobNames) | |||
{ | |||
JobDetail detail = GetScheduler().GetJobDetail(job, group); | |||
Trigger[] triggers = GetScheduler().GetTriggersOfJob(job, group); | |||
foreach (Trigger trigger in triggers) | |||
{ | |||
DataRow row = table.NewRow(); | |||
row["GroupName"] = group; | |||
row["JobName"] = job; | |||
row["JobDescription"] = detail.Description; | |||
row["TriggerName"] = trigger.Name; | |||
row["TriggerGroupName"] = trigger.Group; | |||
row["TriggerType"] = trigger.GetType().Name; | |||
row["TriggerState"] = GetScheduler().GetTriggerState(trigger.Name, trigger.Group); | |||
DateTime? nextFireTime = trigger.GetNextFireTimeUtc(); | |||
if (nextFireTime != null) | |||
{ | |||
row["NextFireTime"] = TimeZone.CurrentTimeZone.ToLocalTime((DateTime)nextFireTime); | |||
} | |||
DateTime? previousFireTime = trigger.GetPreviousFireTimeUtc(); | |||
if (previousFireTime != null) | |||
{ | |||
row["PreviousFireTime"] = TimeZone.CurrentTimeZone.ToLocalTime((DateTime)previousFireTime); | |||
} | |||
table.Rows.Add(row); | |||
} | |||
} | |||
} | |||
return table; | |||
} | |||
public void ScheduleOneTimeJob(Type jobType, JobDataMap dataMap, int clientID) | |||
{ | |||
string name = string.Format("{0}-{1}", jobType.Name, clientID); | |||
string group = clientID.ToString(); | |||
JobDetail jobDetail = new JobDetail(name, group, jobType); | |||
jobDetail.Description = "One time job"; | |||
jobDetail.Durable = false; | |||
jobDetail.Group = group; | |||
jobDetail.JobDataMap = dataMap; | |||
jobDetail.JobType = jobType; | |||
jobDetail.Name = name; | |||
jobDetail.Volatile = true; | |||
SimpleTrigger trigger = new SimpleTrigger(); | |||
trigger.Name = name; | |||
trigger.Group = group; | |||
trigger.StartTimeUtc = DateTime.UtcNow; | |||
trigger.RepeatCount = 0; | |||
trigger.RepeatInterval = TimeSpan.Zero; | |||
GetScheduler().ScheduleJob(jobDetail, trigger); | |||
} | |||
private ISchedulerFactory _schedulerFactory; | |||
private IScheduler _scheduler; | |||
public DataTable GetRunningJobs() | |||
{ | |||
DataTable table = new DataTable(); | |||
table.Columns.Add("JobName", typeof(string)); | |||
table.Columns.Add("RunTime", typeof(int)); | |||
IList jobs = GetScheduler().GetCurrentlyExecutingJobs(); | |||
foreach (JobExecutionContext context in jobs) | |||
{ | |||
DataRow row = table.NewRow(); | |||
row["JobName"] = context.JobDetail.Name; | |||
row["RunTime"] = (DateTime.Now.ToUniversalTime() - (DateTime)context.FireTimeUtc).TotalMinutes; | |||
table.Rows.Add(row); | |||
} | |||
return table; | |||
} | |||
public void BackupToFile(System.IO.FileInfo file) | |||
{ | |||
IScheduler scheduler = GetScheduler(); | |||
string[] jobGroupNames = scheduler.JobGroupNames; | |||
List<JobDetail> jobDetails = new List<JobDetail>(); | |||
foreach (var jobGroup in jobGroupNames) | |||
{ | |||
string[] jobNames = scheduler.GetJobNames(jobGroup); | |||
foreach (var jobName in jobNames) | |||
{ | |||
jobDetails.Add(scheduler.GetJobDetail(jobName, jobGroup)); | |||
} | |||
} | |||
writeToFile(file, jobDetails); | |||
} | |||
private void writeToFile(System.IO.FileInfo file, List<JobDetail> jobDetails) | |||
{ | |||
using (StreamWriter writer = file.CreateText()) | |||
{ | |||
XNamespace ns = "http://quartznet.sourceforge.net/JobSchedulingData"; | |||
XDocument doc = new XDocument(new XDeclaration("1.0", "UTF-8", "yes") | |||
, new XElement(ns + "quartz" | |||
, new XAttribute(XNamespace.Xmlns + "xsi", "http://www.w3.org/2001/XMLSchema-instance") | |||
, new XAttribute("version", "1.0") | |||
, new XAttribute("overwrite-existing-jobs", "true") | |||
) | |||
); | |||
foreach (JobDetail detail in jobDetails) | |||
{ | |||
doc.Root.Add( | |||
new XElement(ns + "job" | |||
, new XElement(ns + "job-detail" | |||
, new XElement(ns + "name", detail.Name) | |||
, new XElement(ns + "group", detail.Group) | |||
, new XElement(ns + "description", detail.Description) | |||
, new XElement(ns + "job-type", detail.JobType.FullName + "," + detail.JobType.Assembly.FullName) | |||
, new XElement(ns + "volatile", detail.Volatile) | |||
, new XElement(ns + "durable", detail.Durable) | |||
, new XElement(ns + "recover", detail.RequestsRecovery) | |||
, getJobDataMap(ns, detail.JobDataMap) | |||
) | |||
, getTriggers(ns, detail) | |||
) | |||
); | |||
} | |||
writer.Write(doc); | |||
writer.Flush(); | |||
writer.Close(); | |||
} | |||
} | |||
private XElement getJobDataMap(XNamespace ns, JobDataMap jobDataMap) | |||
{ | |||
XElement map = new XElement(ns + "job-data-map"); | |||
foreach (var key in jobDataMap.GetKeys()) | |||
{ | |||
map.Add(new XElement(ns + "entry" | |||
, new XElement(ns + "key", key) | |||
, new XElement(ns + "value", jobDataMap[key]) | |||
) | |||
); | |||
} | |||
return map; | |||
} | |||
private XElement[] getTriggers(XNamespace ns, JobDetail detail) | |||
{ | |||
Trigger[] triggers = _scheduler.GetTriggersOfJob(detail.Name, detail.Group); | |||
XElement[] elements = new XElement[triggers.Length]; | |||
for (int i = 0; i < triggers.Length; i++) | |||
{ | |||
elements[i] = new XElement(ns + "trigger"); | |||
if (triggers[i] is SimpleTrigger) | |||
{ | |||
elements[i].Add(getSimpleTrigger(ns, (SimpleTrigger)triggers[i])); | |||
} | |||
else if (triggers[i] is CronTrigger) | |||
{ | |||
elements[i].Add(getCronTrigger(ns, (CronTrigger)triggers[i])); | |||
} | |||
} | |||
return elements; | |||
} | |||
private XElement getCronTrigger(XNamespace ns, CronTrigger trigger) | |||
{ | |||
XElement cronTrigger = new XElement(ns + "cron"); | |||
addCommonTriggerData(ns, cronTrigger, trigger); | |||
cronTrigger.Add( | |||
new XElement(ns + "cron-expression", trigger.CronExpressionString) | |||
); | |||
return cronTrigger; | |||
} | |||
private void addCommonTriggerData(XNamespace ns, XElement rootTriggerElement, Trigger trigger) | |||
{ | |||
rootTriggerElement.Add( | |||
new XElement(ns + "name", trigger.Name) | |||
, new XElement(ns + "group", trigger.Group) | |||
, new XElement(ns + "description", trigger.Description) | |||
, new XElement(ns + "misfire-instruction", getMisfireInstructionText(trigger)) | |||
, new XElement(ns + "volatile", trigger.Volatile) | |||
, new XElement(ns + "job-name", trigger.JobName) | |||
, new XElement(ns + "job-group", trigger.JobGroup) | |||
); | |||
} | |||
private string getMisfireInstructionText(Trigger trigger) | |||
{ | |||
if (trigger is CronTrigger) | |||
{ | |||
return getCronTriggerMisfireInstructionText(trigger.MisfireInstruction); | |||
} | |||
return getSimpleTriggerMisfireInstructionText(trigger.MisfireInstruction); | |||
} | |||
private string getSimpleTriggerMisfireInstructionText(int misfireInstruction) | |||
{ | |||
switch (misfireInstruction) | |||
{ | |||
case 0: | |||
return "SmartPolicy"; | |||
case 1: | |||
return "FireNow"; | |||
case 2: | |||
return "RescheduleNowWithExistingRepeatCount"; | |||
case 3: | |||
return "RescheduleNowWithRemainingRepeatCount"; | |||
case 4: | |||
return "RescheduleNextWithRemainingCount"; | |||
case 5: | |||
return "RescheduleNextWithExistingCount"; | |||
default: | |||
throw new ArgumentOutOfRangeException(string.Format("{0} is not a supported misfire instruction for SimpleTrigger See Quartz.MisfireInstruction for more details.", misfireInstruction)); | |||
} | |||
} | |||
private string getCronTriggerMisfireInstructionText(int misfireInstruction) | |||
{ | |||
switch (misfireInstruction) | |||
{ | |||
case 0: | |||
return "SmartPolicy"; | |||
case 1: | |||
return "FireOnceNow"; | |||
case 2: | |||
return "DoNothing"; | |||
default: | |||
throw new ArgumentOutOfRangeException(string.Format("{0} is not a supported misfire instruction for CronTrigger See Quartz.MisfireInstruction for more details.", misfireInstruction)); | |||
} | |||
} | |||
private XElement getSimpleTrigger(XNamespace ns, SimpleTrigger trigger) | |||
{ | |||
XElement simpleTrigger = new XElement(ns + "simple"); | |||
addCommonTriggerData(ns, simpleTrigger, trigger); | |||
simpleTrigger.Add( | |||
new XElement(ns + "repeat-count", trigger.RepeatCount) | |||
, new XElement(ns + "repeat-interval", trigger.RepeatInterval.Milliseconds) | |||
); | |||
return simpleTrigger; | |||
} | |||
} | |||
} |
@@ -0,0 +1,20 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public class SchedulerNode : TreeNode | |||
{ | |||
public SchedulerNode(QuartzScheduler scheduler) | |||
: base() | |||
{ | |||
this.Text = scheduler.Address; | |||
Scheduler = scheduler; | |||
} | |||
public QuartzScheduler Scheduler { get; private set; } | |||
} | |||
} |
@@ -0,0 +1,143 @@ | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
partial class ServerConnectForm | |||
{ | |||
/// <summary> | |||
/// Required designer variable. | |||
/// </summary> | |||
private System.ComponentModel.IContainer components = null; | |||
/// <summary> | |||
/// Clean up any resources being used. | |||
/// </summary> | |||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> | |||
protected override void Dispose(bool disposing) | |||
{ | |||
if (disposing && (components != null)) | |||
{ | |||
components.Dispose(); | |||
} | |||
base.Dispose(disposing); | |||
} | |||
#region Windows Form Designer generated code | |||
/// <summary> | |||
/// Required method for Designer support - do not modify | |||
/// the contents of this method with the code editor. | |||
/// </summary> | |||
private void InitializeComponent() | |||
{ | |||
this.btnConnect = new System.Windows.Forms.Button(); | |||
this.btnCancel = new System.Windows.Forms.Button(); | |||
this.label1 = new System.Windows.Forms.Label(); | |||
this.txtServer = new System.Windows.Forms.TextBox(); | |||
this.txtPort = new System.Windows.Forms.TextBox(); | |||
this.label2 = new System.Windows.Forms.Label(); | |||
this.txtScheduler = new System.Windows.Forms.TextBox(); | |||
this.label3 = new System.Windows.Forms.Label(); | |||
this.SuspendLayout(); | |||
// | |||
// btnConnect | |||
// | |||
this.btnConnect.Location = new System.Drawing.Point(32, 87); | |||
this.btnConnect.Name = "btnConnect"; | |||
this.btnConnect.Size = new System.Drawing.Size(75, 23); | |||
this.btnConnect.TabIndex = 3; | |||
this.btnConnect.Text = "Connect"; | |||
this.btnConnect.UseVisualStyleBackColor = true; | |||
this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click); | |||
// | |||
// btnCancel | |||
// | |||
this.btnCancel.Location = new System.Drawing.Point(115, 87); | |||
this.btnCancel.Name = "btnCancel"; | |||
this.btnCancel.Size = new System.Drawing.Size(75, 23); | |||
this.btnCancel.TabIndex = 4; | |||
this.btnCancel.Text = "Cancel"; | |||
this.btnCancel.UseVisualStyleBackColor = true; | |||
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); | |||
// | |||
// label1 | |||
// | |||
this.label1.AutoSize = true; | |||
this.label1.Location = new System.Drawing.Point(29, 12); | |||
this.label1.Name = "label1"; | |||
this.label1.Size = new System.Drawing.Size(41, 13); | |||
this.label1.TabIndex = 2; | |||
this.label1.Text = "Server:"; | |||
// | |||
// txtServer | |||
// | |||
this.txtServer.Location = new System.Drawing.Point(90, 9); | |||
this.txtServer.Name = "txtServer"; | |||
this.txtServer.Size = new System.Drawing.Size(100, 20); | |||
this.txtServer.TabIndex = 0; | |||
// | |||
// txtPort | |||
// | |||
this.txtPort.Location = new System.Drawing.Point(90, 35); | |||
this.txtPort.Name = "txtPort"; | |||
this.txtPort.Size = new System.Drawing.Size(100, 20); | |||
this.txtPort.TabIndex = 1; | |||
this.txtPort.Text = "555"; | |||
// | |||
// label2 | |||
// | |||
this.label2.AutoSize = true; | |||
this.label2.Location = new System.Drawing.Point(29, 38); | |||
this.label2.Name = "label2"; | |||
this.label2.Size = new System.Drawing.Size(29, 13); | |||
this.label2.TabIndex = 8; | |||
this.label2.Text = "Port:"; | |||
// | |||
// txtScheduler | |||
// | |||
this.txtScheduler.Location = new System.Drawing.Point(90, 61); | |||
this.txtScheduler.Name = "txtScheduler"; | |||
this.txtScheduler.Size = new System.Drawing.Size(100, 20); | |||
this.txtScheduler.TabIndex = 2; | |||
this.txtScheduler.Text = "QuartzScheduler"; | |||
// | |||
// label3 | |||
// | |||
this.label3.AutoSize = true; | |||
this.label3.Location = new System.Drawing.Point(29, 64); | |||
this.label3.Name = "label3"; | |||
this.label3.Size = new System.Drawing.Size(55, 13); | |||
this.label3.TabIndex = 10; | |||
this.label3.Text = "Scheduler"; | |||
// | |||
// ServerConnectForm | |||
// | |||
this.AcceptButton = this.btnConnect; | |||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); | |||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; | |||
this.ClientSize = new System.Drawing.Size(227, 141); | |||
this.Controls.Add(this.txtScheduler); | |||
this.Controls.Add(this.label3); | |||
this.Controls.Add(this.txtPort); | |||
this.Controls.Add(this.label2); | |||
this.Controls.Add(this.txtServer); | |||
this.Controls.Add(this.label1); | |||
this.Controls.Add(this.btnCancel); | |||
this.Controls.Add(this.btnConnect); | |||
this.Name = "ServerConnectForm"; | |||
this.Text = "ServerConnectForm"; | |||
this.ResumeLayout(false); | |||
this.PerformLayout(); | |||
} | |||
#endregion | |||
private System.Windows.Forms.Button btnConnect; | |||
private System.Windows.Forms.Button btnCancel; | |||
private System.Windows.Forms.Label label1; | |||
private System.Windows.Forms.TextBox txtServer; | |||
private System.Windows.Forms.TextBox txtPort; | |||
private System.Windows.Forms.Label label2; | |||
private System.Windows.Forms.TextBox txtScheduler; | |||
private System.Windows.Forms.Label label3; | |||
} | |||
} |
@@ -0,0 +1,37 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.ComponentModel; | |||
using System.Data; | |||
using System.Drawing; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public partial class ServerConnectForm : Form | |||
{ | |||
public ServerConnectForm() | |||
{ | |||
InitializeComponent(); | |||
} | |||
private void btnCancel_Click(object sender, EventArgs e) | |||
{ | |||
this.Close(); | |||
} | |||
private void btnConnect_Click(object sender, EventArgs e) | |||
{ | |||
Server = txtServer.Text; | |||
Port = int.Parse(txtPort.Text); | |||
Scheduler = txtScheduler.Text; | |||
this.Close(); | |||
} | |||
public string Server { get; set; } | |||
public int Port { get; set; } | |||
public string Scheduler { get; set; } | |||
} | |||
} |
@@ -0,0 +1,120 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<root> | |||
<!-- | |||
Microsoft ResX Schema | |||
Version 2.0 | |||
The primary goals of this format is to allow a simple XML format | |||
that is mostly human readable. The generation and parsing of the | |||
various data types are done through the TypeConverter classes | |||
associated with the data types. | |||
Example: | |||
... ado.net/XML headers & schema ... | |||
<resheader name="resmimetype">text/microsoft-resx</resheader> | |||
<resheader name="version">2.0</resheader> | |||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> | |||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> | |||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> | |||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> | |||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> | |||
<value>[base64 mime encoded serialized .NET Framework object]</value> | |||
</data> | |||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | |||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> | |||
<comment>This is a comment</comment> | |||
</data> | |||
There are any number of "resheader" rows that contain simple | |||
name/value pairs. | |||
Each data row contains a name, and value. The row also contains a | |||
type or mimetype. Type corresponds to a .NET class that support | |||
text/value conversion through the TypeConverter architecture. | |||
Classes that don't support this are serialized and stored with the | |||
mimetype set. | |||
The mimetype is used for serialized objects, and tells the | |||
ResXResourceReader how to depersist the object. This is currently not | |||
extensible. For a given mimetype the value must be set accordingly: | |||
Note - application/x-microsoft.net.object.binary.base64 is the format | |||
that the ResXResourceWriter will generate, however the reader can | |||
read any of the formats listed below. | |||
mimetype: application/x-microsoft.net.object.binary.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.soap.base64 | |||
value : The object must be serialized with | |||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter | |||
: and then encoded with base64 encoding. | |||
mimetype: application/x-microsoft.net.object.bytearray.base64 | |||
value : The object must be serialized into a byte array | |||
: using a System.ComponentModel.TypeConverter | |||
: and then encoded with base64 encoding. | |||
--> | |||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> | |||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> | |||
<xsd:element name="root" msdata:IsDataSet="true"> | |||
<xsd:complexType> | |||
<xsd:choice maxOccurs="unbounded"> | |||
<xsd:element name="metadata"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" use="required" type="xsd:string" /> | |||
<xsd:attribute name="type" type="xsd:string" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="assembly"> | |||
<xsd:complexType> | |||
<xsd:attribute name="alias" type="xsd:string" /> | |||
<xsd:attribute name="name" type="xsd:string" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="data"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> | |||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> | |||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> | |||
<xsd:attribute ref="xml:space" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
<xsd:element name="resheader"> | |||
<xsd:complexType> | |||
<xsd:sequence> | |||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> | |||
</xsd:sequence> | |||
<xsd:attribute name="name" type="xsd:string" use="required" /> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:choice> | |||
</xsd:complexType> | |||
</xsd:element> | |||
</xsd:schema> | |||
<resheader name="resmimetype"> | |||
<value>text/microsoft-resx</value> | |||
</resheader> | |||
<resheader name="version"> | |||
<value>2.0</value> | |||
</resheader> | |||
<resheader name="reader"> | |||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
<resheader name="writer"> | |||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> | |||
</resheader> | |||
</root> |
@@ -0,0 +1,20 @@ | |||
using System; | |||
using System.Collections.Generic; | |||
using System.Linq; | |||
using System.Text; | |||
using System.Windows.Forms; | |||
using Quartz; | |||
namespace ClickForensics.Quartz.Manager | |||
{ | |||
public class TriggerNode : TreeNode | |||
{ | |||
public TriggerNode(Trigger trigger) | |||
{ | |||
Text = trigger.Name; | |||
Trigger = trigger; | |||
} | |||
public Trigger Trigger { get; set; } | |||
} | |||
} |
@@ -0,0 +1,3 @@ | |||
<?xml version="1.0"?> | |||
<configuration> | |||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration> |
@@ -0,0 +1,26 @@ | |||
| |||
Microsoft Visual Studio Solution File, Format Version 11.00 | |||
# Visual Studio 2010 | |||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClickForensics.Quartz.Manager", "ClickForensics.Quartz.Manager\ClickForensics.Quartz.Manager.csproj", "{D23DACFA-11A1-480E-A6C4-1F37B564523D}" | |||
EndProject | |||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ClickForensics.Quartz.Manager.Tests", "ClickForensics.Quartz.Manager.Tests\ClickForensics.Quartz.Manager.Tests.csproj", "{B8B682CC-3E41-4810-86BF-B6728FB26D3A}" | |||
EndProject | |||
Global | |||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||
Debug|Any CPU = Debug|Any CPU | |||
Release|Any CPU = Release|Any CPU | |||
EndGlobalSection | |||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||
{D23DACFA-11A1-480E-A6C4-1F37B564523D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{D23DACFA-11A1-480E-A6C4-1F37B564523D}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{D23DACFA-11A1-480E-A6C4-1F37B564523D}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{D23DACFA-11A1-480E-A6C4-1F37B564523D}.Release|Any CPU.Build.0 = Release|Any CPU | |||
{B8B682CC-3E41-4810-86BF-B6728FB26D3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||
{B8B682CC-3E41-4810-86BF-B6728FB26D3A}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||
{B8B682CC-3E41-4810-86BF-B6728FB26D3A}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||
{B8B682CC-3E41-4810-86BF-B6728FB26D3A}.Release|Any CPU.Build.0 = Release|Any CPU | |||
EndGlobalSection | |||
GlobalSection(SolutionProperties) = preSolution | |||
HideSolutionNode = FALSE | |||
EndGlobalSection | |||
EndGlobal |