From 6897bddf1d8a3b92930cf9a17fbb73dc78c23f60 Mon Sep 17 00:00:00 2001 From: jvilalta Date: Sat, 29 Jan 2011 23:15:57 -0600 Subject: [PATCH 1/7] Add setup project --- ...ClickForensics.Quartz.Manager.Setup.vdproj | 789 ++++++++++++++++++ Clickforensics.Quartz.sln | 56 +- 2 files changed, 819 insertions(+), 26 deletions(-) create mode 100644 ClickForensics.Quartz.Manager.Setup/ClickForensics.Quartz.Manager.Setup.vdproj diff --git a/ClickForensics.Quartz.Manager.Setup/ClickForensics.Quartz.Manager.Setup.vdproj b/ClickForensics.Quartz.Manager.Setup/ClickForensics.Quartz.Manager.Setup.vdproj new file mode 100644 index 0000000..af2ac0e --- /dev/null +++ b/ClickForensics.Quartz.Manager.Setup/ClickForensics.Quartz.Manager.Setup.vdproj @@ -0,0 +1,789 @@ +"DeployProject" +{ +"VSVersion" = "3:800" +"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:ClickForensics.Quartz.Manager.Setup" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_22F9343A882E45B59179759884B708BD" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_83338C49D0D67DD7EF205F46DAE10460" + "OwnerKey" = "8:_22F9343A882E45B59179759884B708BD" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_83338C49D0D67DD7EF205F46DAE10460" + "OwnerKey" = "8:_A642F7ED05F92289AD6A8C4EF5BE6CEB" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_A642F7ED05F92289AD6A8C4EF5BE6CEB" + "OwnerKey" = "8:_22F9343A882E45B59179759884B708BD" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_83338C49D0D67DD7EF205F46DAE10460" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_22F9343A882E45B59179759884B708BD" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_A642F7ED05F92289AD6A8C4EF5BE6CEB" + "MsmSig" = "8:_UNDEFINED" + } + } + "Configurations" + { + "Debug" + { + "DisplayName" = "8:Debug" + "IsDebugOnly" = "11:TRUE" + "IsReleaseOnly" = "11:FALSE" + "OutputFilename" = "8:Debug\\ClickForensics.Quartz.Manager.Setup.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + } + "Release" + { + "DisplayName" = "8:Release" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:Release\\ClickForensics.Quartz.Manager.Setup.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "ExternalPersistence" + { + "LaunchCondition" + { + "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_CCEA8FC96D19474B874455D3CCF33CE0" + { + "Name" = "8:.NET Framework" + "Message" = "8:[VSDNETMSG]" + "FrameworkVersion" = "8:.NETFramework,Version=v4.0,Profile=Client" + "AllowLaterVersions" = "11:FALSE" + "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=131000" + } + } + } + "File" + { + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_83338C49D0D67DD7EF205F46DAE10460" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Common.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=af08829b84f0328e" + "ScatterAssemblies" + { + "_83338C49D0D67DD7EF205F46DAE10460" + { + "Name" = "8:Common.Logging.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Common.Logging.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_D7658F850B314942942D9354F682D7DA" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_A642F7ED05F92289AD6A8C4EF5BE6CEB" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Quartz, Version=1.0.3.3, Culture=neutral, PublicKeyToken=f6b8c98a402cc8a4, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_A642F7ED05F92289AD6A8C4EF5BE6CEB" + { + "Name" = "8:Quartz.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Quartz.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_D7658F850B314942942D9354F682D7DA" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + } + "FileType" + { + } + "Folder" + { + "{1525181F-901A-416C-8A58-119130FE478E}:_2DFE13F72263412482CC25325094CD0E" + { + "Name" = "8:#1919" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:ProgramMenuFolder" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_48E4411F823C4182AA93CB1DEE5A85DE" + { + "Name" = "8:#1916" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:DesktopFolder" + "Folders" + { + } + } + "{3C67513D-01DD-4637-8A68-80971EB9504F}:_D7658F850B314942942D9354F682D7DA" + { + "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]" + "Name" = "8:#1925" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + } + } + } + "LaunchCondition" + { + } + "Locator" + { + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + "RequiresElevation" = "11:FALSE" + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:Quartz.Net Manager" + "ProductCode" = "8:{35E7E363-C413-4BCA-B0D6-1E0D7277F2EB}" + "PackageCode" = "8:{E6C664D3-E69B-456A-A4AD-D6312897A3C8}" + "UpgradeCode" = "8:{41236195-C6AD-462D-934D-034CDFCDB6E0}" + "AspNetVersion" = "8:4.0.30319.0" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:TRUE" + "DetectNewerInstalledVersion" = "11:TRUE" + "InstallAllUsers" = "11:FALSE" + "ProductVersion" = "8:1.0.0" + "Manufacturer" = "8:ClickForensics, Inc." + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:" + "Title" = "8:ClickForensics.Quartz.Manager.Setup" + "Subject" = "8:" + "ARPCONTACT" = "8:ClickForensics, Inc." + "Keywords" = "8:" + "ARPCOMMENTS" = "8:" + "ARPURLINFOABOUT" = "8:" + "ARPPRODUCTICON" = "8:" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + "TargetPlatform" = "3:0" + "PreBuildEvent" = "8:" + "PostBuildEvent" = "8:" + "RunPostBuildEvent" = "3:0" + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_B4220E363EC14CF2B3A44348BAB70951" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_5156202A098548DD98A8D6E1FA487761" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_7FFAB1941A5A403691E5A683B7842CBC" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_A8569B08ACB948C5B48E4C4A9731C9D4" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "Sequences" + { + } + "Shortcut" + { + } + "UserInterface" + { + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_14558A287A0E41438AE987688116DBFA" + { + "Name" = "8:#1902" + "Sequence" = "3:2" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2FB205E68D2F4D77A5AE481049A069AA" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_3FF6F1BEDD0E4167BD467FC13167A4D5" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdBasicDialogs.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_473350A966AB4854AD5FD519DEF39A89" + { + "Name" = "8:#1901" + "Sequence" = "3:2" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_AB2CF4801C5945EE8F67C942D3D777DA" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_730228774740491299084586E3DA0F29" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_032C3132F50F436D91F2F92655D592C9" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D060C2D0A2EA4E9D80A5A19AC424BD00" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_DAA023DF61B0444E86F294BC30FCE593" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_7D3109F4329444CDA8FBDA46A4E6C402" + { + "Name" = "8:#1902" + "Sequence" = "3:1" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_A79B037FC1CB4073A73B7B65FDF947AD" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "UpdateText" + { + "Name" = "8:UpdateText" + "DisplayName" = "8:#1058" + "Description" = "8:#1158" + "Type" = "3:15" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1258" + "DefaultValue" = "8:#1258" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_8B9B85CF9A5646FC8B87402B42612841" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdUserInterface.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_C9013562D07846FB97CFB64428E97F05" + { + "Name" = "8:#1901" + "Sequence" = "3:1" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_81DD533AF753423197E708723F75C57D" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_DBF3D57D665043D98FF2F558858ECB55" + { + "Name" = "8:#1900" + "Sequence" = "3:1" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_2680F32469454E378A115D5C84124824" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_8A1148030F4E4277B42C73568C15D246" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_DB98B8F07F7640C58E7DD26D360A49BA" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "InstallAllUsersVisible" + { + "Name" = "8:InstallAllUsersVisible" + "DisplayName" = "8:#1059" + "Description" = "8:#1159" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + } + "MergeModule" + { + } + "ProjectOutput" + { + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_22F9343A882E45B59179759884B708BD" + { + "SourcePath" = "8:..\\ClickForensics.Quartz.Manager\\obj\\Debug\\ClickForensics.Quartz.Manager.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_D7658F850B314942942D9354F682D7DA" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{D23DACFA-11A1-480E-A6C4-1F37B564523D}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + } + } +} diff --git a/Clickforensics.Quartz.sln b/Clickforensics.Quartz.sln index 56cfbad..0b0d8a3 100644 --- a/Clickforensics.Quartz.sln +++ b/Clickforensics.Quartz.sln @@ -1,26 +1,30 @@ - -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 + +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 +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "ClickForensics.Quartz.Manager.Setup", "ClickForensics.Quartz.Manager.Setup\ClickForensics.Quartz.Manager.Setup.vdproj", "{06504FA3-020F-4CA2-8438-8295E23560E9}" +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 + {06504FA3-020F-4CA2-8438-8295E23560E9}.Debug|Any CPU.ActiveCfg = Debug + {06504FA3-020F-4CA2-8438-8295E23560E9}.Release|Any CPU.ActiveCfg = Release + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal From ea33119084921545a122719f441a3882b0c58a67 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 1 Feb 2011 13:07:21 -0600 Subject: [PATCH 2/7] update the setup project --- .gitignore | 4 +- ...ClickForensics.Quartz.Manager.Setup.vdproj | 64 +++++++++++++++++-- Clickforensics.Quartz.sln | 1 + 3 files changed, 63 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 9ce2b40..9f75ef6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ obj/ bin/ *.user -*.suo \ No newline at end of file +*.suo +ClickForensics.Quartz.Manager.Setup/Release/ +_ReSharper.Clickforensics.Quartz/ diff --git a/ClickForensics.Quartz.Manager.Setup/ClickForensics.Quartz.Manager.Setup.vdproj b/ClickForensics.Quartz.Manager.Setup/ClickForensics.Quartz.Manager.Setup.vdproj index af2ac0e..6b95378 100644 --- a/ClickForensics.Quartz.Manager.Setup/ClickForensics.Quartz.Manager.Setup.vdproj +++ b/ClickForensics.Quartz.Manager.Setup/ClickForensics.Quartz.Manager.Setup.vdproj @@ -40,19 +40,19 @@ "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_83338C49D0D67DD7EF205F46DAE10460" + "OwnerKey" = "8:_22F9343A882E45B59179759884B708BD" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_22F9343A882E45B59179759884B708BD" + "OwnerKey" = "8:_A642F7ED05F92289AD6A8C4EF5BE6CEB" "MsmSig" = "8:_UNDEFINED" } "Entry" { "MsmKey" = "8:_UNDEFINED" - "OwnerKey" = "8:_A642F7ED05F92289AD6A8C4EF5BE6CEB" + "OwnerKey" = "8:_83338C49D0D67DD7EF205F46DAE10460" "MsmSig" = "8:_UNDEFINED" } } @@ -73,6 +73,14 @@ "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + } } "Release" { @@ -89,6 +97,27 @@ "PrivateKeyFile" = "8:" "TimeStampServer" = "8:" "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0,Profile=Client" + { + "Name" = "8:Microsoft .NET Framework 4 Client Profile (x86 and x64)" + "ProductCode" = "8:.NETFramework,Version=v4.0,Profile=Client" + } + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1" + { + "Name" = "8:Windows Installer 3.1" + "ProductCode" = "8:Microsoft.Windows.Installer.3.1" + } + } + } } } "Deployable" @@ -195,6 +224,17 @@ "Property" = "8:ProgramMenuFolder" "Folders" { + "{9EF0B969-E518-4E46-987F-47570745A589}:_0FC88F825EDD4368B5833CF24EA9731E" + { + "Name" = "8:Quartz.Net Manager" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_DDDD3FF22F9043049C3D773230BB889A" + "Folders" + { + } + } } } "{1525181F-901A-416C-8A58-119130FE478E}:_48E4411F823C4182AA93CB1DEE5A85DE" @@ -237,7 +277,7 @@ "Name" = "8:Microsoft Visual Studio" "ProductName" = "8:Quartz.Net Manager" "ProductCode" = "8:{35E7E363-C413-4BCA-B0D6-1E0D7277F2EB}" - "PackageCode" = "8:{E6C664D3-E69B-456A-A4AD-D6312897A3C8}" + "PackageCode" = "8:{E292DFAA-0752-4BA9-945D-F33FD0742798}" "UpgradeCode" = "8:{41236195-C6AD-462D-934D-034CDFCDB6E0}" "AspNetVersion" = "8:4.0.30319.0" "RestartWWWService" = "11:FALSE" @@ -357,6 +397,20 @@ } "Shortcut" { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_98F4ED1F58E0497F82C26F67F86237D9" + { + "Name" = "8:Quartz.Net Manager" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_22F9343A882E45B59179759884B708BD" + "Folder" = "8:_0FC88F825EDD4368B5833CF24EA9731E" + "WorkingFolder" = "8:_D7658F850B314942942D9354F682D7DA" + "Icon" = "8:" + "Feature" = "8:" + } } "UserInterface" { @@ -758,7 +812,7 @@ { "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_22F9343A882E45B59179759884B708BD" { - "SourcePath" = "8:..\\ClickForensics.Quartz.Manager\\obj\\Debug\\ClickForensics.Quartz.Manager.exe" + "SourcePath" = "8:..\\ClickForensics.Quartz.Manager\\obj\\Release\\ClickForensics.Quartz.Manager.exe" "TargetName" = "8:" "Tag" = "8:" "Folder" = "8:_D7658F850B314942942D9354F682D7DA" diff --git a/Clickforensics.Quartz.sln b/Clickforensics.Quartz.sln index 0b0d8a3..507de7e 100644 --- a/Clickforensics.Quartz.sln +++ b/Clickforensics.Quartz.sln @@ -23,6 +23,7 @@ Global {B8B682CC-3E41-4810-86BF-B6728FB26D3A}.Release|Any CPU.Build.0 = Release|Any CPU {06504FA3-020F-4CA2-8438-8295E23560E9}.Debug|Any CPU.ActiveCfg = Debug {06504FA3-020F-4CA2-8438-8295E23560E9}.Release|Any CPU.ActiveCfg = Release + {06504FA3-020F-4CA2-8438-8295E23560E9}.Release|Any CPU.Build.0 = Release EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 527f0e9b0a514ee7473b79ca3d89e7bf537315c1 Mon Sep 17 00:00:00 2001 From: jvilalta Date: Wed, 16 Feb 2011 18:05:09 -0600 Subject: [PATCH 3/7] fixed cancel button bug. implemented simple trigger display. begin implementation of server connection MRU. --- .../ClickForensics.Quartz.Manager.csproj | 395 ++++----- .../ConnectionInfo.cs | 14 + ClickForensics.Quartz.Manager/MainForm.cs | 796 +++++++++--------- .../QuartzScheduler.cs | 622 +++++++------- .../RegistryStore.cs | 37 + .../ServerConnectForm.Designer.cs | 286 +++---- .../ServerConnectForm.cs | 80 +- .../ServerConnectForm.resx | 238 +++--- .../SimpleTriggerDisplay.Designer.cs | 215 +++++ .../SimpleTriggerDisplay.cs | 55 ++ .../SimpleTriggerDisplay.resx | 120 +++ 11 files changed, 1677 insertions(+), 1181 deletions(-) create mode 100644 ClickForensics.Quartz.Manager/ConnectionInfo.cs create mode 100644 ClickForensics.Quartz.Manager/RegistryStore.cs create mode 100644 ClickForensics.Quartz.Manager/SimpleTriggerDisplay.Designer.cs create mode 100644 ClickForensics.Quartz.Manager/SimpleTriggerDisplay.cs create mode 100644 ClickForensics.Quartz.Manager/SimpleTriggerDisplay.resx diff --git a/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj b/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj index cc36f3e..34d50a3 100644 --- a/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj +++ b/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj @@ -1,199 +1,210 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {D23DACFA-11A1-480E-A6C4-1F37B564523D} - WinExe - Properties - ClickForensics.Quartz.Manager - ClickForensics.Quartz.Manager - v4.0 - 512 - - - 3.5 - - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\lib\Common.Logging.dll - - - ..\lib\Quartz.dll - - - - - 3.5 - - - 3.5 - - - 3.5 - - - - - - - - - - Form - - - AddJobForm.cs - - - Form - - - AddListenerForm.cs - - - Form - - - ErrorDialog.cs - - - - UserControl - - - NativeJobDetailDisplay.cs - - - - Form - - - MainForm.cs - - - - - AddJobForm.cs - - - AddListenerForm.cs - - - CronTriggerDisplay.cs - - - ErrorDialog.cs - - - MainForm.cs - - - NativeJobDetailDisplay.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - ServerConnectForm.cs - - - True - Resources.resx - True - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - Form - - - ServerConnectForm.cs - - - UserControl - - - CronTriggerDisplay.cs - - - - - - PreserveNewest - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D23DACFA-11A1-480E-A6C4-1F37B564523D} + WinExe + Properties + ClickForensics.Quartz.Manager + ClickForensics.Quartz.Manager + v4.0 + 512 + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\lib\Common.Logging.dll + + + ..\lib\Quartz.dll + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + Form + + + AddJobForm.cs + + + Form + + + AddListenerForm.cs + + + + UserControl + + + SimpleTriggerDisplay.cs + + + Form + + + ErrorDialog.cs + + + + UserControl + + + NativeJobDetailDisplay.cs + + + + Form + + + MainForm.cs + + + + + AddJobForm.cs + + + AddListenerForm.cs + + + SimpleTriggerDisplay.cs + + + CronTriggerDisplay.cs + + + ErrorDialog.cs + + + MainForm.cs + + + NativeJobDetailDisplay.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + ServerConnectForm.cs + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + Form + + + ServerConnectForm.cs + + + UserControl + + + CronTriggerDisplay.cs + + + + + + PreserveNewest + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + --> \ No newline at end of file diff --git a/ClickForensics.Quartz.Manager/ConnectionInfo.cs b/ClickForensics.Quartz.Manager/ConnectionInfo.cs new file mode 100644 index 0000000..b71b5d5 --- /dev/null +++ b/ClickForensics.Quartz.Manager/ConnectionInfo.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ClickForensics.Quartz.Manager +{ + public class ConnectionInfo + { + public string ServerName { get; set; } + public int Port { get; set; } + public string SchedulerName { get; set; } + } +} diff --git a/ClickForensics.Quartz.Manager/MainForm.cs b/ClickForensics.Quartz.Manager/MainForm.cs index 42682c9..56bf29f 100644 --- a/ClickForensics.Quartz.Manager/MainForm.cs +++ b/ClickForensics.Quartz.Manager/MainForm.cs @@ -1,380 +1,416 @@ -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 = DateTime.Now.ToString("yyyy.MM.dd HH:mm.ss"); - - } - finally - { - this.Cursor = Cursors.Default; - } - - - } - - private void jobDetailsToggle(bool 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[] { Convert.ToString(row["JobName"]), Convert.ToString(row["Runtime"]) }); - listView_RunningJobs.Items.Add(item); - } - StripStatusLabel_Jobs_Refresh_date.Text = 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 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 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(); - } - } -} +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); + } + if (((TriggerNode)e.Node).Trigger is SimpleTrigger) + { + pnlDetails.Controls.Add(new SimpleTriggerDisplay((SimpleTrigger)((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(); + if (form.Cancelled) + { + return; + } + 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 = DateTime.Now.ToString("yyyy.MM.dd HH:mm.ss"); + loadOrphanJobs(schedulerNode); + loadStuckTriggers(schedulerNode); + } + finally + { + this.Cursor = Cursors.Default; + } + + + } + + private void loadStuckTriggers(SchedulerNode schedulerNode) + { + TreeNode jobGroupsNode = schedulerNode.Nodes.Add("Stuck Triggers"); + } + + private void loadOrphanJobs(SchedulerNode schedulerNode) + { + TreeNode jobGroupsNode = schedulerNode.Nodes.Add("Orphan Jobs"); + } + + private void jobDetailsToggle(bool 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) + { + node.Nodes.Add(string.Format("Unknown Job Type ({0})", jobName)); + //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); + addCalendarNode(node); + } + + } + + private void addCalendarNode(TriggerNode node) + { + if (node.Trigger.CalendarName != null) + { + //TODO: Convert this to a CalendarNode and implement CalendarDisplay controls + node.Nodes.Add(node.Trigger.CalendarName); + } + else + { + node.Nodes.Add("No calendar found"); + } + } + + 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[] { Convert.ToString(row["JobName"]), Convert.ToString(row["Runtime"]) }); + listView_RunningJobs.Items.Add(item); + } + StripStatusLabel_Jobs_Refresh_date.Text = 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 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 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(); + } + } +} diff --git a/ClickForensics.Quartz.Manager/QuartzScheduler.cs b/ClickForensics.Quartz.Manager/QuartzScheduler.cs index 561e9ca..1bdcda7 100644 --- a/ClickForensics.Quartz.Manager/QuartzScheduler.cs +++ b/ClickForensics.Quartz.Manager/QuartzScheduler.cs @@ -1,311 +1,311 @@ -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)); - try - { - 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); - } - } - catch (Exception ex) - { - //TODO: Let the user know we couldn't load the running jobs. - } - - return table; - } - - public void BackupToFile(System.IO.FileInfo file) - { - IScheduler scheduler = GetScheduler(); - string[] jobGroupNames = scheduler.JobGroupNames; - List jobDetails = new List(); - 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 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; - } - } -} +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) + { + 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)); + try + { + 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); + } + } + catch (Exception ex) + { + //TODO: Let the user know we couldn't load the running jobs. + } + + return table; + } + + public void BackupToFile(System.IO.FileInfo file) + { + IScheduler scheduler = GetScheduler(); + string[] jobGroupNames = scheduler.JobGroupNames; + List jobDetails = new List(); + 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 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; + } + } +} diff --git a/ClickForensics.Quartz.Manager/RegistryStore.cs b/ClickForensics.Quartz.Manager/RegistryStore.cs new file mode 100644 index 0000000..08e33b5 --- /dev/null +++ b/ClickForensics.Quartz.Manager/RegistryStore.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Microsoft.Win32; + +namespace ClickForensics.Quartz.Manager +{ + public class RegistryStore + { + + public static List GetLastConnections() + { + List lastConnections = new List(); + + RegistryKey key = Registry.CurrentUser.CreateSubKey("QuartzNetManager").CreateSubKey("MRUList"); + if (key != null) + { + for (int i = 0; i < 5; i++) + { + ConnectionInfo info = (ConnectionInfo)key.GetValue(string.Format("connection{0}", i), null); + if (info != null) + { + lastConnections.Add(info); + } + } + } + key.Close(); + return lastConnections; + } + public static void AddConnection(ConnectionInfo info) + { + + } + private static object lockObject = new object(); + } +} diff --git a/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs b/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs index 49ae7d4..e642345 100644 --- a/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs +++ b/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs @@ -1,143 +1,145 @@ -namespace ClickForensics.Quartz.Manager -{ - partial class ServerConnectForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - 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; - } +namespace ClickForensics.Quartz.Manager +{ + partial class ServerConnectForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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.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.cboServer = new System.Windows.Forms.ComboBox(); + 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:"; + // + // 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"; + // + // cboServer + // + this.cboServer.FormattingEnabled = true; + this.cboServer.Location = new System.Drawing.Point(90, 8); + this.cboServer.Name = "cboServer"; + this.cboServer.Size = new System.Drawing.Size(100, 21); + this.cboServer.TabIndex = 1; + this.cboServer.SelectedIndexChanged += new System.EventHandler(this.cboServer_SelectedIndexChanged); + // + // 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.cboServer); + this.Controls.Add(this.txtScheduler); + this.Controls.Add(this.label3); + this.Controls.Add(this.txtPort); + this.Controls.Add(this.label2); + 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 txtPort; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox txtScheduler; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.ComboBox cboServer; + } } \ No newline at end of file diff --git a/ClickForensics.Quartz.Manager/ServerConnectForm.cs b/ClickForensics.Quartz.Manager/ServerConnectForm.cs index 0610da6..3b544b5 100644 --- a/ClickForensics.Quartz.Manager/ServerConnectForm.cs +++ b/ClickForensics.Quartz.Manager/ServerConnectForm.cs @@ -1,37 +1,43 @@ -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; } - - - } -} +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(); + cboServer.DataSource = RegistryStore.GetLastConnections(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + Cancelled = true; + this.Close(); + } + + private void btnConnect_Click(object sender, EventArgs e) + { + Server = cboServer.Text; + Port = int.Parse(txtPort.Text); + Scheduler = txtScheduler.Text; + RegistryStore.AddConnection(new ConnectionInfo { ServerName = Server, Port = Port, SchedulerName = Scheduler }); + this.Close(); + } + public string Server { get; set; } + public int Port { get; set; } + public string Scheduler { get; set; } + public bool Cancelled { get; set; } + private void cboServer_SelectedIndexChanged(object sender, EventArgs e) + { + + } + } +} diff --git a/ClickForensics.Quartz.Manager/ServerConnectForm.resx b/ClickForensics.Quartz.Manager/ServerConnectForm.resx index d58980a..c7e0d4b 100644 --- a/ClickForensics.Quartz.Manager/ServerConnectForm.resx +++ b/ClickForensics.Quartz.Manager/ServerConnectForm.resx @@ -1,120 +1,120 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/ClickForensics.Quartz.Manager/SimpleTriggerDisplay.Designer.cs b/ClickForensics.Quartz.Manager/SimpleTriggerDisplay.Designer.cs new file mode 100644 index 0000000..9a6a23a --- /dev/null +++ b/ClickForensics.Quartz.Manager/SimpleTriggerDisplay.Designer.cs @@ -0,0 +1,215 @@ +namespace ClickForensics.Quartz.Manager +{ + partial class SimpleTriggerDisplay + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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.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.lblRepeatCount = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.lblRepeatInterval = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(116, 15); + 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, 15); + 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, 36); + 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, 36); + 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, 57); + 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, 57); + 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, 99); + 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, 99); + 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, 78); + 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, 78); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(78, 13); + this.label11.TabIndex = 10; + this.label11.Text = "Next Fire Time:"; + // + // lblRepeatCount + // + this.lblRepeatCount.AutoSize = true; + this.lblRepeatCount.Location = new System.Drawing.Point(116, 121); + this.lblRepeatCount.Name = "lblRepeatCount"; + this.lblRepeatCount.Size = new System.Drawing.Size(35, 13); + this.lblRepeatCount.TabIndex = 13; + this.lblRepeatCount.Text = "label8"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(14, 121); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(76, 13); + this.label2.TabIndex = 12; + this.label2.Text = "Repeat Count:"; + // + // lblRepeatInterval + // + this.lblRepeatInterval.AutoSize = true; + this.lblRepeatInterval.Location = new System.Drawing.Point(116, 144); + this.lblRepeatInterval.Name = "lblRepeatInterval"; + this.lblRepeatInterval.Size = new System.Drawing.Size(35, 13); + this.lblRepeatInterval.TabIndex = 15; + this.lblRepeatInterval.Text = "label8"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(14, 144); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(83, 13); + this.label6.TabIndex = 14; + this.label6.Text = "Repeat Interval:"; + // + // SimpleTriggerDisplay + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.lblRepeatInterval); + this.Controls.Add(this.label6); + this.Controls.Add(this.lblRepeatCount); + this.Controls.Add(this.label2); + 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.Name = "SimpleTriggerDisplay"; + this.Size = new System.Drawing.Size(324, 168); + 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 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.Label lblRepeatCount; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label lblRepeatInterval; + private System.Windows.Forms.Label label6; + } +} diff --git a/ClickForensics.Quartz.Manager/SimpleTriggerDisplay.cs b/ClickForensics.Quartz.Manager/SimpleTriggerDisplay.cs new file mode 100644 index 0000000..468854f --- /dev/null +++ b/ClickForensics.Quartz.Manager/SimpleTriggerDisplay.cs @@ -0,0 +1,55 @@ +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 SimpleTriggerDisplay : UserControl + { + public SimpleTriggerDisplay() + { + InitializeComponent(); + this.Load += new EventHandler(SimpleTriggerDisplay_Load); + } + + void SimpleTriggerDisplay_Load(object sender, EventArgs e) + { + 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"; + } + lblRepeatCount.Text = _trigger.RepeatCount.ToString(); + lblRepeatInterval.Text = _trigger.RepeatInterval.ToString(); + } + public SimpleTriggerDisplay(SimpleTrigger trigger) + : this() + { + _trigger = trigger; + + } + + private SimpleTrigger _trigger; + } +} diff --git a/ClickForensics.Quartz.Manager/SimpleTriggerDisplay.resx b/ClickForensics.Quartz.Manager/SimpleTriggerDisplay.resx new file mode 100644 index 0000000..c7e0d4b --- /dev/null +++ b/ClickForensics.Quartz.Manager/SimpleTriggerDisplay.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file From 859e365c42f339a4d10aeb43bcef36144ad34a4f Mon Sep 17 00:00:00 2001 From: jvilalta Date: Wed, 16 Feb 2011 18:33:01 -0600 Subject: [PATCH 4/7] fixed interaction with x on server connect form. pulling last server from registry now works --- .../ClickForensics.Quartz.Manager.csproj | 2 +- .../ConnectionInfo.cs | 21 +++++++++++ ClickForensics.Quartz.Manager/MainForm.cs | 35 +++++++++---------- .../RegistryStore.cs | 15 +++++++- .../ServerConnectForm.Designer.cs | 1 + .../ServerConnectForm.cs | 8 ++++- 6 files changed, 61 insertions(+), 21 deletions(-) diff --git a/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj b/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj index 34d50a3..ef624bd 100644 --- a/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj +++ b/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj @@ -161,7 +161,7 @@ True - + Form diff --git a/ClickForensics.Quartz.Manager/ConnectionInfo.cs b/ClickForensics.Quartz.Manager/ConnectionInfo.cs index b71b5d5..9d97873 100644 --- a/ClickForensics.Quartz.Manager/ConnectionInfo.cs +++ b/ClickForensics.Quartz.Manager/ConnectionInfo.cs @@ -7,8 +7,29 @@ namespace ClickForensics.Quartz.Manager { public class ConnectionInfo { + public ConnectionInfo() + { + + } + public static ConnectionInfo Parse(string connectionString) + { + if (connectionString == null) + { + return null; + } + string[] parameters = connectionString.Split(new string[] { "|" }, StringSplitOptions.None); + if (parameters.Length != 3) + { + return null; + } + return new ConnectionInfo { ServerName = parameters[0], Port = int.Parse(parameters[1]), SchedulerName = parameters[2] }; + } public string ServerName { get; set; } public int Port { get; set; } public string SchedulerName { get; set; } + public override string ToString() + { + return string.Format("{0}|{1}|{2}", ServerName, Port, SchedulerName); + } } } diff --git a/ClickForensics.Quartz.Manager/MainForm.cs b/ClickForensics.Quartz.Manager/MainForm.cs index 56bf29f..46574b5 100644 --- a/ClickForensics.Quartz.Manager/MainForm.cs +++ b/ClickForensics.Quartz.Manager/MainForm.cs @@ -96,25 +96,24 @@ namespace ClickForensics.Quartz.Manager using (ServerConnectForm form = new ServerConnectForm()) { form.ShowDialog(); - if (form.Cancelled) + if (!form.Cancelled) { - return; - } - 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(); + 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(); } diff --git a/ClickForensics.Quartz.Manager/RegistryStore.cs b/ClickForensics.Quartz.Manager/RegistryStore.cs index 08e33b5..0b8095f 100644 --- a/ClickForensics.Quartz.Manager/RegistryStore.cs +++ b/ClickForensics.Quartz.Manager/RegistryStore.cs @@ -18,7 +18,7 @@ namespace ClickForensics.Quartz.Manager { for (int i = 0; i < 5; i++) { - ConnectionInfo info = (ConnectionInfo)key.GetValue(string.Format("connection{0}", i), null); + ConnectionInfo info = ConnectionInfo.Parse((key.GetValue(string.Format("connection{0}", i), null) as string)); if (info != null) { lastConnections.Add(info); @@ -30,7 +30,20 @@ namespace ClickForensics.Quartz.Manager } public static void AddConnection(ConnectionInfo info) { + RegistryKey key = Registry.CurrentUser.CreateSubKey("QuartzNetManager").CreateSubKey("MRUList"); + if (key != null) + { + for (int i = 4; i > 0; i--) + { + var previous = key.GetValue(string.Format("connection{0}", i - 1), null); + if (previous != null) + { + key.SetValue(string.Format("connection{0}", i), previous); + } + } + key.SetValue("connection0", info, RegistryValueKind.String); + } } private static object lockObject = new object(); } diff --git a/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs b/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs index e642345..e463a90 100644 --- a/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs +++ b/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs @@ -126,6 +126,7 @@ this.Controls.Add(this.btnConnect); this.Name = "ServerConnectForm"; this.Text = "ServerConnectForm"; + this.Load += new System.EventHandler(this.ServerConnectForm_Load); this.ResumeLayout(false); this.PerformLayout(); diff --git a/ClickForensics.Quartz.Manager/ServerConnectForm.cs b/ClickForensics.Quartz.Manager/ServerConnectForm.cs index 3b544b5..93c983f 100644 --- a/ClickForensics.Quartz.Manager/ServerConnectForm.cs +++ b/ClickForensics.Quartz.Manager/ServerConnectForm.cs @@ -19,12 +19,12 @@ namespace ClickForensics.Quartz.Manager private void btnCancel_Click(object sender, EventArgs e) { - Cancelled = true; this.Close(); } private void btnConnect_Click(object sender, EventArgs e) { + Cancelled = false; Server = cboServer.Text; Port = int.Parse(txtPort.Text); Scheduler = txtScheduler.Text; @@ -39,5 +39,11 @@ namespace ClickForensics.Quartz.Manager { } + + private void ServerConnectForm_Load(object sender, EventArgs e) + { + Cancelled = true; + + } } } From 699762ca36fe11d28fefbdc34a3ee60148006d75 Mon Sep 17 00:00:00 2001 From: jvilalta Date: Wed, 16 Feb 2011 20:38:42 -0600 Subject: [PATCH 5/7] update event handlers --- .../ServerConnectForm.Designer.cs | 4 +++- ClickForensics.Quartz.Manager/ServerConnectForm.cs | 9 +++++---- Clickforensics.Quartz.sln | 1 - 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs b/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs index e463a90..68d30e4 100644 --- a/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs +++ b/ClickForensics.Quartz.Manager/ServerConnectForm.Designer.cs @@ -108,7 +108,7 @@ this.cboServer.Name = "cboServer"; this.cboServer.Size = new System.Drawing.Size(100, 21); this.cboServer.TabIndex = 1; - this.cboServer.SelectedIndexChanged += new System.EventHandler(this.cboServer_SelectedIndexChanged); + this.cboServer.SelectedIndexChanged += new System.EventHandler(cboServer_SelectedIndexChanged); // // ServerConnectForm // @@ -132,6 +132,8 @@ } + + #endregion private System.Windows.Forms.Button btnConnect; diff --git a/ClickForensics.Quartz.Manager/ServerConnectForm.cs b/ClickForensics.Quartz.Manager/ServerConnectForm.cs index 93c983f..bb9ab47 100644 --- a/ClickForensics.Quartz.Manager/ServerConnectForm.cs +++ b/ClickForensics.Quartz.Manager/ServerConnectForm.cs @@ -35,15 +35,16 @@ namespace ClickForensics.Quartz.Manager public int Port { get; set; } public string Scheduler { get; set; } public bool Cancelled { get; set; } - private void cboServer_SelectedIndexChanged(object sender, EventArgs e) - { - - } private void ServerConnectForm_Load(object sender, EventArgs e) { Cancelled = true; } + + private void cboServer_SelectedIndexChanged(object sender, System.EventArgs e) + { + //TODO: Implement this + } } } diff --git a/Clickforensics.Quartz.sln b/Clickforensics.Quartz.sln index 507de7e..7e9123e 100644 --- a/Clickforensics.Quartz.sln +++ b/Clickforensics.Quartz.sln @@ -18,7 +18,6 @@ Global {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 {06504FA3-020F-4CA2-8438-8295E23560E9}.Debug|Any CPU.ActiveCfg = Debug From a4ec62043ceca8e17e1a21f12baf22f0b9a036a5 Mon Sep 17 00:00:00 2001 From: jvilalta Date: Thu, 17 Feb 2011 14:12:13 -0600 Subject: [PATCH 6/7] include loading of calendars and refactor some of the registry code. --- ClickForensics.Quartz.Manager/MainForm.cs | 11 ++++ .../RegistryStore.cs | 59 +++++++++++++------ .../ServerConnectForm.cs | 1 + 3 files changed, 54 insertions(+), 17 deletions(-) diff --git a/ClickForensics.Quartz.Manager/MainForm.cs b/ClickForensics.Quartz.Manager/MainForm.cs index 46574b5..12ef5df 100644 --- a/ClickForensics.Quartz.Manager/MainForm.cs +++ b/ClickForensics.Quartz.Manager/MainForm.cs @@ -155,6 +155,7 @@ namespace ClickForensics.Quartz.Manager StripStatusLabel_Job_Groups.Text = DateTime.Now.ToString("yyyy.MM.dd HH:mm.ss"); loadOrphanJobs(schedulerNode); loadStuckTriggers(schedulerNode); + loadCalendars(schedulerNode); } finally { @@ -164,6 +165,16 @@ namespace ClickForensics.Quartz.Manager } + private static void loadCalendars(SchedulerNode schedulerNode) + { + TreeNode calendarsNode = schedulerNode.Nodes.Add("Calendars"); + foreach (var calendarName in schedulerNode.Scheduler.GetScheduler().GetCalendarNames()) + { + //TODO: make this a calendar node instead + calendarsNode.Nodes.Add(calendarName); + } + } + private void loadStuckTriggers(SchedulerNode schedulerNode) { TreeNode jobGroupsNode = schedulerNode.Nodes.Add("Stuck Triggers"); diff --git a/ClickForensics.Quartz.Manager/RegistryStore.cs b/ClickForensics.Quartz.Manager/RegistryStore.cs index 0b8095f..31f6bdd 100644 --- a/ClickForensics.Quartz.Manager/RegistryStore.cs +++ b/ClickForensics.Quartz.Manager/RegistryStore.cs @@ -13,37 +13,62 @@ namespace ClickForensics.Quartz.Manager { List lastConnections = new List(); - RegistryKey key = Registry.CurrentUser.CreateSubKey("QuartzNetManager").CreateSubKey("MRUList"); - if (key != null) + RegistryKey managerKey = Registry.CurrentUser.CreateSubKey("QuartzNetManager"); + RegistryKey key = null; + if (managerKey == null) { - for (int i = 0; i < 5; i++) + return lastConnections; + } + + key = managerKey.CreateSubKey("MRUList"); + + if (key == null) + { + return lastConnections; + } + + for (int i = 0; i < 5; i++) + { + ConnectionInfo info = ConnectionInfo.Parse((key.GetValue(string.Format("connection{0}", i), null) as string)); + if (info != null) { - ConnectionInfo info = ConnectionInfo.Parse((key.GetValue(string.Format("connection{0}", i), null) as string)); - if (info != null) - { - lastConnections.Add(info); - } + lastConnections.Add(info); } } + key.Close(); + managerKey.Close(); + return lastConnections; } public static void AddConnection(ConnectionInfo info) { - RegistryKey key = Registry.CurrentUser.CreateSubKey("QuartzNetManager").CreateSubKey("MRUList"); - if (key != null) + RegistryKey managerKey = Registry.CurrentUser.CreateSubKey("QuartzNetManager"); + RegistryKey key = null; + if (managerKey == null) { - for (int i = 4; i > 0; i--) + return; + } + + key = managerKey.CreateSubKey("MRUList"); + + if (key == null) + { + return; + } + //TODO: check that the key doesn't exist before trying to add. if it exists, move it to the top, but don't add it + + for (int i = 4; i > 0; i--) + { + var previous = key.GetValue(string.Format("connection{0}", i - 1), null); + if (previous != null) { - var previous = key.GetValue(string.Format("connection{0}", i - 1), null); - if (previous != null) - { - key.SetValue(string.Format("connection{0}", i), previous); + key.SetValue(string.Format("connection{0}", i), previous); - } } - key.SetValue("connection0", info, RegistryValueKind.String); } + key.SetValue("connection0", info, RegistryValueKind.String); + } private static object lockObject = new object(); } diff --git a/ClickForensics.Quartz.Manager/ServerConnectForm.cs b/ClickForensics.Quartz.Manager/ServerConnectForm.cs index bb9ab47..03efa3a 100644 --- a/ClickForensics.Quartz.Manager/ServerConnectForm.cs +++ b/ClickForensics.Quartz.Manager/ServerConnectForm.cs @@ -15,6 +15,7 @@ namespace ClickForensics.Quartz.Manager { InitializeComponent(); cboServer.DataSource = RegistryStore.GetLastConnections(); + cboServer.DisplayMember = "ServerName"; } private void btnCancel_Click(object sender, EventArgs e) From 5ce80a15b781037366c9777fc6a33e57bca57bf6 Mon Sep 17 00:00:00 2001 From: jvilalta Date: Tue, 22 Feb 2011 17:21:11 -0600 Subject: [PATCH 7/7] add/delete assemblies from ui. remember last server we connected to --- ClickForensics.Quartz.Manager/AddJobForm.cs | 350 ++++---- .../AssemblyRepository.cs | 55 ++ .../ClickForensics.Quartz.Manager.csproj | 10 + .../DeleteAssembliesForm.Designer.cs | 72 ++ .../DeleteAssembliesForm.cs | 33 + .../DeleteAssembliesForm.resx | 120 +++ .../MainForm.Designer.cs | 828 +++++++++--------- ClickForensics.Quartz.Manager/MainForm.cs | 20 + ClickForensics.Quartz.Manager/MainForm.resx | 268 +++--- .../RegistryStore.cs | 16 +- 10 files changed, 1055 insertions(+), 717 deletions(-) create mode 100644 ClickForensics.Quartz.Manager/AssemblyRepository.cs create mode 100644 ClickForensics.Quartz.Manager/DeleteAssembliesForm.Designer.cs create mode 100644 ClickForensics.Quartz.Manager/DeleteAssembliesForm.cs create mode 100644 ClickForensics.Quartz.Manager/DeleteAssembliesForm.resx diff --git a/ClickForensics.Quartz.Manager/AddJobForm.cs b/ClickForensics.Quartz.Manager/AddJobForm.cs index ff52468..e0a7b54 100644 --- a/ClickForensics.Quartz.Manager/AddJobForm.cs +++ b/ClickForensics.Quartz.Manager/AddJobForm.cs @@ -1,176 +1,174 @@ -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 jobTypes = new SortedList(); - while ((line = reader.ReadLine()) != null) - { - Assembly assembly = Assembly.LoadFile(Environment.CurrentDirectory + "\\" + line); - foreach (Type type in assembly.GetTypes()) - { - if (typeof(IJob).IsAssignableFrom(type) && type.IsClass) - { - 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()); - - } - - 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); - } - } - } -} +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() + { + var assemblies = AssemblyRepository.GetAssemblies(); + SortedList jobTypes = new SortedList(); + foreach (var assemblyName in assemblies) + { + Assembly assembly = Assembly.LoadFile(Environment.CurrentDirectory + "\\" + assemblyName); + foreach (Type type in assembly.GetTypes()) + { + if (typeof(IJob).IsAssignableFrom(type) && type.IsClass) + { + 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()); + + } + + 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); + } + } + } +} diff --git a/ClickForensics.Quartz.Manager/AssemblyRepository.cs b/ClickForensics.Quartz.Manager/AssemblyRepository.cs new file mode 100644 index 0000000..4af88e9 --- /dev/null +++ b/ClickForensics.Quartz.Manager/AssemblyRepository.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace ClickForensics.Quartz.Manager +{ + public class AssemblyRepository + { + public static void AddAssembly(string assembly) + { + var assemblies = GetAssemblies(); + assemblies.Add(assembly); + using (StreamWriter stream = File.CreateText("JobAssemblies.txt")) + { + foreach (var assemblyName in assemblies) + { + stream.WriteLine(assemblyName); + } + } + } + + public static HashSet GetAssemblies() + { + HashSet assemblies = new HashSet(); + using (FileStream stream = File.OpenRead("JobAssemblies.txt")) + { + using (StreamReader reader = new StreamReader(stream)) + { + string line; + while ((line = reader.ReadLine()) != null) + { + assemblies.Add(line); + } + } + } + + return assemblies; + } + + public static void DeleteAssembly(string assembly) + { + var assemblies = GetAssemblies(); + assemblies.Remove(assembly); + using (StreamWriter stream = File.CreateText("JobAssemblies.txt")) + { + foreach (var assemblyName in assemblies) + { + stream.WriteLine(assemblyName); + } + } + } + } +} diff --git a/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj b/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj index ef624bd..ef8eb74 100644 --- a/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj +++ b/ClickForensics.Quartz.Manager/ClickForensics.Quartz.Manager.csproj @@ -87,7 +87,14 @@ AddListenerForm.cs + + + Form + + + DeleteAssembliesForm.cs + UserControl @@ -122,6 +129,9 @@ AddListenerForm.cs + + DeleteAssembliesForm.cs + SimpleTriggerDisplay.cs diff --git a/ClickForensics.Quartz.Manager/DeleteAssembliesForm.Designer.cs b/ClickForensics.Quartz.Manager/DeleteAssembliesForm.Designer.cs new file mode 100644 index 0000000..56e07a0 --- /dev/null +++ b/ClickForensics.Quartz.Manager/DeleteAssembliesForm.Designer.cs @@ -0,0 +1,72 @@ +namespace ClickForensics.Quartz.Manager +{ + partial class DeleteAssembliesForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.lbxAssemblies = new System.Windows.Forms.ListBox(); + this.btnDelete = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // lbxAssemblies + // + this.lbxAssemblies.FormattingEnabled = true; + this.lbxAssemblies.Location = new System.Drawing.Point(42, 25); + this.lbxAssemblies.Name = "lbxAssemblies"; + this.lbxAssemblies.Size = new System.Drawing.Size(162, 212); + this.lbxAssemblies.TabIndex = 0; + // + // btnDelete + // + this.btnDelete.Location = new System.Drawing.Point(80, 243); + this.btnDelete.Name = "btnDelete"; + this.btnDelete.Size = new System.Drawing.Size(75, 23); + this.btnDelete.TabIndex = 1; + this.btnDelete.Text = "Delete"; + this.btnDelete.UseVisualStyleBackColor = true; + this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click); + // + // DeleteAssembliesForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(247, 291); + this.Controls.Add(this.btnDelete); + this.Controls.Add(this.lbxAssemblies); + this.Name = "DeleteAssembliesForm"; + this.Text = "DeleteAssembliesForm"; + this.Load += new System.EventHandler(this.DeleteAssembliesForm_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListBox lbxAssemblies; + private System.Windows.Forms.Button btnDelete; + } +} \ No newline at end of file diff --git a/ClickForensics.Quartz.Manager/DeleteAssembliesForm.cs b/ClickForensics.Quartz.Manager/DeleteAssembliesForm.cs new file mode 100644 index 0000000..6e7d730 --- /dev/null +++ b/ClickForensics.Quartz.Manager/DeleteAssembliesForm.cs @@ -0,0 +1,33 @@ +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 DeleteAssembliesForm : Form + { + public DeleteAssembliesForm() + { + InitializeComponent(); + } + + private void btnDelete_Click(object sender, EventArgs e) + { + if (lbxAssemblies.SelectedItem != null) + { + AssemblyRepository.DeleteAssembly(lbxAssemblies.SelectedItem as string); + lbxAssemblies.DataSource = AssemblyRepository.GetAssemblies().ToList(); + } + } + + private void DeleteAssembliesForm_Load(object sender, EventArgs e) + { + lbxAssemblies.DataSource = AssemblyRepository.GetAssemblies().ToList(); + } + } +} diff --git a/ClickForensics.Quartz.Manager/DeleteAssembliesForm.resx b/ClickForensics.Quartz.Manager/DeleteAssembliesForm.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/ClickForensics.Quartz.Manager/DeleteAssembliesForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/ClickForensics.Quartz.Manager/MainForm.Designer.cs b/ClickForensics.Quartz.Manager/MainForm.Designer.cs index 041d217..530f165 100644 --- a/ClickForensics.Quartz.Manager/MainForm.Designer.cs +++ b/ClickForensics.Quartz.Manager/MainForm.Designer.cs @@ -1,399 +1,429 @@ -namespace ClickForensics.Quartz.Manager -{ - partial class MainForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - 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.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.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.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.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.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(119, 22); - this.connectToolStripMenuItem.Text = "Connect"; - this.connectToolStripMenuItem.Click += new System.EventHandler(this.connectToolStripMenuItem_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); - // - // 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(533, 306); - 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(391, 306); - 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(462, 306); - 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(391, 45); - 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(388, 29); - 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(604, 306); - 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(8, 335); - this.listView_RunningJobs.Name = "listView_RunningJobs"; - this.listView_RunningJobs.Size = new System.Drawing.Size(725, 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; - // - // JobName - // - this.JobName.Text = "Job Name"; - // - // JobDuration - // - this.JobDuration.Text = "Duration"; - // - // 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.btnRefreshJobGroups); - this.Controls.Add(this.listView_RunningJobs); - this.Controls.Add(this.pnlDetails); - this.Controls.Add(this.label3); - this.Controls.Add(this.label1); - this.Controls.Add(this.btnEdit); - this.Controls.Add(this.btnRefreshRunningJobs); - this.Controls.Add(this.btnPause); - this.Controls.Add(this.label2); - this.Controls.Add(this.statusStrip1); - this.Controls.Add(this.mainMenuStrip); - this.Controls.Add(this.btnRunJobNow); - this.Controls.Add(this.jobGroupsTreeView); - this.Controls.Add(this.btnDeleteJob); - 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.Panel pnlDetails; - private System.Windows.Forms.Label label3; - private System.Windows.Forms.Button btnEdit; - 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; - } -} - +namespace ClickForensics.Quartz.Manager +{ + partial class MainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + 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.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.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.jobAssembliesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.addAssemblyMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.deleteAssemblyMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + 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.jobAssembliesToolStripMenuItem}); + 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.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(152, 22); + this.connectToolStripMenuItem.Text = "Connect"; + this.connectToolStripMenuItem.Click += new System.EventHandler(this.connectToolStripMenuItem_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); + // + // 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(533, 306); + 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(391, 306); + 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(462, 306); + 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(391, 45); + 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(388, 29); + 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(604, 306); + 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(8, 335); + this.listView_RunningJobs.Name = "listView_RunningJobs"; + this.listView_RunningJobs.Size = new System.Drawing.Size(725, 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; + // + // JobName + // + this.JobName.Text = "Job Name"; + // + // JobDuration + // + this.JobDuration.Text = "Duration"; + // + // jobAssembliesToolStripMenuItem + // + this.jobAssembliesToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.addAssemblyMenuItem, + this.deleteAssemblyMenuItem}); + this.jobAssembliesToolStripMenuItem.Name = "jobAssembliesToolStripMenuItem"; + this.jobAssembliesToolStripMenuItem.Size = new System.Drawing.Size(99, 20); + this.jobAssembliesToolStripMenuItem.Text = "Job Assemblies"; + // + // addAssemblyMenuItem + // + this.addAssemblyMenuItem.Name = "addAssemblyMenuItem"; + this.addAssemblyMenuItem.Size = new System.Drawing.Size(152, 22); + this.addAssemblyMenuItem.Text = "Add"; + this.addAssemblyMenuItem.Click += new System.EventHandler(this.addAssemblyMenuItem_Click); + // + // deleteAssemblyMenuItem + // + this.deleteAssemblyMenuItem.Name = "deleteAssemblyMenuItem"; + this.deleteAssemblyMenuItem.Size = new System.Drawing.Size(152, 22); + this.deleteAssemblyMenuItem.Text = "Delete"; + this.deleteAssemblyMenuItem.Click += new System.EventHandler(this.deleteAssemblyMenuItem_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.btnRefreshJobGroups); + this.Controls.Add(this.listView_RunningJobs); + this.Controls.Add(this.pnlDetails); + this.Controls.Add(this.label3); + this.Controls.Add(this.label1); + this.Controls.Add(this.btnEdit); + this.Controls.Add(this.btnRefreshRunningJobs); + this.Controls.Add(this.btnPause); + this.Controls.Add(this.label2); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.mainMenuStrip); + this.Controls.Add(this.btnRunJobNow); + this.Controls.Add(this.jobGroupsTreeView); + this.Controls.Add(this.btnDeleteJob); + 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.Panel pnlDetails; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button btnEdit; + 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.ToolStripMenuItem jobAssembliesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem addAssemblyMenuItem; + private System.Windows.Forms.ToolStripMenuItem deleteAssemblyMenuItem; + } +} + diff --git a/ClickForensics.Quartz.Manager/MainForm.cs b/ClickForensics.Quartz.Manager/MainForm.cs index 12ef5df..cb1b996 100644 --- a/ClickForensics.Quartz.Manager/MainForm.cs +++ b/ClickForensics.Quartz.Manager/MainForm.cs @@ -11,6 +11,7 @@ using Quartz.Collection; using System.Net.Sockets; //using ClickForensics.Quartz.Jobs; using System.IO; +using System.Reflection; namespace ClickForensics.Quartz.Manager { @@ -422,5 +423,24 @@ namespace ClickForensics.Quartz.Manager { updateRunningJobs(); } + + private void addAssemblyMenuItem_Click(object sender, EventArgs e) + { + FileDialog dialog = new OpenFileDialog(); + dialog.InitialDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + dialog.Filter = "Assemblies (*.dll)|*.dll"; + dialog.ShowDialog(); + string fileName = Path.GetFileName(dialog.FileName); + AssemblyRepository.AddAssembly(fileName); + } + + private void deleteAssemblyMenuItem_Click(object sender, EventArgs e) + { + using (DeleteAssembliesForm form = new DeleteAssembliesForm()) + { + form.ShowDialog(); + form.Close(); + } + } } } diff --git a/ClickForensics.Quartz.Manager/MainForm.resx b/ClickForensics.Quartz.Manager/MainForm.resx index 8d62819..b1e15c2 100644 --- a/ClickForensics.Quartz.Manager/MainForm.resx +++ b/ClickForensics.Quartz.Manager/MainForm.resx @@ -1,135 +1,135 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - 143, 17 - - - 259, 17 - - - 374, 5 - - - 25 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 143, 17 + + + 259, 17 + + + 374, 5 + + + 25 + \ No newline at end of file diff --git a/ClickForensics.Quartz.Manager/RegistryStore.cs b/ClickForensics.Quartz.Manager/RegistryStore.cs index 31f6bdd..a2087a8 100644 --- a/ClickForensics.Quartz.Manager/RegistryStore.cs +++ b/ClickForensics.Quartz.Manager/RegistryStore.cs @@ -58,15 +58,15 @@ namespace ClickForensics.Quartz.Manager } //TODO: check that the key doesn't exist before trying to add. if it exists, move it to the top, but don't add it - for (int i = 4; i > 0; i--) - { - var previous = key.GetValue(string.Format("connection{0}", i - 1), null); - if (previous != null) - { - key.SetValue(string.Format("connection{0}", i), previous); + //for (int i = 4; i > 0; i--) + //{ + // var previous = key.GetValue(string.Format("connection{0}", i - 1), null); + // if (previous != null) + // { + // key.SetValue(string.Format("connection{0}", i), previous); - } - } + // } + //} key.SetValue("connection0", info, RegistryValueKind.String); }