git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube...
authorVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 14 Nov 2017 16:06:20 +0000 (16:06 +0000)
committerVásáry Dániel <daniel.vasary@userrendszerhaz.hu>
Tue, 14 Nov 2017 16:06:20 +0000 (16:06 +0000)
23 files changed:
client/Maestro/MaestroForm.Designer.cs
client/Maestro/MaestroForm.Source.cs
client/Maestro/Properties/AssemblyInfo.cs
client/OctopusClient/OctopusAPI.cs
client/OctopusClient/OctopusIDSelector.Designer.cs
client/OctopusClient/OctopusIDSelector.cs
client/PlanAIRClient/TrafficIDSelector.Designer.cs
client/PlanAIRClient/TrafficIDSelector.cs
client/PlanAIRClient/TrafficIDSelector.resx
server/-configuration/log4j2.xml
server/-product/log4j2.xml
server/-product/pom.xml
server/user.jobengine.executors/config/scheduledjobs.json
server/user.jobengine.executors/jobtemplates/sync-octopus.xml
server/user.jobengine.executors/src/user/jobengine/server/steps/SyncOCTOPUSDataStep.java
server/user.jobengine.osgi.commons/src/user/commons/octopus/OctopusDataMiner.java
server/user.jobengine.osgi.server/pages/joblist.zul
server/user.jobengine.osgi.server/pages/jobselector.zul
server/user.jobengine.osgi.server/pages/retrieveselector.zul
server/user.jobengine.osgi.server/src/user/jobengine/server/JobEngine.java
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/ScheduledJob.java
server/user.jobengine.osgi.server/src/user/jobengine/server/scheduler/SchedulerService.java
server/user.jobengine.osgi.server/src/user/jobengine/zk/model/JobSelectorModel.java

index f921ac34ecb5402f2151ff6c32cf495a5aaaa464..a52eb53b6c4a11e8bb4fece757af6c08724da5df 100644 (file)
@@ -26,21 +26,21 @@ namespace Maestro {
         /// </summary>\r
         private void InitializeComponent() {\r
             this.components = new System.ComponentModel.Container();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle29 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle30 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle31 = new System.Windows.Forms.DataGridViewCellStyle();\r
             System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MaestroForm));\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle21 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle22 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle23 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle24 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle26 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle27 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle28 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle25 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle32 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle35 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle36 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle37 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle33 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle34 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle38 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle40 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle41 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle42 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle39 = new System.Windows.Forms.DataGridViewCellStyle();\r
             this.groupSource = new System.Windows.Forms.GroupBox();\r
             this.dgSource = new System.Windows.Forms.DataGridView();\r
             this.bindingSource = new System.Windows.Forms.BindingSource(this.components);\r
@@ -54,8 +54,8 @@ namespace Maestro {
             this.ctxmActions = new System.Windows.Forms.ContextMenuStrip(this.components);\r
             this.ctxiDefineSegments = new System.Windows.Forms.ToolStripMenuItem();\r
             this.ctxiModifyArchiveMetadata = new System.Windows.Forms.ToolStripMenuItem();\r
-            this.splitContainer1 = new System.Windows.Forms.SplitContainer();\r
-            this.splitContainer3 = new System.Windows.Forms.SplitContainer();\r
+            this.scOperations = new System.Windows.Forms.SplitContainer();\r
+            this.scRightOperations = new System.Windows.Forms.SplitContainer();\r
             this.groupMetadata = new System.Windows.Forms.GroupBox();\r
             this.tabMetadata = new System.Windows.Forms.TabControl();\r
             this.tpOctopus = new System.Windows.Forms.TabPage();\r
@@ -69,9 +69,9 @@ namespace Maestro {
             this.textSelectedMetadata = new System.Windows.Forms.TextBox();\r
             this.groupTarget = new System.Windows.Forms.GroupBox();\r
             this.panelActions = new System.Windows.Forms.TableLayoutPanel();\r
-            this.panel1 = new System.Windows.Forms.Panel();\r
+            this.pExecute = new System.Windows.Forms.Panel();\r
             this.btnExecute = new System.Windows.Forms.Button();\r
-            this.splitContainer2 = new System.Windows.Forms.SplitContainer();\r
+            this.scMain = new System.Windows.Forms.SplitContainer();\r
             this.groupActions = new System.Windows.Forms.GroupBox();\r
             this.tabSystem = new System.Windows.Forms.TabControl();\r
             this.tabPage1 = new System.Windows.Forms.TabPage();\r
@@ -99,25 +99,25 @@ namespace Maestro {
             ((System.ComponentModel.ISupportInitialize)(this.picClearFilter)).BeginInit();\r
             this.tableLayoutPanel2.SuspendLayout();\r
             this.ctxmActions.SuspendLayout();\r
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();\r
-            this.splitContainer1.Panel1.SuspendLayout();\r
-            this.splitContainer1.Panel2.SuspendLayout();\r
-            this.splitContainer1.SuspendLayout();\r
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit();\r
-            this.splitContainer3.Panel1.SuspendLayout();\r
-            this.splitContainer3.Panel2.SuspendLayout();\r
-            this.splitContainer3.SuspendLayout();\r
+            ((System.ComponentModel.ISupportInitialize)(this.scOperations)).BeginInit();\r
+            this.scOperations.Panel1.SuspendLayout();\r
+            this.scOperations.Panel2.SuspendLayout();\r
+            this.scOperations.SuspendLayout();\r
+            ((System.ComponentModel.ISupportInitialize)(this.scRightOperations)).BeginInit();\r
+            this.scRightOperations.Panel1.SuspendLayout();\r
+            this.scRightOperations.Panel2.SuspendLayout();\r
+            this.scRightOperations.SuspendLayout();\r
             this.groupMetadata.SuspendLayout();\r
             this.tabMetadata.SuspendLayout();\r
             this.tpOctopus.SuspendLayout();\r
             this.tpTraffic.SuspendLayout();\r
             this.tableLayoutPanel1.SuspendLayout();\r
             this.groupTarget.SuspendLayout();\r
-            this.panel1.SuspendLayout();\r
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit();\r
-            this.splitContainer2.Panel1.SuspendLayout();\r
-            this.splitContainer2.Panel2.SuspendLayout();\r
-            this.splitContainer2.SuspendLayout();\r
+            this.pExecute.SuspendLayout();\r
+            ((System.ComponentModel.ISupportInitialize)(this.scMain)).BeginInit();\r
+            this.scMain.Panel1.SuspendLayout();\r
+            this.scMain.Panel2.SuspendLayout();\r
+            this.scMain.SuspendLayout();\r
             this.groupActions.SuspendLayout();\r
             this.tabSystem.SuspendLayout();\r
             this.tabPage1.SuspendLayout();\r
@@ -139,7 +139,7 @@ namespace Maestro {
             this.groupSource.Location = new System.Drawing.Point(0, 0);\r
             this.groupSource.Name = "groupSource";\r
             this.groupSource.Padding = new System.Windows.Forms.Padding(10);\r
-            this.groupSource.Size = new System.Drawing.Size(367, 471);\r
+            this.groupSource.Size = new System.Drawing.Size(350, 471);\r
             this.groupSource.TabIndex = 0;\r
             this.groupSource.TabStop = false;\r
             this.groupSource.Text = "Source file";\r
@@ -158,35 +158,35 @@ namespace Maestro {
             this.dgSource.BackgroundColor = System.Drawing.Color.White;\r
             this.dgSource.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
             this.dgSource.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;\r
-            dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle15.BackColor = System.Drawing.SystemColors.Control;\r
-            dataGridViewCellStyle15.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            dataGridViewCellStyle15.ForeColor = System.Drawing.SystemColors.WindowText;\r
-            dataGridViewCellStyle15.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
-            dataGridViewCellStyle15.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
-            dataGridViewCellStyle15.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
-            this.dgSource.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle15;\r
+            dataGridViewCellStyle29.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle29.BackColor = System.Drawing.SystemColors.Control;\r
+            dataGridViewCellStyle29.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            dataGridViewCellStyle29.ForeColor = System.Drawing.SystemColors.WindowText;\r
+            dataGridViewCellStyle29.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+            dataGridViewCellStyle29.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+            dataGridViewCellStyle29.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
+            this.dgSource.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle29;\r
             this.dgSource.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
             this.dgSource.DataSource = this.bindingSource;\r
-            dataGridViewCellStyle16.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle16.BackColor = System.Drawing.SystemColors.Window;\r
-            dataGridViewCellStyle16.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            dataGridViewCellStyle16.ForeColor = System.Drawing.SystemColors.ControlText;\r
-            dataGridViewCellStyle16.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
-            dataGridViewCellStyle16.SelectionForeColor = System.Drawing.Color.Black;\r
-            dataGridViewCellStyle16.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
-            this.dgSource.DefaultCellStyle = dataGridViewCellStyle16;\r
+            dataGridViewCellStyle30.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle30.BackColor = System.Drawing.SystemColors.Window;\r
+            dataGridViewCellStyle30.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            dataGridViewCellStyle30.ForeColor = System.Drawing.SystemColors.ControlText;\r
+            dataGridViewCellStyle30.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+            dataGridViewCellStyle30.SelectionForeColor = System.Drawing.Color.Black;\r
+            dataGridViewCellStyle30.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+            this.dgSource.DefaultCellStyle = dataGridViewCellStyle30;\r
             this.dgSource.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.dgSource.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
             this.dgSource.EnableHeadersVisualStyles = false;\r
             this.dgSource.Location = new System.Drawing.Point(10, 47);\r
             this.dgSource.Name = "dgSource";\r
             this.dgSource.RowHeadersVisible = false;\r
-            dataGridViewCellStyle17.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            this.dgSource.RowsDefaultCellStyle = dataGridViewCellStyle17;\r
+            dataGridViewCellStyle31.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.dgSource.RowsDefaultCellStyle = dataGridViewCellStyle31;\r
             this.dgSource.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.dgSource.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
-            this.dgSource.Size = new System.Drawing.Size(347, 352);\r
+            this.dgSource.Size = new System.Drawing.Size(330, 352);\r
             this.dgSource.TabIndex = 0;\r
             this.dgSource.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.sourceGridView_CellContentClick);\r
             this.dgSource.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridSource_CellEnter);\r
@@ -212,7 +212,7 @@ namespace Maestro {
             this.pSourceFilter.RowCount = 1;\r
             this.pSourceFilter.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
             this.pSourceFilter.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\r
-            this.pSourceFilter.Size = new System.Drawing.Size(347, 24);\r
+            this.pSourceFilter.Size = new System.Drawing.Size(330, 24);\r
             this.pSourceFilter.TabIndex = 17;\r
             // \r
             // txtSourceFilter\r
@@ -221,7 +221,7 @@ namespace Maestro {
             this.txtSourceFilter.Location = new System.Drawing.Point(0, 0);\r
             this.txtSourceFilter.Margin = new System.Windows.Forms.Padding(0);\r
             this.txtSourceFilter.Name = "txtSourceFilter";\r
-            this.txtSourceFilter.Size = new System.Drawing.Size(327, 20);\r
+            this.txtSourceFilter.Size = new System.Drawing.Size(310, 20);\r
             this.txtSourceFilter.TabIndex = 16;\r
             this.txtSourceFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtSourceFilter_KeyDown);\r
             // \r
@@ -231,7 +231,7 @@ namespace Maestro {
             this.picClearFilter.Cursor = System.Windows.Forms.Cursors.Hand;\r
             this.picClearFilter.Image = ((System.Drawing.Image)(resources.GetObject("picClearFilter.Image")));\r
             this.picClearFilter.ImageLocation = "";\r
-            this.picClearFilter.Location = new System.Drawing.Point(327, 0);\r
+            this.picClearFilter.Location = new System.Drawing.Point(310, 0);\r
             this.picClearFilter.Margin = new System.Windows.Forms.Padding(0);\r
             this.picClearFilter.Name = "picClearFilter";\r
             this.picClearFilter.Size = new System.Drawing.Size(20, 20);\r
@@ -255,7 +255,7 @@ namespace Maestro {
             this.tableLayoutPanel2.RowCount = 2;\r
             this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
             this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
-            this.tableLayoutPanel2.Size = new System.Drawing.Size(347, 62);\r
+            this.tableLayoutPanel2.Size = new System.Drawing.Size(330, 62);\r
             this.tableLayoutPanel2.TabIndex = 12;\r
             // \r
             // textSelectedSource\r
@@ -267,7 +267,7 @@ namespace Maestro {
             this.textSelectedSource.Location = new System.Drawing.Point(3, 28);\r
             this.textSelectedSource.Name = "textSelectedSource";\r
             this.textSelectedSource.ReadOnly = true;\r
-            this.textSelectedSource.Size = new System.Drawing.Size(305, 26);\r
+            this.textSelectedSource.Size = new System.Drawing.Size(288, 26);\r
             this.textSelectedSource.TabIndex = 10;\r
             // \r
             // label1\r
@@ -279,7 +279,7 @@ namespace Maestro {
             this.label1.Location = new System.Drawing.Point(3, 0);\r
             this.label1.Name = "label1";\r
             this.label1.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5);\r
-            this.label1.Size = new System.Drawing.Size(341, 25);\r
+            this.label1.Size = new System.Drawing.Size(324, 25);\r
             this.label1.TabIndex = 13;\r
             this.label1.Text = "Selected source";\r
             // \r
@@ -293,7 +293,7 @@ namespace Maestro {
             this.btnLookupBySource.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
             this.btnLookupBySource.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F);\r
             this.btnLookupBySource.Image = global::Maestro.Properties.Resources.ic_search_black_24dp_1x;\r
-            this.btnLookupBySource.Location = new System.Drawing.Point(314, 28);\r
+            this.btnLookupBySource.Location = new System.Drawing.Point(297, 28);\r
             this.btnLookupBySource.Name = "btnLookupBySource";\r
             this.btnLookupBySource.Size = new System.Drawing.Size(30, 26);\r
             this.btnLookupBySource.TabIndex = 14;\r
@@ -323,39 +323,42 @@ namespace Maestro {
             this.ctxiModifyArchiveMetadata.Text = "Modify archive metadata";\r
             this.ctxiModifyArchiveMetadata.Click += new System.EventHandler(this.OnArchiveMetadataClick);\r
             // \r
-            // splitContainer1\r
+            // scOperations\r
             // \r
-            this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.splitContainer1.Location = new System.Drawing.Point(0, 0);\r
-            this.splitContainer1.Name = "splitContainer1";\r
+            this.scOperations.BackColor = System.Drawing.SystemColors.Control;\r
+            this.scOperations.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.scOperations.Location = new System.Drawing.Point(0, 0);\r
+            this.scOperations.Name = "scOperations";\r
             // \r
-            // splitContainer1.Panel1\r
+            // scOperations.Panel1\r
             // \r
-            this.splitContainer1.Panel1.Controls.Add(this.groupSource);\r
+            this.scOperations.Panel1.Controls.Add(this.groupSource);\r
+            this.scOperations.Panel1MinSize = 350;\r
             // \r
-            // splitContainer1.Panel2\r
+            // scOperations.Panel2\r
             // \r
-            this.splitContainer1.Panel2.Controls.Add(this.splitContainer3);\r
-            this.splitContainer1.Size = new System.Drawing.Size(1022, 471);\r
-            this.splitContainer1.SplitterDistance = 367;\r
-            this.splitContainer1.TabIndex = 1;\r
+            this.scOperations.Panel2.Controls.Add(this.scRightOperations);\r
+            this.scOperations.Size = new System.Drawing.Size(1022, 471);\r
+            this.scOperations.SplitterDistance = 350;\r
+            this.scOperations.TabIndex = 1;\r
             // \r
-            // splitContainer3\r
+            // scRightOperations\r
             // \r
-            this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.splitContainer3.Location = new System.Drawing.Point(0, 0);\r
-            this.splitContainer3.Name = "splitContainer3";\r
+            this.scRightOperations.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.scRightOperations.Location = new System.Drawing.Point(0, 0);\r
+            this.scRightOperations.Name = "scRightOperations";\r
             // \r
-            // splitContainer3.Panel1\r
+            // scRightOperations.Panel1\r
             // \r
-            this.splitContainer3.Panel1.Controls.Add(this.groupMetadata);\r
+            this.scRightOperations.Panel1.Controls.Add(this.groupMetadata);\r
+            this.scRightOperations.Panel1MinSize = 350;\r
             // \r
-            // splitContainer3.Panel2\r
+            // scRightOperations.Panel2\r
             // \r
-            this.splitContainer3.Panel2.Controls.Add(this.groupTarget);\r
-            this.splitContainer3.Size = new System.Drawing.Size(651, 471);\r
-            this.splitContainer3.SplitterDistance = 306;\r
-            this.splitContainer3.TabIndex = 2;\r
+            this.scRightOperations.Panel2.Controls.Add(this.groupTarget);\r
+            this.scRightOperations.Size = new System.Drawing.Size(668, 471);\r
+            this.scRightOperations.SplitterDistance = 350;\r
+            this.scRightOperations.TabIndex = 2;\r
             // \r
             // groupMetadata\r
             // \r
@@ -366,7 +369,7 @@ namespace Maestro {
             this.groupMetadata.Location = new System.Drawing.Point(0, 0);\r
             this.groupMetadata.Name = "groupMetadata";\r
             this.groupMetadata.Padding = new System.Windows.Forms.Padding(10);\r
-            this.groupMetadata.Size = new System.Drawing.Size(306, 471);\r
+            this.groupMetadata.Size = new System.Drawing.Size(350, 471);\r
             this.groupMetadata.TabIndex = 1;\r
             this.groupMetadata.TabStop = false;\r
             this.groupMetadata.Text = "Metadata";\r
@@ -382,7 +385,7 @@ namespace Maestro {
             this.tabMetadata.Location = new System.Drawing.Point(10, 23);\r
             this.tabMetadata.Name = "tabMetadata";\r
             this.tabMetadata.SelectedIndex = 0;\r
-            this.tabMetadata.Size = new System.Drawing.Size(286, 376);\r
+            this.tabMetadata.Size = new System.Drawing.Size(330, 376);\r
             this.tabMetadata.TabIndex = 1;\r
             // \r
             // tpOctopus\r
@@ -391,7 +394,7 @@ namespace Maestro {
             this.tpOctopus.Location = new System.Drawing.Point(4, 24);\r
             this.tpOctopus.Name = "tpOctopus";\r
             this.tpOctopus.Padding = new System.Windows.Forms.Padding(3);\r
-            this.tpOctopus.Size = new System.Drawing.Size(278, 348);\r
+            this.tpOctopus.Size = new System.Drawing.Size(322, 348);\r
             this.tpOctopus.TabIndex = 0;\r
             this.tpOctopus.Text = "Octopus";\r
             this.tpOctopus.UseVisualStyleBackColor = true;\r
@@ -403,11 +406,10 @@ namespace Maestro {
             this.octopusIDSelector.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.octopusIDSelector.IDChangedEvent = null;\r
             this.octopusIDSelector.Location = new System.Drawing.Point(3, 3);\r
-            this.octopusIDSelector.Margin = new System.Windows.Forms.Padding(12, 12, 12, 12);\r
+            this.octopusIDSelector.Margin = new System.Windows.Forms.Padding(0);\r
             this.octopusIDSelector.MinimumSize = new System.Drawing.Size(200, 300);\r
             this.octopusIDSelector.Name = "octopusIDSelector";\r
-            this.octopusIDSelector.Padding = new System.Windows.Forms.Padding(6);\r
-            this.octopusIDSelector.Size = new System.Drawing.Size(272, 342);\r
+            this.octopusIDSelector.Size = new System.Drawing.Size(316, 342);\r
             this.octopusIDSelector.TabIndex = 1;\r
             // \r
             // tpTraffic\r
@@ -450,7 +452,7 @@ namespace Maestro {
             this.tableLayoutPanel1.RowCount = 2;\r
             this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
             this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
-            this.tableLayoutPanel1.Size = new System.Drawing.Size(286, 62);\r
+            this.tableLayoutPanel1.Size = new System.Drawing.Size(330, 62);\r
             this.tableLayoutPanel1.TabIndex = 4;\r
             // \r
             // btnLookupMetadata\r
@@ -463,7 +465,7 @@ namespace Maestro {
             this.btnLookupMetadata.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
             this.btnLookupMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F);\r
             this.btnLookupMetadata.Image = global::Maestro.Properties.Resources.ic_search_black_24dp_1x;\r
-            this.btnLookupMetadata.Location = new System.Drawing.Point(253, 29);\r
+            this.btnLookupMetadata.Location = new System.Drawing.Point(297, 29);\r
             this.btnLookupMetadata.Name = "btnLookupMetadata";\r
             this.btnLookupMetadata.Size = new System.Drawing.Size(30, 26);\r
             this.btnLookupMetadata.TabIndex = 16;\r
@@ -479,7 +481,7 @@ namespace Maestro {
             this.mbActions.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\r
             this.mbActions.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.mbActions.Image = global::Maestro.Properties.Resources.ic_playlist_add_check_black_24dp_1x;\r
-            this.mbActions.Location = new System.Drawing.Point(253, 0);\r
+            this.mbActions.Location = new System.Drawing.Point(297, 0);\r
             this.mbActions.Margin = new System.Windows.Forms.Padding(3, 0, 3, 0);\r
             this.mbActions.Menu = this.ctxmActions;\r
             this.mbActions.Name = "mbActions";\r
@@ -495,7 +497,7 @@ namespace Maestro {
             this.labelSelectedMetadata.Location = new System.Drawing.Point(3, 0);\r
             this.labelSelectedMetadata.Name = "labelSelectedMetadata";\r
             this.labelSelectedMetadata.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5);\r
-            this.labelSelectedMetadata.Size = new System.Drawing.Size(244, 26);\r
+            this.labelSelectedMetadata.Size = new System.Drawing.Size(288, 26);\r
             this.labelSelectedMetadata.TabIndex = 13;\r
             this.labelSelectedMetadata.Text = "Selected metadata";\r
             // \r
@@ -507,7 +509,7 @@ namespace Maestro {
             this.textSelectedMetadata.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.textSelectedMetadata.Location = new System.Drawing.Point(3, 29);\r
             this.textSelectedMetadata.Name = "textSelectedMetadata";\r
-            this.textSelectedMetadata.Size = new System.Drawing.Size(244, 26);\r
+            this.textSelectedMetadata.Size = new System.Drawing.Size(288, 26);\r
             this.textSelectedMetadata.TabIndex = 12;\r
             this.textSelectedMetadata.TextChanged += new System.EventHandler(this.OnMetadataIDChanged);\r
             // \r
@@ -515,12 +517,12 @@ namespace Maestro {
             // \r
             this.groupTarget.BackColor = System.Drawing.Color.Transparent;\r
             this.groupTarget.Controls.Add(this.panelActions);\r
-            this.groupTarget.Controls.Add(this.panel1);\r
+            this.groupTarget.Controls.Add(this.pExecute);\r
             this.groupTarget.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.groupTarget.Location = new System.Drawing.Point(0, 0);\r
             this.groupTarget.Name = "groupTarget";\r
             this.groupTarget.Padding = new System.Windows.Forms.Padding(10);\r
-            this.groupTarget.Size = new System.Drawing.Size(341, 471);\r
+            this.groupTarget.Size = new System.Drawing.Size(314, 471);\r
             this.groupTarget.TabIndex = 0;\r
             this.groupTarget.TabStop = false;\r
             this.groupTarget.Text = "Target action";\r
@@ -540,27 +542,27 @@ namespace Maestro {
             this.panelActions.Padding = new System.Windows.Forms.Padding(0, 0, 5, 0);\r
             this.panelActions.RowCount = 1;\r
             this.panelActions.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
-            this.panelActions.Size = new System.Drawing.Size(321, 376);\r
+            this.panelActions.Size = new System.Drawing.Size(294, 376);\r
             this.panelActions.TabIndex = 4;\r
             this.panelActions.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnTargetPanelsMouseClick);\r
             // \r
-            // panel1\r
+            // pExecute\r
             // \r
-            this.panel1.BackColor = System.Drawing.Color.Transparent;\r
-            this.panel1.Controls.Add(this.btnExecute);\r
-            this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;\r
-            this.panel1.Location = new System.Drawing.Point(10, 399);\r
-            this.panel1.Name = "panel1";\r
-            this.panel1.Size = new System.Drawing.Size(321, 62);\r
-            this.panel1.TabIndex = 5;\r
-            this.panel1.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnTargetPanelsMouseClick);\r
+            this.pExecute.BackColor = System.Drawing.Color.Transparent;\r
+            this.pExecute.Controls.Add(this.btnExecute);\r
+            this.pExecute.Dock = System.Windows.Forms.DockStyle.Bottom;\r
+            this.pExecute.Location = new System.Drawing.Point(10, 399);\r
+            this.pExecute.Name = "pExecute";\r
+            this.pExecute.Size = new System.Drawing.Size(294, 62);\r
+            this.pExecute.TabIndex = 5;\r
+            this.pExecute.MouseClick += new System.Windows.Forms.MouseEventHandler(this.OnTargetPanelsMouseClick);\r
             // \r
             // btnExecute\r
             // \r
             this.btnExecute.BackColor = System.Drawing.SystemColors.ActiveCaption;\r
             this.btnExecute.Dock = System.Windows.Forms.DockStyle.Right;\r
             this.btnExecute.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            this.btnExecute.Location = new System.Drawing.Point(189, 0);\r
+            this.btnExecute.Location = new System.Drawing.Point(162, 0);\r
             this.btnExecute.Margin = new System.Windows.Forms.Padding(3, 20, 3, 3);\r
             this.btnExecute.Name = "btnExecute";\r
             this.btnExecute.Size = new System.Drawing.Size(132, 62);\r
@@ -569,23 +571,24 @@ namespace Maestro {
             this.btnExecute.UseVisualStyleBackColor = false;\r
             this.btnExecute.Click += new System.EventHandler(this.OnExecuteClick);\r
             // \r
-            // splitContainer2\r
+            // scMain\r
             // \r
-            this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.splitContainer2.Location = new System.Drawing.Point(0, 0);\r
-            this.splitContainer2.Name = "splitContainer2";\r
-            this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal;\r
+            this.scMain.BackColor = System.Drawing.SystemColors.Control;\r
+            this.scMain.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.scMain.Location = new System.Drawing.Point(0, 0);\r
+            this.scMain.Name = "scMain";\r
+            this.scMain.Orientation = System.Windows.Forms.Orientation.Horizontal;\r
             // \r
-            // splitContainer2.Panel1\r
+            // scMain.Panel1\r
             // \r
-            this.splitContainer2.Panel1.Controls.Add(this.splitContainer1);\r
+            this.scMain.Panel1.Controls.Add(this.scOperations);\r
             // \r
-            // splitContainer2.Panel2\r
+            // scMain.Panel2\r
             // \r
-            this.splitContainer2.Panel2.Controls.Add(this.groupActions);\r
-            this.splitContainer2.Size = new System.Drawing.Size(1022, 632);\r
-            this.splitContainer2.SplitterDistance = 471;\r
-            this.splitContainer2.TabIndex = 2;\r
+            this.scMain.Panel2.Controls.Add(this.groupActions);\r
+            this.scMain.Size = new System.Drawing.Size(1022, 632);\r
+            this.scMain.SplitterDistance = 471;\r
+            this.scMain.TabIndex = 2;\r
             // \r
             // groupActions\r
             // \r
@@ -634,14 +637,14 @@ namespace Maestro {
             this.dgJobs.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;\r
             this.dgJobs.BackgroundColor = System.Drawing.Color.White;\r
             this.dgJobs.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
-            dataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle18.BackColor = System.Drawing.SystemColors.Control;\r
-            dataGridViewCellStyle18.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            dataGridViewCellStyle18.ForeColor = System.Drawing.SystemColors.WindowText;\r
-            dataGridViewCellStyle18.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
-            dataGridViewCellStyle18.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
-            dataGridViewCellStyle18.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
-            this.dgJobs.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle18;\r
+            dataGridViewCellStyle32.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle32.BackColor = System.Drawing.SystemColors.Control;\r
+            dataGridViewCellStyle32.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            dataGridViewCellStyle32.ForeColor = System.Drawing.SystemColors.WindowText;\r
+            dataGridViewCellStyle32.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+            dataGridViewCellStyle32.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+            dataGridViewCellStyle32.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
+            this.dgJobs.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle32;\r
             this.dgJobs.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
             this.dgJobs.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\r
             this.columnLabel,\r
@@ -654,32 +657,32 @@ namespace Maestro {
             this.columnOutput,\r
             this.columnKillDate});\r
             this.dgJobs.DataSource = this.bindingSourceJobs;\r
-            dataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle21.BackColor = System.Drawing.SystemColors.Window;\r
-            dataGridViewCellStyle21.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            dataGridViewCellStyle21.ForeColor = System.Drawing.SystemColors.ControlText;\r
-            dataGridViewCellStyle21.NullValue = null;\r
-            dataGridViewCellStyle21.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
-            dataGridViewCellStyle21.SelectionForeColor = System.Drawing.Color.Black;\r
-            dataGridViewCellStyle21.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
-            this.dgJobs.DefaultCellStyle = dataGridViewCellStyle21;\r
+            dataGridViewCellStyle35.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle35.BackColor = System.Drawing.SystemColors.Window;\r
+            dataGridViewCellStyle35.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            dataGridViewCellStyle35.ForeColor = System.Drawing.SystemColors.ControlText;\r
+            dataGridViewCellStyle35.NullValue = null;\r
+            dataGridViewCellStyle35.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+            dataGridViewCellStyle35.SelectionForeColor = System.Drawing.Color.Black;\r
+            dataGridViewCellStyle35.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+            this.dgJobs.DefaultCellStyle = dataGridViewCellStyle35;\r
             this.dgJobs.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.dgJobs.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
             this.dgJobs.EnableHeadersVisualStyles = false;\r
             this.dgJobs.GridColor = System.Drawing.Color.White;\r
             this.dgJobs.Location = new System.Drawing.Point(3, 3);\r
             this.dgJobs.Name = "dgJobs";\r
-            dataGridViewCellStyle22.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle22.BackColor = System.Drawing.SystemColors.Control;\r
-            dataGridViewCellStyle22.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            dataGridViewCellStyle22.ForeColor = System.Drawing.SystemColors.WindowText;\r
-            dataGridViewCellStyle22.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
-            dataGridViewCellStyle22.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
-            dataGridViewCellStyle22.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
-            this.dgJobs.RowHeadersDefaultCellStyle = dataGridViewCellStyle22;\r
+            dataGridViewCellStyle36.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle36.BackColor = System.Drawing.SystemColors.Control;\r
+            dataGridViewCellStyle36.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            dataGridViewCellStyle36.ForeColor = System.Drawing.SystemColors.WindowText;\r
+            dataGridViewCellStyle36.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+            dataGridViewCellStyle36.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+            dataGridViewCellStyle36.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
+            this.dgJobs.RowHeadersDefaultCellStyle = dataGridViewCellStyle36;\r
             this.dgJobs.RowHeadersVisible = false;\r
-            dataGridViewCellStyle23.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            this.dgJobs.RowsDefaultCellStyle = dataGridViewCellStyle23;\r
+            dataGridViewCellStyle37.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.dgJobs.RowsDefaultCellStyle = dataGridViewCellStyle37;\r
             this.dgJobs.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.dgJobs.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
             this.dgJobs.Size = new System.Drawing.Size(988, 92);\r
@@ -699,8 +702,8 @@ namespace Maestro {
             // \r
             this.columnID.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;\r
             this.columnID.DataPropertyName = "ID";\r
-            dataGridViewCellStyle19.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            this.columnID.DefaultCellStyle = dataGridViewCellStyle19;\r
+            dataGridViewCellStyle33.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.columnID.DefaultCellStyle = dataGridViewCellStyle33;\r
             this.columnID.HeaderText = "ID";\r
             this.columnID.Name = "columnID";\r
             this.columnID.Width = 44;\r
@@ -717,8 +720,8 @@ namespace Maestro {
             // \r
             this.columnStatus.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.DisplayedCells;\r
             this.columnStatus.DataPropertyName = "Status";\r
-            dataGridViewCellStyle20.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            this.columnStatus.DefaultCellStyle = dataGridViewCellStyle20;\r
+            dataGridViewCellStyle34.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.columnStatus.DefaultCellStyle = dataGridViewCellStyle34;\r
             this.columnStatus.HeaderText = "Status";\r
             this.columnStatus.Name = "columnStatus";\r
             this.columnStatus.Width = 66;\r
@@ -782,27 +785,27 @@ namespace Maestro {
             this.dgMessages.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;\r
             this.dgMessages.BackgroundColor = System.Drawing.Color.White;\r
             this.dgMessages.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
-            dataGridViewCellStyle24.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle24.BackColor = System.Drawing.SystemColors.Control;\r
-            dataGridViewCellStyle24.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            dataGridViewCellStyle24.ForeColor = System.Drawing.SystemColors.WindowText;\r
-            dataGridViewCellStyle24.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
-            dataGridViewCellStyle24.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
-            dataGridViewCellStyle24.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
-            this.dgMessages.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle24;\r
+            dataGridViewCellStyle38.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle38.BackColor = System.Drawing.SystemColors.Control;\r
+            dataGridViewCellStyle38.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            dataGridViewCellStyle38.ForeColor = System.Drawing.SystemColors.WindowText;\r
+            dataGridViewCellStyle38.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+            dataGridViewCellStyle38.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+            dataGridViewCellStyle38.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
+            this.dgMessages.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle38;\r
             this.dgMessages.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
             this.dgMessages.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\r
             this.dataGridViewTextBoxColumn1,\r
             this.dataGridViewTextBoxColumn2});\r
-            dataGridViewCellStyle26.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle26.BackColor = System.Drawing.SystemColors.Window;\r
-            dataGridViewCellStyle26.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            dataGridViewCellStyle26.ForeColor = System.Drawing.Color.Red;\r
-            dataGridViewCellStyle26.NullValue = null;\r
-            dataGridViewCellStyle26.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
-            dataGridViewCellStyle26.SelectionForeColor = System.Drawing.Color.Red;\r
-            dataGridViewCellStyle26.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
-            this.dgMessages.DefaultCellStyle = dataGridViewCellStyle26;\r
+            dataGridViewCellStyle40.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle40.BackColor = System.Drawing.SystemColors.Window;\r
+            dataGridViewCellStyle40.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            dataGridViewCellStyle40.ForeColor = System.Drawing.Color.Red;\r
+            dataGridViewCellStyle40.NullValue = null;\r
+            dataGridViewCellStyle40.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+            dataGridViewCellStyle40.SelectionForeColor = System.Drawing.Color.Red;\r
+            dataGridViewCellStyle40.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+            this.dgMessages.DefaultCellStyle = dataGridViewCellStyle40;\r
             this.dgMessages.Dock = System.Windows.Forms.DockStyle.Fill;\r
             this.dgMessages.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
             this.dgMessages.EnableHeadersVisualStyles = false;\r
@@ -810,17 +813,17 @@ namespace Maestro {
             this.dgMessages.Location = new System.Drawing.Point(3, 3);\r
             this.dgMessages.Name = "dgMessages";\r
             this.dgMessages.ReadOnly = true;\r
-            dataGridViewCellStyle27.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle27.BackColor = System.Drawing.SystemColors.Control;\r
-            dataGridViewCellStyle27.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            dataGridViewCellStyle27.ForeColor = System.Drawing.SystemColors.WindowText;\r
-            dataGridViewCellStyle27.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
-            dataGridViewCellStyle27.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
-            dataGridViewCellStyle27.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
-            this.dgMessages.RowHeadersDefaultCellStyle = dataGridViewCellStyle27;\r
+            dataGridViewCellStyle41.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle41.BackColor = System.Drawing.SystemColors.Control;\r
+            dataGridViewCellStyle41.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            dataGridViewCellStyle41.ForeColor = System.Drawing.SystemColors.WindowText;\r
+            dataGridViewCellStyle41.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+            dataGridViewCellStyle41.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+            dataGridViewCellStyle41.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
+            this.dgMessages.RowHeadersDefaultCellStyle = dataGridViewCellStyle41;\r
             this.dgMessages.RowHeadersVisible = false;\r
-            dataGridViewCellStyle28.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            this.dgMessages.RowsDefaultCellStyle = dataGridViewCellStyle28;\r
+            dataGridViewCellStyle42.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.dgMessages.RowsDefaultCellStyle = dataGridViewCellStyle42;\r
             this.dgMessages.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
             this.dgMessages.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
             this.dgMessages.Size = new System.Drawing.Size(988, 92);\r
@@ -839,8 +842,8 @@ namespace Maestro {
             // \r
             this.dataGridViewTextBoxColumn2.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;\r
             this.dataGridViewTextBoxColumn2.DataPropertyName = "Message";\r
-            dataGridViewCellStyle25.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            this.dataGridViewTextBoxColumn2.DefaultCellStyle = dataGridViewCellStyle25;\r
+            dataGridViewCellStyle39.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.dataGridViewTextBoxColumn2.DefaultCellStyle = dataGridViewCellStyle39;\r
             this.dataGridViewTextBoxColumn2.HeaderText = "Üzenet";\r
             this.dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2";\r
             this.dataGridViewTextBoxColumn2.ReadOnly = true;\r
@@ -859,7 +862,7 @@ namespace Maestro {
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
             this.BackColor = System.Drawing.SystemColors.Control;\r
             this.ClientSize = new System.Drawing.Size(1022, 632);\r
-            this.Controls.Add(this.splitContainer2);\r
+            this.Controls.Add(this.scMain);\r
             this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));\r
             this.Name = "MaestroForm";\r
             this.ShowInTaskbar = false;\r
@@ -877,14 +880,14 @@ namespace Maestro {
             this.tableLayoutPanel2.ResumeLayout(false);\r
             this.tableLayoutPanel2.PerformLayout();\r
             this.ctxmActions.ResumeLayout(false);\r
-            this.splitContainer1.Panel1.ResumeLayout(false);\r
-            this.splitContainer1.Panel2.ResumeLayout(false);\r
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();\r
-            this.splitContainer1.ResumeLayout(false);\r
-            this.splitContainer3.Panel1.ResumeLayout(false);\r
-            this.splitContainer3.Panel2.ResumeLayout(false);\r
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit();\r
-            this.splitContainer3.ResumeLayout(false);\r
+            this.scOperations.Panel1.ResumeLayout(false);\r
+            this.scOperations.Panel2.ResumeLayout(false);\r
+            ((System.ComponentModel.ISupportInitialize)(this.scOperations)).EndInit();\r
+            this.scOperations.ResumeLayout(false);\r
+            this.scRightOperations.Panel1.ResumeLayout(false);\r
+            this.scRightOperations.Panel2.ResumeLayout(false);\r
+            ((System.ComponentModel.ISupportInitialize)(this.scRightOperations)).EndInit();\r
+            this.scRightOperations.ResumeLayout(false);\r
             this.groupMetadata.ResumeLayout(false);\r
             this.tabMetadata.ResumeLayout(false);\r
             this.tpOctopus.ResumeLayout(false);\r
@@ -893,11 +896,11 @@ namespace Maestro {
             this.tableLayoutPanel1.ResumeLayout(false);\r
             this.tableLayoutPanel1.PerformLayout();\r
             this.groupTarget.ResumeLayout(false);\r
-            this.panel1.ResumeLayout(false);\r
-            this.splitContainer2.Panel1.ResumeLayout(false);\r
-            this.splitContainer2.Panel2.ResumeLayout(false);\r
-            ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit();\r
-            this.splitContainer2.ResumeLayout(false);\r
+            this.pExecute.ResumeLayout(false);\r
+            this.scMain.Panel1.ResumeLayout(false);\r
+            this.scMain.Panel2.ResumeLayout(false);\r
+            ((System.ComponentModel.ISupportInitialize)(this.scMain)).EndInit();\r
+            this.scMain.ResumeLayout(false);\r
             this.groupActions.ResumeLayout(false);\r
             this.tabSystem.ResumeLayout(false);\r
             this.tabPage1.ResumeLayout(false);\r
@@ -916,9 +919,9 @@ namespace Maestro {
         private System.Windows.Forms.GroupBox groupSource;\r
         private System.Windows.Forms.DataGridView dgSource;\r
         private System.Windows.Forms.BindingSource bindingSource;\r
-        private System.Windows.Forms.SplitContainer splitContainer1;\r
-        private System.Windows.Forms.SplitContainer splitContainer2;\r
-        private System.Windows.Forms.SplitContainer splitContainer3;\r
+        private System.Windows.Forms.SplitContainer scOperations;\r
+        private System.Windows.Forms.SplitContainer scMain;\r
+        private System.Windows.Forms.SplitContainer scRightOperations;\r
         private System.Windows.Forms.GroupBox groupMetadata;\r
         private System.Windows.Forms.GroupBox groupTarget;\r
         private System.Windows.Forms.Button btnExecute;\r
@@ -934,7 +937,7 @@ namespace Maestro {
         private OctopusClient.OctopusIDSelector octopusIDSelector;\r
         private System.Windows.Forms.TabPage tpTraffic;\r
         private System.Windows.Forms.BindingSource metadataInfoBindingSource;\r
-        private System.Windows.Forms.Panel panel1;\r
+        private System.Windows.Forms.Panel pExecute;\r
         private System.Windows.Forms.ContextMenuStrip ctxmActions;\r
         private System.Windows.Forms.ToolStripMenuItem ctxiDefineSegments;\r
         private System.Windows.Forms.ToolStripMenuItem ctxiModifyArchiveMetadata;\r
index fd47e85266716b75bebab22bf8da9572d2c31e0f..553fa0b63fbf6a72358ca766220591a3f69e7a2d 100644 (file)
@@ -3,7 +3,6 @@ using Maestro.Configuration;
 using Maestro.Metadata;\r
 using Maestro.Sources;\r
 using Maestro.Sources.Messages;\r
-using OctopusClient;\r
 using System;\r
 using System.Collections.Generic;\r
 using System.Drawing;\r
@@ -60,18 +59,11 @@ namespace Maestro {
                 logger.Debug("NEXIO source created");\r
             }\r
 \r
-            MessageBus.Subscribe<RemoveFileActionMsg>(OnFileInvolved);\r
-\r
             source.Startup(localAddress);\r
             bindingSource.DataSource = source;\r
-            //dataGridSource.Columns.AddRange(new DataGridViewCheckBoxColumn());\r
             dgSource.Columns.AddRange(source.Columns);\r
         }\r
 \r
-        private void OnFileInvolved(FileActionMsg m) {\r
-            //UpdateSelectedSources();\r
-        }\r
-\r
         private void dataGridSource_CellMouseEnter(object sender, DataGridViewCellEventArgs e) {\r
             if (e.RowIndex > -1 && IsPlayColumn(e.ColumnIndex))\r
                 dgSource.Cursor = Cursors.Hand;\r
@@ -105,63 +97,53 @@ namespace Maestro {
                 FileSourceItem fileSourceItem = selectedItems as FileSourceItem;\r
                 if (fileSourceItem == null)\r
                     return;\r
+                dgSource.Enabled = false;\r
                 Cursor = Cursors.WaitCursor;\r
-                BeginInvoke(new Action(() => {\r
+                try {\r
                     PlayerForm player = new PlayerForm();\r
                     player.AutoStart = Configuration.Player.AutoStart;\r
                     player.Open(fileSourceItem.FileInfo);\r
                     if (!player.IsDisposed)\r
                         player.ShowDialog();\r
                     Cursor = Cursors.Default;\r
-                }));\r
+                }\r
+                catch (Exception ex) {\r
+                    MessageBox.Show(ex.Message);\r
+                }\r
+                \r
+                dgSource.Enabled = true;\r
             }\r
         }\r
 \r
-        private bool GetHasChecked(DataGridViewSelectedRowCollection selectedRows) {\r
-            foreach (DataGridViewRow row in selectedRows) {\r
-                DataGridViewCheckBoxCell checkBoxCell = row.Cells[0] as DataGridViewCheckBoxCell;\r
-                if (true.Equals(checkBoxCell.Value))\r
-                    return true;\r
-            }\r
-            return false;\r
+        private ISourceItem AsISourceItem(DataGridViewRow row) {\r
+            return row.DataBoundItem as ISourceItem;\r
         }\r
 \r
-        private void UpdateCheckStates(DataGridViewSelectedRowCollection rows) {\r
-            bool hasChecked = GetHasChecked(rows);\r
-            var nameColumn = dgSource.Columns.Cast<DataGridViewColumn>().Where(x => x.HeaderText == StringResources.NEV).FirstOrDefault();\r
-            if (nameColumn == null)\r
+        private void UpdateCheckStates(DataGridViewSelectedRowCollection selectedRows) {\r
+            IEnumerable<DataGridViewRow> currentSelectedRows = selectedRows.Cast<DataGridViewRow>();\r
+            if (currentSelectedRows == null)\r
                 return;\r
-            int nameCellIndex = nameColumn.Index;\r
-            foreach (DataGridViewRow row in rows) {\r
-                String name = row.Cells[nameCellIndex].Value as string;\r
-                if (String.IsNullOrEmpty(name))\r
-                    continue;\r
-                DataGridViewCheckBoxCell checkBoxCell = row.Cells[0] as DataGridViewCheckBoxCell;\r
-                if (rows.Count > 1)\r
-                    checkBoxCell.Value = !hasChecked;\r
+            int checkedCount = currentSelectedRows.Count(r => AsISourceItem(r).IsChecked);\r
+            foreach (DataGridViewRow row in selectedRows) {\r
+                ISourceItem item = AsISourceItem(row);\r
+                if (selectedRows.Count == 1)\r
+                    item.IsChecked = !item.IsChecked;\r
                 else\r
-                    checkBoxCell.Value = (checkBoxCell.Value == null || checkBoxCell.Value.Equals(false)) ? true : false;\r
+                    item.IsChecked = checkedCount == selectedRows.Count ? false : true;\r
 \r
-                if (checkBoxCell.Value.Equals(false))\r
-                    selectedSourceRows.Remove(row);\r
-                else\r
+                if (item.IsChecked)\r
                     selectedSourceRows.Add(row);\r
+                else\r
+                    selectedSourceRows.Remove(row);\r
             }\r
-            SetSelectedSource(nameCellIndex);\r
-        }\r
-\r
-        private string GetPrefix(string name) {\r
-            if (String.IsNullOrEmpty(name))\r
-                return null;\r
-            string[] byHyphen = name.Replace('_', '-').Replace('.', '-').Split('-');\r
-            return byHyphen.Length > 0 ? byHyphen[0] : null;\r
+            SetSelectedSource();\r
         }\r
 \r
-        private void SetSelectedSource(int nameCellIndex) {\r
+        private void SetSelectedSource() {\r
             string selectionPrefix = null;\r
             string selectedNames = String.Empty;\r
             foreach (DataGridViewRow actual in selectedSourceRows) {\r
-                string name = actual.Cells[nameCellIndex].Value as string;\r
+                string name = (actual.DataBoundItem as ISourceItem).Name;\r
                 selectedNames += name + " ";\r
                 string currentPrefix = GetPrefix(name);\r
                 if (selectionPrefix == null)\r
@@ -174,17 +156,24 @@ namespace Maestro {
             else\r
                 SelectedSource = new SourceInfo() {\r
                     Name = selectedNames,\r
-                    FileInfo = GetSelectedSourceFileInfo(nameCellIndex),\r
+                    FileInfo = GetSelectedSourceFileInfo(),\r
                     Prefix = selectionPrefix\r
                 };\r
         }\r
 \r
-        private FileInfo GetSelectedSourceFileInfo(int nameCellIndex) {\r
+        private string GetPrefix(string name) {\r
+            if (String.IsNullOrEmpty(name))\r
+                return null;\r
+            string[] byHyphen = name.Replace('_', '-').Replace('.', '-').Split('-');\r
+            return byHyphen.Length > 0 ? byHyphen[0] : null;\r
+        }\r
+\r
+        private FileInfo GetSelectedSourceFileInfo() {\r
             if (Configuration.Source.GetType() == typeof(NEXIOSource))\r
                 return null;\r
             if (selectedSourceRows.Count != 1)\r
                 return null;\r
-            string name = selectedSourceRows[0].Cells[nameCellIndex].Value as string;\r
+            string name = (selectedSourceRows[0].DataBoundItem as ISourceItem).Name;\r
             Uri inputUri = new Uri(String.Format("{0}/{1}", Configuration.Source.Local.Address.LocalPath, name));\r
             return new FileInfo(inputUri.LocalPath);\r
         }\r
@@ -261,49 +250,6 @@ namespace Maestro {
             }\r
         }\r
 \r
-\r
-        //private void LookupOctopus() {\r
-        //    OctopusAPI api = octopusIDSelector.GetClient();\r
-        //    Cursor.Current = Cursors.WaitCursor;\r
-        //    IEnumerable<Story> stories = api.GetStoriesById(SelectedSource?.Prefix);\r
-        //    if (stories == null || stories.Count() == 0) {\r
-        //        LookupOctopusMOS();\r
-        //        Cursor.Current = Cursors.Default;\r
-        //        return;\r
-        //    }\r
-        //    List<Story> list = stories.ToList();\r
-        //    if (list.Count == 1) {\r
-        //        UpdateEditArchiveMetadataEnabled();\r
-        //        textSelectedMetadata.Text = list[0].ID;\r
-        //        octopusMetadataSelected?.Invoke(list[0].ID, null);\r
-        //    } else {\r
-        //        OctopusLookupResultSelector box = new OctopusLookupResultSelector(list, octopusMetadataSelected);\r
-        //        box.ShowDialog();\r
-        //    }\r
-        //    Cursor.Current = Cursors.Default;\r
-        //}\r
-\r
-        //private void LookupOctopus() {\r
-        //    OctopusAPI api = octopusIDSelector.GetClient();\r
-        //    IEnumerable<MosObject> mosIDs = api.GetMosObjectsByID(SelectedSource?.Prefix);\r
-        //    if (mosIDs == null) {\r
-        //        MessageBox.Show(this, StringResources.NINCS_TALALAT);\r
-        //        return;\r
-        //    }\r
-        //    List<MosObject> mosObjects = mosIDs.ToList();\r
-        //    if (mosObjects == null || mosObjects.Count == 0) {\r
-        //        MessageBox.Show(this, StringResources.NINCS_TALALAT);\r
-        //        return;\r
-        //    }\r
-        //    if (mosObjects.Count == 1)\r
-        //        OnOctopusIDSelected(mosObjects[0].ID, mosObjects[0].ObjID);\r
-        //    else {\r
-        //        OctopusLookupResultSelector box = new OctopusLookupResultSelector(mosObjects, OnOctopusIDSelected);\r
-        //        box.ShowDialog();\r
-        //    }\r
-        //}\r
-\r
-\r
         private void picClearFilter_Click(object sender, EventArgs e) {\r
             txtSourceFilter.Text = null;\r
             bindingSource.Filter = null;\r
index 93a89e8aa6b87d11173b5f6349f6325acafaac35..29b34d4c30063ef43f274e02d7dbfc8d65a97aed 100644 (file)
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers\r
 // by using the '*' as shown below:\r
 // [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("1.9.9")]\r
-[assembly: AssemblyFileVersion("1.9.9")]\r
+[assembly: AssemblyVersion("2.0.0")]\r
+[assembly: AssemblyFileVersion("2.0.0")]\r
index 793e76e3bc2f08ac6118e63110d413069f5922c5..57ed4aebcb1a090f7894dc10049e4a7fc32d5f1c 100644 (file)
@@ -14,10 +14,11 @@ namespace OctopusClient {
         public string ID { get; set; }\r
         public string Name { get; set; }\r
         public DateTime Start { get; set; }\r
+        public string FormattedStart { get; set; }\r
+        public int? StoryPosition { get; set; }\r
         public override String ToString() {\r
-            string displayName = string.IsNullOrEmpty(Name) ? OctopusAPI.UNNAMED : Name;\r
-            string result = ID.Equals("0") ? displayName : String.Format($"{Start} | {displayName} ");\r
-            return result;\r
+            string displayName = Name?.ToString() ?? OctopusAPI.UNNAMED;\r
+            return "0".Equals(ID) ? displayName : String.Format($"{FormattedStart} {displayName} ");\r
         }\r
     }\r
 \r
@@ -28,14 +29,14 @@ namespace OctopusClient {
         public string Script { get; set; }\r
         public string ScriptContent { get; set; }\r
         public string Format { get; set; }\r
+        public int? Position { get; set; }\r
         public MosObject[] MosObjects { get; set; }\r
         public StoryFolder[] StoryFolders { get; set; }\r
         public Rundown[] Rundowns { get; set; }\r
 \r
         public override String ToString() {\r
-            string displayName = string.IsNullOrEmpty(Name) ? OctopusAPI.UNNAMED : Name;\r
-            string result = ID.Equals("0") ? displayName : String.Format($"{ID} | {displayName} ");\r
-            return result;\r
+            string displayName = Name?.ToString() ?? OctopusAPI.UNNAMED;\r
+            return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} ");\r
         }\r
     }\r
 \r
@@ -44,20 +45,16 @@ namespace OctopusClient {
         public string ObjID { get; set; }\r
         public string ObjectType { get; set; }\r
         public string ID { get; set; }\r
-        public string Modified { get; set; }\r
         public string GlobalID { get; set; }\r
     }\r
 \r
     public class StoryFolder {\r
-\r
         public string ID { get; set; }\r
-\r
         public string Name { get; set; }\r
-\r
+        public int? StoryPosition { get; set; }\r
         public override String ToString() {\r
-            string displayName = string.IsNullOrEmpty(Name) ? OctopusAPI.UNNAMED : Name;\r
-            string result = ID.Equals("0") ? displayName : String.Format($"{ID} | {displayName} ");\r
-            return result;\r
+            string displayName = Name?.ToString() ?? OctopusAPI.UNNAMED;\r
+            return "0".Equals(ID) ? displayName : String.Format($"{ID} {displayName} ");\r
         }\r
     }\r
 \r
@@ -79,27 +76,16 @@ namespace OctopusClient {
             this.messageBus = messageBus;\r
         }\r
 \r
-        private void OnError(Exception e) {\r
-            logger.Error(e);\r
-            if (messageBus != null)\r
-                messageBus.Send(new OctopusAPIMessage("Sikertelen kapcsolódás a MediaCube OCTOPUS szolgáltatásához."));\r
-        }\r
-\r
         public IEnumerable<Rundown> GetRundowns(DateTime scheduledDate) {\r
             IEnumerable<Rundown> result = null;\r
-            logger.Debug("GetRundowns");\r
             try {\r
                 var request = new RestRequest("rundowns/{scheduledDate}", Method.GET);\r
                 var dt = scheduledDate.ToString("s", CultureInfo.CurrentCulture);\r
                 request.AddParameter("scheduledDate", dt, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => ToRundown(d));\r
             }\r
             catch (Exception e) {\r
@@ -114,16 +100,12 @@ namespace OctopusClient {
                 var request = new RestRequest("stories/{rundownID}", Method.GET);\r
                 request.AddParameter("rundownID", rundownID, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
-                    Story r = ToStory(d);\r
-                    logger.Debug($"{r}");\r
+                    Story r = ToRundownStory(d, rundownID);\r
+                    //logger.Debug($"{r}");\r
                     return r;\r
                 }).OrderBy(r => {\r
                     return r.ID;\r
@@ -135,35 +117,17 @@ namespace OctopusClient {
             return result;\r
         }\r
 \r
-        private Story ToStory(JToken d) {\r
-            return new Story {\r
-                ID = d["id"]?.ToString(),\r
-                ParentStoryID = d["parentStoryId"]?.ToString(),\r
-                Name = d["name"]?.ToString(),\r
-                Format = d["format"]?.ToString(),\r
-                MosObjects = GetMosObjectsFromStory(d)?.ToArray(),\r
-                Script = d["script"]?.ToString(),\r
-                ScriptContent = d["script_content"]?.ToString(),\r
-                StoryFolders = GetStoryFolderFromStory(d)?.ToArray(),\r
-                Rundowns = GetRundownFromStory(d)?.ToArray()\r
-            };\r
-        }\r
-\r
         public IEnumerable<Story> GetStoryFolderStories(string storyFolderID) {\r
             IEnumerable<Story> result = null;\r
             try {\r
                 var request = new RestRequest("storiesByStoryFolderID/{storyFolderID}", Method.GET);\r
                 request.AddParameter("storyFolderID", storyFolderID, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
-                    Story r = ToStory(d);\r
+                    Story r = ToStoryFolderStory(d, storyFolderID);\r
                     logger.Debug($"{r}");\r
                     return r;\r
                 }).OrderBy(r => {\r
@@ -176,68 +140,17 @@ namespace OctopusClient {
             return result;\r
         }\r
 \r
-        private List<Rundown> GetRundownFromStory(JToken d) {\r
-            if (d["rundown"] == null)\r
-                return null;\r
-            JToken[] array = d["rundown"].ToArray();\r
-            List<Rundown> objs = new List<Rundown>();\r
-            foreach (JToken token in array) {\r
-                Rundown folder = new Rundown() { ID = token["id"].ToString() };\r
-                objs.Add(folder);\r
-            }\r
-            return objs;\r
-        }\r
-\r
-        private List<StoryFolder> GetStoryFolderFromStory(JToken d) {\r
-            if (d["story_folder"] == null)\r
-                return null;\r
-            JToken[] array = d["story_folder"].ToArray();\r
-            List<StoryFolder> objs = new List<StoryFolder>();\r
-            foreach (JToken token in array) {\r
-                StoryFolder folder = new StoryFolder() { ID = token["id"].ToString() };\r
-                objs.Add(folder);\r
-            }\r
-            return objs;\r
-        }\r
-\r
-        private List<MosObject> GetMosObjectsFromStory(JToken d) {\r
-            JToken mosObjects = d["mosObjects"];\r
-            if (mosObjects == null)\r
-                return null;\r
-            JToken[] array = mosObjects.ToArray();\r
-            List<MosObject> objs = new List<MosObject>();\r
-            foreach (JToken token in array) {\r
-                MosObject mosObject = new MosObject() {\r
-                    GlobalID = token["globalId"].ToString(),\r
-                    ID = token["id"].ToString(),\r
-                    Modified = token["modified"].ToString(),\r
-                    MosID = token["mosId"].ToString(),\r
-                    ObjectType = token["objectType"].ToString(),\r
-                    ObjID = token["objId"].ToString()\r
-                };\r
-                objs.Add(mosObject);\r
-            }\r
-            return objs;\r
-        }\r
-\r
         public IEnumerable<StoryFolder> getStoryFolders() {\r
             IEnumerable<StoryFolder> result = null;\r
             try {\r
                 var request = new RestRequest("storyfolders", Method.GET);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
-                    StoryFolder r = new StoryFolder {\r
-                        ID = d["id"].ToString(),\r
-                        Name = d["name"].ToString()\r
-                    };\r
-                    logger.Debug($"{r}");\r
+                    StoryFolder r = ToStoryFolder(d);\r
+                    //logger.Debug($"{r}");\r
                     return r;\r
                 });\r
             }\r
@@ -252,13 +165,9 @@ namespace OctopusClient {
             try {\r
                 var request = new RestRequest("stories", Method.GET);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
                     Story r = ToStory(d);\r
                     logger.Debug($"{r}");\r
@@ -277,13 +186,9 @@ namespace OctopusClient {
                 var request = new RestRequest("getStoriesByID/{id}", Method.GET);\r
                 request.AddParameter("id", id, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
                     Story r = ToStory(d);\r
                     //logger.Debug($"{r}");\r
@@ -302,13 +207,9 @@ namespace OctopusClient {
                 var request = new RestRequest("getStoriesByParentStoryID/{id}", Method.GET);\r
                 request.AddParameter("id", id, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
                     Story r = ToStory(d);\r
                     //logger.Debug($"{r}");\r
@@ -327,13 +228,9 @@ namespace OctopusClient {
                 var request = new RestRequest("getStoryFolders/{id}", Method.GET);\r
                 request.AddParameter("id", id, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
                     StoryFolder r = new StoryFolder {\r
                         ID = d["id"].ToString(),\r
@@ -356,13 +253,9 @@ namespace OctopusClient {
                 var request = new RestRequest("getRundownByStoryID/{id}", Method.GET);\r
                 request.AddParameter("id", id, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => ToRundown(d));\r
             }\r
             catch (Exception e) {\r
@@ -377,18 +270,13 @@ namespace OctopusClient {
                 var request = new RestRequest("getMosObjectsByID/{id}", Method.GET);\r
                 request.AddParameter("id", id, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
                     MosObject r = new MosObject {\r
                         ID = d["id"].ToString(),\r
                         GlobalID = d["globalId"].ToString(),\r
-                        Modified = d["modified"].ToString(),\r
                         MosID = d["mosId"].ToString(),\r
                         ObjectType = d["objectType"].ToString(),\r
                         ObjID = d["objId"].ToString()\r
@@ -409,14 +297,10 @@ namespace OctopusClient {
                 var request = new RestRequest("getRundownsByPlaceHolderId/{id}", Method.GET);\r
                 request.AddParameter("id", placeHolderID, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
-                result = resultObject.Children().Select(d =>ToRundown(d));\r
+                result = resultObject.Children().Select(d => ToRundown(d));\r
             }\r
             catch (Exception e) {\r
                 OnError(e);\r
@@ -424,13 +308,6 @@ namespace OctopusClient {
             return result;\r
         }\r
 \r
-        private static Rundown ToRundown(JToken d) {\r
-            return new Rundown {\r
-                ID = d["id"].ToString(),\r
-                Name = d["name"]?.ToString() ?? UNNAMED,\r
-                Start = DateTime.Parse(d["scheduledStart"]?.ToString())\r
-            };\r
-        }\r
 \r
         public IEnumerable<StoryFolder> GetStoryFoldersByPlaceHolderId(string placeHolderID) {\r
             IEnumerable<StoryFolder> result = null;\r
@@ -438,19 +315,12 @@ namespace OctopusClient {
                 var request = new RestRequest("getStoryFoldersByPlaceHolderId/{id}", Method.GET);\r
                 request.AddParameter("id", placeHolderID, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
-                    StoryFolder r = new StoryFolder {\r
-                        ID = d["id"].ToString(),\r
-                        Name = d["name"].ToString()\r
-                    };\r
-                    logger.Debug($"{r}");\r
+                    StoryFolder r = ToStoryFolder(d);\r
+                    //logger.Debug($"{r}");\r
                     return r;\r
                 });\r
             }\r
@@ -466,16 +336,12 @@ namespace OctopusClient {
                 var request = new RestRequest("getStoriesByPlaceHolderId/{id}", Method.GET);\r
                 request.AddParameter("id", placeHolderID, ParameterType.UrlSegment);\r
                 var response = client.Execute<JsonArray>(request);\r
-                if (response.ContentLength == 0) {\r
-                    if (response.ErrorException != null)\r
-                        throw new Exception(String.Format("[Octopus] {0}", response.ErrorMessage));\r
-                    else return null;\r
-                }\r
+                if (!CheckResponse(response))\r
+                    return null;\r
                 JArray resultObject = JArray.Parse(response.Content);\r
-\r
                 result = resultObject.Children().Select(d => {\r
                     Story r = ToStory(d);\r
-                    logger.Debug($"{r}");\r
+                    //logger.Debug($"{r}");\r
                     return r;\r
                 }).OrderBy(r => {\r
                     return r.ID;\r
@@ -486,5 +352,105 @@ namespace OctopusClient {
             }\r
             return result;\r
         }\r
+\r
+        private bool CheckResponse(IRestResponse<JsonArray> response) {\r
+            if (String.IsNullOrEmpty(response.Content))\r
+                return false;\r
+            //if (response.ContentLength != 0)\r
+            //    return false;\r
+            if (response.ErrorException != null)\r
+                throw new Exception(response.ErrorMessage);\r
+            else return true;\r
+        }\r
+\r
+        private void OnError(Exception e) {\r
+            logger.Error(e);\r
+            if (messageBus != null)\r
+                messageBus.Send(new OctopusAPIMessage("Sikertelen MediaCube OCTOPUS lekérdezés. Rendszerüzenet: " + e.Message));\r
+        }\r
+\r
+        private static IEnumerable<MosObject> GetMosObjectsFromStory(JToken d) {\r
+            return d["mosObjects"]?.Select(t => ToMosObject(t));\r
+        }\r
+\r
+        private static IEnumerable<StoryFolder> GetStoryFolderFromStory(JToken d) {\r
+            return d["story_folder"]?.Select(t => ToPartialStoryFolder(t));\r
+        }\r
+\r
+        private static IEnumerable<Rundown> GetRundownFromStory(JToken d) {\r
+            return d["rundown"]?.Select(t => ToPartialRundown(t));\r
+        }\r
+\r
+        private static StoryFolder ToStoryFolder(JToken d) {\r
+            return new StoryFolder() {\r
+                ID = d.Value<string>("id"),\r
+                Name = d.Value<string>("name")\r
+            };\r
+        }\r
+\r
+        private static StoryFolder ToPartialStoryFolder(JToken d) {\r
+            return new StoryFolder() {\r
+                ID = d.Value<string>("id"),\r
+                StoryPosition = d.Value<int>("position")\r
+            };\r
+        }\r
+\r
+        private static Rundown ToPartialRundown(JToken d) {\r
+            return new Rundown() {\r
+                ID = d.Value<string>("id"),\r
+                StoryPosition = d.Value<int>("position")\r
+            };\r
+        }\r
+\r
+        private static Story ToRundownStory(JToken d, string id) {\r
+            Story result = ToStory(d);\r
+            result.Position = result.Rundowns.Where(r => id.Equals(r.ID)).FirstOrDefault()?.StoryPosition;\r
+            return result;\r
+        }\r
+\r
+        private static Story ToStoryFolderStory(JToken d, string id) {\r
+            Story result = ToStory(d);\r
+            result.Position = result.StoryFolders.Where(r => id.Equals(r.ID)).FirstOrDefault()?.StoryPosition;\r
+            return result;\r
+        }\r
+\r
+        private static Story ToStory(JToken d) {\r
+            Story result = new Story {\r
+                ID = d["id"]?.ToString(),\r
+                ParentStoryID = d["parentStoryId"]?.ToString(),\r
+                Name = d["name"]?.ToString() ?? UNNAMED,\r
+                Format = d["format"]?.ToString(),\r
+                Script = d["script"]?.ToString(),\r
+                ScriptContent = d["script_content"]?.ToString(),\r
+                MosObjects = GetMosObjectsFromStory(d)?.ToArray(),\r
+                StoryFolders = GetStoryFolderFromStory(d)?.ToArray(),\r
+                Rundowns = GetRundownFromStory(d)?.ToArray()\r
+            };\r
+\r
+            return result;\r
+        }\r
+\r
+        private static Rundown ToRundown(JToken d) {\r
+            Rundown result = new Rundown {\r
+                ID = d["id"].ToString(),\r
+                Name = d["name"]?.ToString() ?? UNNAMED,\r
+                Start = DateTime.Parse(d["scheduledStart"]?.ToString()),\r
+            };\r
+            if (result.Start == null)\r
+                result.FormattedStart = "?";\r
+            else\r
+                result.FormattedStart = result.Start.ToString("HH:mm:ss", new CultureInfo("hu-HU"));\r
+            return result;\r
+        }\r
+\r
+        private static MosObject ToMosObject(JToken d) {\r
+            return new MosObject() {\r
+                GlobalID = d.Value<string>("globalId"),\r
+                ID = d.Value<string>("id"),\r
+                MosID = d.Value<string>("mosId"),\r
+                ObjectType = d.Value<string>("objectType"),\r
+                ObjID = d.Value<string>("objId")\r
+            };\r
+        }\r
     }\r
 }\r
index 26faa3d0580ca1d91ca437d12923dfbd1be84a4d..ac63f15f022800fb03533b9465bde960e47af600 100644 (file)
         /// the contents of this method with the code editor.\r
         /// </summary>\r
         private void InitializeComponent() {\r
-            this.dateScheduled = new System.Windows.Forms.DateTimePicker();\r
-            this.cbRundowns = new System.Windows.Forms.ComboBox();\r
             this.treeOctopus = new OctopusClient.CheckableTreeView();\r
-            this.tabOctopusFilter = new System.Windows.Forms.TabControl();\r
-            this.tpRundown = new System.Windows.Forms.TabPage();\r
-            this.tpStoryFolder = new System.Windows.Forms.TabPage();\r
-            this.cbStoryFolder = new System.Windows.Forms.ComboBox();\r
-            this.tabOctopusFilter.SuspendLayout();\r
-            this.tpRundown.SuspendLayout();\r
-            this.tpStoryFolder.SuspendLayout();\r
+            this.pSearch = new System.Windows.Forms.TableLayoutPanel();\r
+            this.cbFolders = new System.Windows.Forms.ComboBox();\r
+            this.pFolderType = new System.Windows.Forms.FlowLayoutPanel();\r
+            this.rbRundown = new System.Windows.Forms.RadioButton();\r
+            this.rbStoryFolder = new System.Windows.Forms.RadioButton();\r
+            this.txtFilter = new System.Windows.Forms.TextBox();\r
+            this.dtScheduled = new System.Windows.Forms.DateTimePicker();\r
+            this.pSeparator = new System.Windows.Forms.Panel();\r
+            this.pSearch.SuspendLayout();\r
+            this.pFolderType.SuspendLayout();\r
             this.SuspendLayout();\r
             // \r
-            // dateScheduled\r
-            // \r
-            this.dateScheduled.Format = System.Windows.Forms.DateTimePickerFormat.Short;\r
-            this.dateScheduled.Location = new System.Drawing.Point(6, 6);\r
-            this.dateScheduled.Name = "dateScheduled";\r
-            this.dateScheduled.Size = new System.Drawing.Size(82, 20);\r
-            this.dateScheduled.TabIndex = 0;\r
-            this.dateScheduled.ValueChanged += new System.EventHandler(this.dateScheduled_ValueChanged);\r
-            // \r
-            // cbRundowns\r
-            // \r
-            this.cbRundowns.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \r
-            | System.Windows.Forms.AnchorStyles.Right)));\r
-            this.cbRundowns.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\r
-            this.cbRundowns.FormattingEnabled = true;\r
-            this.cbRundowns.Location = new System.Drawing.Point(94, 6);\r
-            this.cbRundowns.Name = "cbRundowns";\r
-            this.cbRundowns.Size = new System.Drawing.Size(143, 21);\r
-            this.cbRundowns.TabIndex = 3;\r
-            this.cbRundowns.SelectedValueChanged += new System.EventHandler(this.comboRudowns_SelectedValueChanged);\r
-            // \r
             // treeOctopus\r
             // \r
             this.treeOctopus.BackColor = System.Drawing.Color.White;\r
             this.treeOctopus.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
             this.treeOctopus.CheckBoxes = true;\r
             this.treeOctopus.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.treeOctopus.Location = new System.Drawing.Point(10, 70);\r
+            this.treeOctopus.Location = new System.Drawing.Point(0, 78);\r
+            this.treeOctopus.Margin = new System.Windows.Forms.Padding(0);\r
             this.treeOctopus.Name = "treeOctopus";\r
-            this.treeOctopus.Size = new System.Drawing.Size(251, 296);\r
+            this.treeOctopus.Size = new System.Drawing.Size(300, 322);\r
             this.treeOctopus.TabIndex = 5;\r
             this.treeOctopus.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeContent_KeyDown);\r
             // \r
-            // tabOctopusFilter\r
-            // \r
-            this.tabOctopusFilter.Controls.Add(this.tpRundown);\r
-            this.tabOctopusFilter.Controls.Add(this.tpStoryFolder);\r
-            this.tabOctopusFilter.Dock = System.Windows.Forms.DockStyle.Top;\r
-            this.tabOctopusFilter.Location = new System.Drawing.Point(10, 10);\r
-            this.tabOctopusFilter.Name = "tabOctopusFilter";\r
-            this.tabOctopusFilter.SelectedIndex = 0;\r
-            this.tabOctopusFilter.Size = new System.Drawing.Size(251, 60);\r
-            this.tabOctopusFilter.TabIndex = 10;\r
-            this.tabOctopusFilter.Selected += new System.Windows.Forms.TabControlEventHandler(this.tabControl1_Selected);\r
-            this.tabOctopusFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.tabControl1_KeyDown);\r
-            // \r
-            // tpRundown\r
-            // \r
-            this.tpRundown.Controls.Add(this.dateScheduled);\r
-            this.tpRundown.Controls.Add(this.cbRundowns);\r
-            this.tpRundown.Location = new System.Drawing.Point(4, 22);\r
-            this.tpRundown.Name = "tpRundown";\r
-            this.tpRundown.Padding = new System.Windows.Forms.Padding(3);\r
-            this.tpRundown.Size = new System.Drawing.Size(243, 34);\r
-            this.tpRundown.TabIndex = 0;\r
-            this.tpRundown.Text = "Rundown";\r
-            this.tpRundown.UseVisualStyleBackColor = true;\r
-            // \r
-            // tpStoryFolder\r
-            // \r
-            this.tpStoryFolder.Controls.Add(this.cbStoryFolder);\r
-            this.tpStoryFolder.Location = new System.Drawing.Point(4, 22);\r
-            this.tpStoryFolder.Name = "tpStoryFolder";\r
-            this.tpStoryFolder.Padding = new System.Windows.Forms.Padding(3);\r
-            this.tpStoryFolder.Size = new System.Drawing.Size(243, 34);\r
-            this.tpStoryFolder.TabIndex = 1;\r
-            this.tpStoryFolder.Text = "Story Folder";\r
-            this.tpStoryFolder.UseVisualStyleBackColor = true;\r
-            // \r
-            // cbStoryFolder\r
-            // \r
-            this.cbStoryFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \r
+            // pSearch\r
+            // \r
+            this.pSearch.AutoSize = true;\r
+            this.pSearch.ColumnCount = 2;\r
+            this.pSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\r
+            this.pSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
+            this.pSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));\r
+            this.pSearch.Controls.Add(this.cbFolders, 0, 2);\r
+            this.pSearch.Controls.Add(this.pFolderType, 0, 1);\r
+            this.pSearch.Controls.Add(this.txtFilter, 0, 0);\r
+            this.pSearch.Controls.Add(this.dtScheduled, 0, 2);\r
+            this.pSearch.Dock = System.Windows.Forms.DockStyle.Top;\r
+            this.pSearch.Location = new System.Drawing.Point(0, 0);\r
+            this.pSearch.Margin = new System.Windows.Forms.Padding(0);\r
+            this.pSearch.Name = "pSearch";\r
+            this.pSearch.Padding = new System.Windows.Forms.Padding(3);\r
+            this.pSearch.RowCount = 3;\r
+            this.pSearch.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+            this.pSearch.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+            this.pSearch.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+            this.pSearch.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));\r
+            this.pSearch.Size = new System.Drawing.Size(300, 72);\r
+            this.pSearch.TabIndex = 11;\r
+            this.pSearch.Paint += new System.Windows.Forms.PaintEventHandler(this.OnSearchPanelPaint);\r
+            // \r
+            // cbFolders\r
+            // \r
+            this.cbFolders.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \r
             | System.Windows.Forms.AnchorStyles.Right)));\r
-            this.cbStoryFolder.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\r
-            this.cbStoryFolder.FormattingEnabled = true;\r
-            this.cbStoryFolder.Location = new System.Drawing.Point(6, 7);\r
-            this.cbStoryFolder.Margin = new System.Windows.Forms.Padding(3, 3, 3, 6);\r
-            this.cbStoryFolder.Name = "cbStoryFolder";\r
-            this.cbStoryFolder.Size = new System.Drawing.Size(231, 21);\r
-            this.cbStoryFolder.TabIndex = 1;\r
-            this.cbStoryFolder.SelectedValueChanged += new System.EventHandler(this.comboStoryFolder_SelectedValueChanged);\r
+            this.cbFolders.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;\r
+            this.cbFolders.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.cbFolders.FormattingEnabled = true;\r
+            this.cbFolders.Location = new System.Drawing.Point(86, 47);\r
+            this.cbFolders.Margin = new System.Windows.Forms.Padding(1);\r
+            this.cbFolders.Name = "cbFolders";\r
+            this.cbFolders.Size = new System.Drawing.Size(210, 21);\r
+            this.cbFolders.TabIndex = 4;\r
+            this.cbFolders.SelectedIndexChanged += new System.EventHandler(this.OnSelectedFolderChanged);\r
+            // \r
+            // pFolderType\r
+            // \r
+            this.pSearch.SetColumnSpan(this.pFolderType, 2);\r
+            this.pFolderType.Controls.Add(this.rbRundown);\r
+            this.pFolderType.Controls.Add(this.rbStoryFolder);\r
+            this.pFolderType.Dock = System.Windows.Forms.DockStyle.Top;\r
+            this.pFolderType.Location = new System.Drawing.Point(3, 25);\r
+            this.pFolderType.Margin = new System.Windows.Forms.Padding(0);\r
+            this.pFolderType.Name = "pFolderType";\r
+            this.pFolderType.Size = new System.Drawing.Size(294, 21);\r
+            this.pFolderType.TabIndex = 2;\r
+            // \r
+            // rbRundown\r
+            // \r
+            this.rbRundown.Appearance = System.Windows.Forms.Appearance.Button;\r
+            this.rbRundown.AutoSize = true;\r
+            this.rbRundown.Checked = true;\r
+            this.rbRundown.Dock = System.Windows.Forms.DockStyle.Left;\r
+            this.rbRundown.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.rbRundown.Location = new System.Drawing.Point(0, 0);\r
+            this.rbRundown.Margin = new System.Windows.Forms.Padding(0);\r
+            this.rbRundown.Name = "rbRundown";\r
+            this.rbRundown.Size = new System.Drawing.Size(63, 23);\r
+            this.rbRundown.TabIndex = 7;\r
+            this.rbRundown.TabStop = true;\r
+            this.rbRundown.Text = "Rundown";\r
+            this.rbRundown.UseVisualStyleBackColor = true;\r
+            this.rbRundown.CheckedChanged += new System.EventHandler(this.OnTypeCheckChanged);\r
+            // \r
+            // rbStoryFolder\r
+            // \r
+            this.rbStoryFolder.Appearance = System.Windows.Forms.Appearance.Button;\r
+            this.rbStoryFolder.AutoSize = true;\r
+            this.rbStoryFolder.Dock = System.Windows.Forms.DockStyle.Left;\r
+            this.rbStoryFolder.Font = new System.Drawing.Font("Microsoft Sans Serif", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            this.rbStoryFolder.Location = new System.Drawing.Point(63, 0);\r
+            this.rbStoryFolder.Margin = new System.Windows.Forms.Padding(0);\r
+            this.rbStoryFolder.Name = "rbStoryFolder";\r
+            this.rbStoryFolder.Size = new System.Drawing.Size(70, 23);\r
+            this.rbStoryFolder.TabIndex = 8;\r
+            this.rbStoryFolder.Text = "StoryFolder";\r
+            this.rbStoryFolder.UseVisualStyleBackColor = true;\r
+            // \r
+            // txtFilter\r
+            // \r
+            this.pSearch.SetColumnSpan(this.txtFilter, 2);\r
+            this.txtFilter.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.txtFilter.Location = new System.Drawing.Point(4, 4);\r
+            this.txtFilter.Margin = new System.Windows.Forms.Padding(1);\r
+            this.txtFilter.Name = "txtFilter";\r
+            this.txtFilter.Size = new System.Drawing.Size(292, 20);\r
+            this.txtFilter.TabIndex = 0;\r
+            this.txtFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OnFilterKeyDown);\r
+            // \r
+            // dtScheduled\r
+            // \r
+            this.dtScheduled.CustomFormat = " ";\r
+            this.dtScheduled.Format = System.Windows.Forms.DateTimePickerFormat.Short;\r
+            this.dtScheduled.Location = new System.Drawing.Point(4, 47);\r
+            this.dtScheduled.Margin = new System.Windows.Forms.Padding(1);\r
+            this.dtScheduled.Name = "dtScheduled";\r
+            this.dtScheduled.Size = new System.Drawing.Size(80, 20);\r
+            this.dtScheduled.TabIndex = 3;\r
+            this.dtScheduled.ValueChanged += new System.EventHandler(this.OnDateChanged);\r
+            // \r
+            // pSeparator\r
+            // \r
+            this.pSeparator.BackColor = System.Drawing.Color.White;\r
+            this.pSeparator.Dock = System.Windows.Forms.DockStyle.Top;\r
+            this.pSeparator.Location = new System.Drawing.Point(0, 72);\r
+            this.pSeparator.Name = "pSeparator";\r
+            this.pSeparator.Size = new System.Drawing.Size(300, 6);\r
+            this.pSeparator.TabIndex = 12;\r
             // \r
             // OctopusIDSelector\r
             // \r
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
             this.BackColor = System.Drawing.Color.White;\r
             this.Controls.Add(this.treeOctopus);\r
-            this.Controls.Add(this.tabOctopusFilter);\r
-            this.Margin = new System.Windows.Forms.Padding(10);\r
+            this.Controls.Add(this.pSeparator);\r
+            this.Controls.Add(this.pSearch);\r
             this.Name = "OctopusIDSelector";\r
-            this.Padding = new System.Windows.Forms.Padding(10);\r
-            this.Size = new System.Drawing.Size(271, 376);\r
-            this.tabOctopusFilter.ResumeLayout(false);\r
-            this.tpRundown.ResumeLayout(false);\r
-            this.tpStoryFolder.ResumeLayout(false);\r
+            this.Size = new System.Drawing.Size(300, 400);\r
+            this.pSearch.ResumeLayout(false);\r
+            this.pSearch.PerformLayout();\r
+            this.pFolderType.ResumeLayout(false);\r
+            this.pFolderType.PerformLayout();\r
             this.ResumeLayout(false);\r
+            this.PerformLayout();\r
 \r
         }\r
 \r
         #endregion\r
-\r
-        private System.Windows.Forms.DateTimePicker dateScheduled;\r
-        private System.Windows.Forms.ComboBox cbRundowns;\r
-        private System.Windows.Forms.TabControl tabOctopusFilter;\r
-        private System.Windows.Forms.TabPage tpRundown;\r
-        private System.Windows.Forms.TabPage tpStoryFolder;\r
-        private System.Windows.Forms.ComboBox cbStoryFolder;\r
         private CheckableTreeView treeOctopus;\r
+        private System.Windows.Forms.TableLayoutPanel pSearch;\r
+        private System.Windows.Forms.FlowLayoutPanel pFolderType;\r
+        private System.Windows.Forms.RadioButton rbRundown;\r
+        private System.Windows.Forms.RadioButton rbStoryFolder;\r
+        private System.Windows.Forms.TextBox txtFilter;\r
+        private System.Windows.Forms.DateTimePicker dtScheduled;\r
+        private System.Windows.Forms.ComboBox cbFolders;\r
+        private System.Windows.Forms.Panel pSeparator;\r
     }\r
 }\r
index 39b16776ae989942bb5f52c14940fdb9ede52807..e975ab2e4f5a6240bef5f7a4c884b05b425ab820 100644 (file)
@@ -12,10 +12,9 @@ namespace OctopusClient {
 \r
     public partial class OctopusIDSelector : UserControl {\r
         private static Logger logger = LogManager.GetCurrentClassLogger();\r
+        private static readonly string ZERO = "0";\r
         private string lookupStoryId;\r
         private string lookupPlaceHolderId;\r
-        //private int selectedStoryFolderIndex = -1;\r
-        //private int selectedRundownIndex = -1;\r
         private TreeNode selectedNode;\r
         private OctopusAPI client;\r
         public OnSelectedIDChanged IDChangedEvent { get; set; }\r
@@ -25,7 +24,8 @@ namespace OctopusClient {
             set {\r
                 configuration = value;\r
                 client = new OctopusAPI(value.Address.OriginalString, value.UserName, value.Password, value.Timeout, value.MessageBus);\r
-                refreshRundowns();\r
+                rbRundown.Checked = true;\r
+                RefreshFolders();\r
             }\r
         }\r
 \r
@@ -54,7 +54,7 @@ namespace OctopusClient {
 \r
         public OctopusIDSelector() {\r
             InitializeComponent();\r
-            InitializeControlTexts();\r
+            InitializeControls();\r
             treeOctopus.AfterCheck += OnTreeAfterCheck;\r
             treeOctopus.AfterSelect += OnAfterSelect;\r
         }\r
@@ -82,75 +82,9 @@ namespace OctopusClient {
             TextRenderer.DrawText(e.Graphics, e.Node.Text, treeOctopus.Font, e.Bounds, treeOctopus.ForeColor, TextFormatFlags.Left | TextFormatFlags.Top);\r
         }\r
 \r
-        private void InitializeControlTexts() {\r
-            tpRundown.Text = Resources.ADASTUKOR;\r
-            tpStoryFolder.Text = Resources.MAPPA;\r
-        }\r
-\r
-        private void dateScheduled_ValueChanged(object sender, EventArgs e) {\r
-            refreshRundowns();\r
-        }\r
-\r
-        private void comboRudowns_SelectedValueChanged(object sender, EventArgs e) {\r
-            Rundown rundown = cbRundowns.SelectedValue as Rundown;\r
-            treeOctopus.Nodes.Clear();\r
-            if (rundown == null)\r
-                return;\r
-            logger.Info("Selected rundown {0} {1}", rundown.ID, rundown.Name);\r
-            if ("0".Equals(rundown.ID))\r
-                return;\r
-            IEnumerable<Story> stories = client.GetRundownStories(rundown.ID);\r
-            if (stories == null)\r
-                return;\r
-            AddStories(stories);\r
-            //selectedRundownIndex = cbRundowns.SelectedIndex;\r
-        }\r
-\r
-        private void comboStoryFolder_SelectedValueChanged(object sender, EventArgs e) {\r
-            StoryFolder storyFolder = cbStoryFolder.SelectedValue as StoryFolder;\r
-            if (storyFolder == null)\r
-                return;\r
-            treeOctopus.Nodes.Clear();\r
-            logger.Info("Selected StoryFolder {0} {1}", storyFolder.ID, storyFolder.Name);\r
-            if ("0".Equals(storyFolder.ID))\r
-                return;\r
-            var stories = client.GetStoryFolderStories(storyFolder.ID);\r
-            if (stories == null)\r
-                return;\r
-            AddStories(stories, true);\r
-            //selectedStoryFolderIndex = cbStoryFolder.SelectedIndex;\r
-        }\r
-\r
-        private void refreshRundowns() {\r
-            ClearSelection();\r
-            Cursor.Current = Cursors.WaitCursor;\r
-            List<Rundown> rundownsResult = client.GetRundowns(dateScheduled.Value.Date)?.ToList();\r
-            if (rundownsResult == null || rundownsResult.Count == 0) {\r
-                cbRundowns.DataSource = null;\r
-                Cursor.Current = Cursors.Default;\r
-                return;\r
-            }\r
-            List<Rundown> rundowns = new List<Rundown>();\r
-            rundowns.Add(new Rundown() { ID = 0.ToString(), Name = Resources.VALASSZON_ELEMET });\r
-            rundowns.AddRange(rundownsResult);\r
-            cbRundowns.DataSource = rundowns;\r
-            Cursor.Current = Cursors.Default;\r
-        }\r
-\r
-        private void refreshStoryFolders() {\r
-            ClearSelection();\r
-            Cursor.Current = Cursors.WaitCursor;\r
-            List<StoryFolder> storyFoldersResult = client.getStoryFolders()?.ToList();\r
-            if (storyFoldersResult == null || storyFoldersResult.Count == 0) {\r
-                Cursor.Current = Cursors.Default;\r
-                cbStoryFolder.DataSource = null;\r
-                return;\r
-            }\r
-            List<StoryFolder> storyFolders = new List<StoryFolder>();\r
-            storyFolders.Add(new StoryFolder() { ID = 0.ToString(), Name = Resources.VALASSZON_ELEMET });\r
-            storyFolders.AddRange(storyFoldersResult);\r
-            cbStoryFolder.DataSource = storyFolders;\r
-            Cursor.Current = Cursors.Default;\r
+        private void InitializeControls() {\r
+            rbRundown.Text = Resources.ADASTUKOR;\r
+            rbStoryFolder.Text = Resources.MAPPA;\r
         }\r
 \r
         public void ClearSelection() {\r
@@ -163,14 +97,6 @@ namespace OctopusClient {
             IDChangedEvent?.Invoke(null, null, null);\r
         }\r
 \r
-        private void tabControl1_Selected(object sender, TabControlEventArgs e) {\r
-            treeOctopus.Nodes.Clear();\r
-            if (e.TabPageIndex == 0)\r
-                refreshRundowns();\r
-            else\r
-                refreshStoryFolders();\r
-        }\r
-\r
         private void RefreshPlaceHolderIDS(String ID) {\r
             treeOctopus.Nodes.Clear();\r
 \r
@@ -278,19 +204,34 @@ namespace OctopusClient {
             if (String.IsNullOrEmpty(storyId))\r
                 return false;\r
             var rundown = client.GetRundownsByStoryID(storyId)?.FirstOrDefault();\r
-            if (rundown == null)\r
-                return false;\r
-            tabOctopusFilter.SelectedIndex = 0;\r
-            dateScheduled.Value = rundown.Start;\r
-            refreshRundowns();\r
-            List<Rundown> rundowns = cbRundowns.DataSource as List<Rundown>;\r
-            if (rundowns == null)\r
-                return false;\r
-            var rundownToFelect = rundowns.Where(f => f.ID.Equals(rundown.ID)).FirstOrDefault();\r
-            if (rundownToFelect == null)\r
-                return false;\r
-            lookupStoryId = storyId;\r
-            cbRundowns.SelectedItem = rundownToFelect;\r
+            if (rundown == null) {\r
+                var storyFolder = client.GetStoryFoldersByStoryID(storyId)?.FirstOrDefault();\r
+                if (storyFolder == null)\r
+                    return false;\r
+                rbStoryFolder.Checked = true;\r
+                RefreshFolders();\r
+                List<StoryFolder> storyFolders = cbFolders.DataSource as List<StoryFolder>;\r
+                if (storyFolders == null)\r
+                    return false;\r
+                var folderToSelect = storyFolders.Where(f => f.ID.Equals(storyFolder.ID)).FirstOrDefault();\r
+                if (folderToSelect == null)\r
+                    return false;\r
+                lookupStoryId = storyId;\r
+                cbFolders.SelectedItem = folderToSelect;\r
+            } else {\r
+                rbRundown.Checked = true;\r
+                dtScheduled.Value = rundown.Start;\r
+                RefreshFolders();\r
+                List<Rundown> rundowns = cbFolders.DataSource as List<Rundown>;\r
+                if (rundowns == null)\r
+                    return false;\r
+                var rundownToSelect = rundowns.Where(f => f.ID.Equals(rundown.ID)).FirstOrDefault();\r
+                if (rundownToSelect == null)\r
+                    return false;\r
+                lookupStoryId = storyId;\r
+                cbFolders.SelectedItem = rundownToSelect;\r
+            }\r
+            txtFilter.Text = lookupStoryId;\r
             lookupStoryId = null;\r
             return selectedNode != null;\r
         }\r
@@ -303,25 +244,107 @@ namespace OctopusClient {
                 var storyFolder = client.GetStoryFoldersByPlaceHolderId(placeHolderId)?.FirstOrDefault();\r
                 if (storyFolder == null)\r
                     return false;\r
-                tabOctopusFilter.SelectedIndex = 1;\r
-                refreshStoryFolders();\r
-                List<StoryFolder> storyFolders = cbStoryFolder.DataSource as List<StoryFolder>;\r
+                rbStoryFolder.Checked = true;\r
+                RefreshFolders();\r
+                List<StoryFolder> storyFolders = cbFolders.DataSource as List<StoryFolder>;\r
                 if (storyFolders == null)\r
                     return false;\r
-                var folderToFelect = storyFolders.Where(f => f.ID.Equals(storyFolder.ID)).FirstOrDefault();\r
-                if (folderToFelect == null)\r
+                var folderToSelect = storyFolders.Where(f => f.ID.Equals(storyFolder.ID)).FirstOrDefault();\r
+                if (folderToSelect == null)\r
                     return false;\r
                 lookupPlaceHolderId = placeHolderId;\r
-                cbStoryFolder.SelectedItem = folderToFelect;\r
+                cbFolders.SelectedItem = folderToSelect;\r
             } else {\r
+                rbRundown.Checked = true;\r
+                dtScheduled.Value = rundown.Start;\r
+                RefreshFolders();\r
+                List<Rundown> rundowns = cbFolders.DataSource as List<Rundown>;\r
+                if (rundowns == null)\r
+                    return false;\r
+                var rundownToSelect = rundowns.Where(f => f.ID.Equals(rundown.ID)).FirstOrDefault();\r
+                if (rundownToSelect == null)\r
+                    return false;\r
                 lookupPlaceHolderId = placeHolderId;\r
-                tabOctopusFilter.SelectedIndex = 0;\r
-                dateScheduled.Value = rundown.Start;\r
-                refreshRundowns();\r
+                cbFolders.SelectedItem = rundownToSelect;\r
             }\r
+            txtFilter.Text = lookupPlaceHolderId;\r
             lookupPlaceHolderId = null;\r
             return selectedNode != null;\r
         }\r
+\r
+        private void OnTypeCheckChanged(object sender, EventArgs e) {\r
+            RefreshFolders();\r
+        }\r
+\r
+        private void RefreshFolders() {\r
+            ClearSelection();\r
+            Cursor.Current = Cursors.WaitCursor;\r
+            if (rbRundown.Checked) {\r
+                dtScheduled.Enabled = true;\r
+                List<Rundown> rundownsResult = client.GetRundowns(dtScheduled.Value.Date)?.ToList();\r
+                if (rundownsResult == null || rundownsResult.Count == 0) {\r
+                    cbFolders.DataSource = null;\r
+                    Cursor.Current = Cursors.Default;\r
+                    return;\r
+                }\r
+                List<Rundown> rundowns = new List<Rundown>();\r
+                rundowns.Add(new Rundown() { ID = ZERO, Name = Resources.VALASSZON_ELEMET });\r
+                rundowns.AddRange(rundownsResult);\r
+                cbFolders.DataSource = rundowns;\r
+            } else {\r
+                dtScheduled.Enabled = false;\r
+                List<StoryFolder> storyFoldersResult = client.getStoryFolders()?.ToList();\r
+                if (storyFoldersResult == null || storyFoldersResult.Count == 0) {\r
+                    Cursor.Current = Cursors.Default;\r
+                    cbFolders.DataSource = null;\r
+                    return;\r
+                }\r
+                List<StoryFolder> storyFolders = new List<StoryFolder>();\r
+                storyFolders.Add(new StoryFolder() { ID = ZERO, Name = Resources.VALASSZON_ELEMET });\r
+                storyFolders.AddRange(storyFoldersResult);\r
+                cbFolders.DataSource = storyFolders;\r
+            }\r
+            Cursor.Current = Cursors.Default;\r
+        }\r
+\r
+        private void OnDateChanged(object sender, EventArgs e) {\r
+            RefreshFolders();\r
+        }\r
+\r
+        private void OnSelectedFolderChanged(object sender, EventArgs e) {\r
+            IEnumerable<Story> stories = null;\r
+            treeOctopus.Nodes.Clear();\r
+            if (rbRundown.Checked) {\r
+                Rundown rundown = cbFolders.SelectedValue as Rundown;\r
+                if (rundown == null || ZERO.Equals(rundown.ID))\r
+                    return;\r
+                //logger.Info("Selected rundown {0} {1}", rundown.ID, rundown.Name);\r
+                stories = client.GetRundownStories(rundown.ID)?.OrderBy(s => s.Rundowns[0].StoryPosition);\r
+            } else {\r
+                StoryFolder storyFolder = cbFolders.SelectedValue as StoryFolder;\r
+                if (storyFolder == null || ZERO.Equals(storyFolder.ID))\r
+                    return;\r
+                //logger.Info("Selected StoryFolder {0} {1}", storyFolder.ID, storyFolder.Name);\r
+                stories = client.GetStoryFolderStories(storyFolder.ID).OrderBy(s => s.StoryFolders[0].StoryPosition);\r
+            }\r
+\r
+            if (stories == null)\r
+                return;\r
+            AddStories(stories);\r
+        }\r
+\r
+        private void OnSearchPanelPaint(object sender, PaintEventArgs e) {\r
+            ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.LightGray, ButtonBorderStyle.Solid); // dotted border\r
+        }\r
+\r
+        private void OnFilterKeyDown(object sender, KeyEventArgs e) {\r
+            if (String.IsNullOrEmpty(txtFilter.Text) || e.KeyCode != Keys.Return)\r
+                return;\r
+            if (txtFilter.Text.Contains("_"))\r
+                LookupByPlaceHolder(txtFilter.Text);\r
+            else\r
+                LookupByStory(txtFilter.Text);\r
+        }\r
     }\r
 \r
     public class OctopusAPIMessage : IMessage {\r
index 5e8fd479de2d4d8d5da2adf9d7148c7e1daf6cc8..48502582284ac1c53e58c04a42bbbad1c7b21177 100644 (file)
         private void InitializeComponent()\r
         {\r
             this.components = new System.ComponentModel.Container();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();\r
-            this.pResults = new System.Windows.Forms.Panel();\r
-            this.dgTraffic = new System.Windows.Forms.DataGridView();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle();\r
+            System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle();\r
             this.trafficAPIBindingSource = new System.Windows.Forms.BindingSource(this.components);\r
             this.dtScheduled = new System.Windows.Forms.DateTimePicker();\r
             this.txtFilter = new System.Windows.Forms.TextBox();\r
-            this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();\r
+            this.pFolderType = new System.Windows.Forms.FlowLayoutPanel();\r
             this.rbMaterial = new System.Windows.Forms.RadioButton();\r
             this.rbPromo = new System.Windows.Forms.RadioButton();\r
             this.rbAD = new System.Windows.Forms.RadioButton();\r
-            this.tableLayoutPanelSearch = new System.Windows.Forms.TableLayoutPanel();\r
+            this.pSearch = new System.Windows.Forms.TableLayoutPanel();\r
             this.chkProblematic = new System.Windows.Forms.CheckBox();\r
-            this.pSearch = new System.Windows.Forms.Panel();\r
-            this.backgroundWorker1 = new System.ComponentModel.BackgroundWorker();\r
-            this.pResults.SuspendLayout();\r
-            ((System.ComponentModel.ISupportInitialize)(this.dgTraffic)).BeginInit();\r
+            this.dgTraffic = new System.Windows.Forms.DataGridView();\r
+            this.pSeparator = new System.Windows.Forms.Panel();\r
             ((System.ComponentModel.ISupportInitialize)(this.trafficAPIBindingSource)).BeginInit();\r
-            this.flowLayoutPanel1.SuspendLayout();\r
-            this.tableLayoutPanelSearch.SuspendLayout();\r
+            this.pFolderType.SuspendLayout();\r
             this.pSearch.SuspendLayout();\r
+            ((System.ComponentModel.ISupportInitialize)(this.dgTraffic)).BeginInit();\r
             this.SuspendLayout();\r
             // \r
-            // pResults\r
-            // \r
-            this.pResults.Controls.Add(this.dgTraffic);\r
-            this.pResults.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.pResults.Location = new System.Drawing.Point(0, 57);\r
-            this.pResults.Name = "pResults";\r
-            this.pResults.Size = new System.Drawing.Size(363, 319);\r
-            this.pResults.TabIndex = 11;\r
-            // \r
-            // dgTraffic\r
-            // \r
-            this.dgTraffic.AllowUserToAddRows = false;\r
-            this.dgTraffic.AllowUserToDeleteRows = false;\r
-            this.dgTraffic.AllowUserToOrderColumns = true;\r
-            this.dgTraffic.AllowUserToResizeRows = false;\r
-            this.dgTraffic.AutoGenerateColumns = false;\r
-            this.dgTraffic.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;\r
-            this.dgTraffic.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;\r
-            this.dgTraffic.BackgroundColor = System.Drawing.Color.White;\r
-            this.dgTraffic.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
-            this.dgTraffic.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;\r
-            dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;\r
-            dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
-            dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;\r
-            dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
-            dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
-            dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
-            this.dgTraffic.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;\r
-            this.dgTraffic.DataSource = this.trafficAPIBindingSource;\r
-            dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
-            dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;\r
-            dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);\r
-            dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;\r
-            dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
-            dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.Black;\r
-            dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
-            this.dgTraffic.DefaultCellStyle = dataGridViewCellStyle2;\r
-            this.dgTraffic.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.dgTraffic.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
-            this.dgTraffic.EnableHeadersVisualStyles = false;\r
-            this.dgTraffic.Location = new System.Drawing.Point(0, 0);\r
-            this.dgTraffic.MultiSelect = false;\r
-            this.dgTraffic.Name = "dgTraffic";\r
-            this.dgTraffic.RowHeadersVisible = false;\r
-            dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);\r
-            this.dgTraffic.RowsDefaultCellStyle = dataGridViewCellStyle3;\r
-            this.dgTraffic.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);\r
-            this.dgTraffic.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
-            this.dgTraffic.Size = new System.Drawing.Size(363, 319);\r
-            this.dgTraffic.TabIndex = 0;\r
-            this.dgTraffic.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick);\r
-            this.dgTraffic.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick);\r
-            this.dgTraffic.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OnDataGridKeyDown);\r
-            // \r
             // dtScheduled\r
             // \r
             this.dtScheduled.CustomFormat = " ";\r
             this.dtScheduled.Format = System.Windows.Forms.DateTimePickerFormat.Short;\r
-            this.dtScheduled.Location = new System.Drawing.Point(3, 34);\r
+            this.dtScheduled.Location = new System.Drawing.Point(4, 48);\r
+            this.dtScheduled.Margin = new System.Windows.Forms.Padding(1);\r
             this.dtScheduled.Name = "dtScheduled";\r
             this.dtScheduled.ShowCheckBox = true;\r
             this.dtScheduled.Size = new System.Drawing.Size(93, 20);\r
             // \r
             // txtFilter\r
             // \r
+            this.pSearch.SetColumnSpan(this.txtFilter, 2);\r
             this.txtFilter.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.txtFilter.Location = new System.Drawing.Point(198, 34);\r
+            this.txtFilter.Location = new System.Drawing.Point(4, 4);\r
+            this.txtFilter.Margin = new System.Windows.Forms.Padding(1);\r
             this.txtFilter.Name = "txtFilter";\r
-            this.txtFilter.Size = new System.Drawing.Size(162, 20);\r
+            this.txtFilter.Size = new System.Drawing.Size(292, 20);\r
             this.txtFilter.TabIndex = 0;\r
             this.txtFilter.TextChanged += new System.EventHandler(this.txtFilter_TextChanged);\r
             this.txtFilter.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtFilter_KeyDown);\r
             // \r
-            // flowLayoutPanel1\r
+            // pFolderType\r
             // \r
-            this.tableLayoutPanelSearch.SetColumnSpan(this.flowLayoutPanel1, 3);\r
-            this.flowLayoutPanel1.Controls.Add(this.rbMaterial);\r
-            this.flowLayoutPanel1.Controls.Add(this.rbPromo);\r
-            this.flowLayoutPanel1.Controls.Add(this.rbAD);\r
-            this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Top;\r
-            this.flowLayoutPanel1.Location = new System.Drawing.Point(1, 1);\r
-            this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(1);\r
-            this.flowLayoutPanel1.Name = "flowLayoutPanel1";\r
-            this.flowLayoutPanel1.Size = new System.Drawing.Size(361, 29);\r
-            this.flowLayoutPanel1.TabIndex = 2;\r
+            this.pSearch.SetColumnSpan(this.pFolderType, 2);\r
+            this.pFolderType.Controls.Add(this.rbMaterial);\r
+            this.pFolderType.Controls.Add(this.rbPromo);\r
+            this.pFolderType.Controls.Add(this.rbAD);\r
+            this.pFolderType.Dock = System.Windows.Forms.DockStyle.Top;\r
+            this.pFolderType.Location = new System.Drawing.Point(3, 25);\r
+            this.pFolderType.Margin = new System.Windows.Forms.Padding(0);\r
+            this.pFolderType.Name = "pFolderType";\r
+            this.pFolderType.Size = new System.Drawing.Size(294, 22);\r
+            this.pFolderType.TabIndex = 2;\r
             // \r
             // rbMaterial\r
             // \r
             this.rbMaterial.AutoSize = true;\r
             this.rbMaterial.Checked = true;\r
             this.rbMaterial.Dock = System.Windows.Forms.DockStyle.Left;\r
-            this.rbMaterial.Location = new System.Drawing.Point(3, 3);\r
+            this.rbMaterial.Location = new System.Drawing.Point(0, 0);\r
+            this.rbMaterial.Margin = new System.Windows.Forms.Padding(0);\r
             this.rbMaterial.Name = "rbMaterial";\r
-            this.rbMaterial.Size = new System.Drawing.Size(66, 23);\r
+            this.rbMaterial.Size = new System.Drawing.Size(54, 23);\r
             this.rbMaterial.TabIndex = 7;\r
             this.rbMaterial.TabStop = true;\r
-            this.rbMaterial.Text = "BroadCast";\r
+            this.rbMaterial.Text = "Material";\r
             this.rbMaterial.UseVisualStyleBackColor = true;\r
             this.rbMaterial.CheckedChanged += new System.EventHandler(this.OnTypeFilterChanged);\r
             // \r
             this.rbPromo.Appearance = System.Windows.Forms.Appearance.Button;\r
             this.rbPromo.AutoSize = true;\r
             this.rbPromo.Dock = System.Windows.Forms.DockStyle.Left;\r
-            this.rbPromo.Location = new System.Drawing.Point(75, 3);\r
+            this.rbPromo.Location = new System.Drawing.Point(54, 0);\r
+            this.rbPromo.Margin = new System.Windows.Forms.Padding(0);\r
             this.rbPromo.Name = "rbPromo";\r
             this.rbPromo.Size = new System.Drawing.Size(47, 23);\r
             this.rbPromo.TabIndex = 8;\r
             this.rbAD.Appearance = System.Windows.Forms.Appearance.Button;\r
             this.rbAD.AutoSize = true;\r
             this.rbAD.Dock = System.Windows.Forms.DockStyle.Left;\r
-            this.rbAD.Location = new System.Drawing.Point(128, 3);\r
+            this.rbAD.Location = new System.Drawing.Point(101, 0);\r
+            this.rbAD.Margin = new System.Windows.Forms.Padding(0);\r
             this.rbAD.Name = "rbAD";\r
             this.rbAD.Size = new System.Drawing.Size(84, 23);\r
             this.rbAD.TabIndex = 9;\r
             this.rbAD.UseVisualStyleBackColor = true;\r
             this.rbAD.CheckedChanged += new System.EventHandler(this.OnTypeFilterChanged);\r
             // \r
-            // tableLayoutPanelSearch\r
+            // pSearch\r
             // \r
-            this.tableLayoutPanelSearch.AutoSize = true;\r
-            this.tableLayoutPanelSearch.ColumnCount = 3;\r
-            this.tableLayoutPanelSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\r
-            this.tableLayoutPanelSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\r
-            this.tableLayoutPanelSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
-            this.tableLayoutPanelSearch.Controls.Add(this.chkProblematic, 1, 1);\r
-            this.tableLayoutPanelSearch.Controls.Add(this.flowLayoutPanel1, 0, 0);\r
-            this.tableLayoutPanelSearch.Controls.Add(this.txtFilter, 2, 1);\r
-            this.tableLayoutPanelSearch.Controls.Add(this.dtScheduled, 0, 1);\r
-            this.tableLayoutPanelSearch.Dock = System.Windows.Forms.DockStyle.Top;\r
-            this.tableLayoutPanelSearch.Location = new System.Drawing.Point(0, 0);\r
-            this.tableLayoutPanelSearch.Margin = new System.Windows.Forms.Padding(0);\r
-            this.tableLayoutPanelSearch.Name = "tableLayoutPanelSearch";\r
-            this.tableLayoutPanelSearch.RowCount = 2;\r
-            this.tableLayoutPanelSearch.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
-            this.tableLayoutPanelSearch.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
-            this.tableLayoutPanelSearch.Size = new System.Drawing.Size(363, 57);\r
-            this.tableLayoutPanelSearch.TabIndex = 10;\r
-            this.tableLayoutPanelSearch.Paint += new System.Windows.Forms.PaintEventHandler(this.tableLayoutPanelSearch_Paint);\r
+            this.pSearch.AutoSize = true;\r
+            this.pSearch.ColumnCount = 2;\r
+            this.pSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle());\r
+            this.pSearch.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));\r
+            this.pSearch.Controls.Add(this.chkProblematic, 1, 2);\r
+            this.pSearch.Controls.Add(this.pFolderType, 0, 1);\r
+            this.pSearch.Controls.Add(this.txtFilter, 0, 0);\r
+            this.pSearch.Controls.Add(this.dtScheduled, 0, 2);\r
+            this.pSearch.Dock = System.Windows.Forms.DockStyle.Top;\r
+            this.pSearch.Location = new System.Drawing.Point(0, 0);\r
+            this.pSearch.Margin = new System.Windows.Forms.Padding(0);\r
+            this.pSearch.Name = "pSearch";\r
+            this.pSearch.Padding = new System.Windows.Forms.Padding(3);\r
+            this.pSearch.RowCount = 3;\r
+            this.pSearch.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+            this.pSearch.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+            this.pSearch.RowStyles.Add(new System.Windows.Forms.RowStyle());\r
+            this.pSearch.Size = new System.Drawing.Size(300, 72);\r
+            this.pSearch.TabIndex = 10;\r
+            this.pSearch.Paint += new System.Windows.Forms.PaintEventHandler(this.tableLayoutPanelSearch_Paint);\r
             // \r
             // chkProblematic\r
             // \r
             this.chkProblematic.AutoSize = true;\r
             this.chkProblematic.Checked = true;\r
             this.chkProblematic.CheckState = System.Windows.Forms.CheckState.Checked;\r
-            this.chkProblematic.Dock = System.Windows.Forms.DockStyle.Left;\r
-            this.chkProblematic.Location = new System.Drawing.Point(102, 34);\r
+            this.chkProblematic.Location = new System.Drawing.Point(99, 50);\r
+            this.chkProblematic.Margin = new System.Windows.Forms.Padding(1, 3, 1, 1);\r
             this.chkProblematic.Name = "chkProblematic";\r
-            this.chkProblematic.Size = new System.Drawing.Size(90, 20);\r
+            this.chkProblematic.Size = new System.Drawing.Size(90, 17);\r
             this.chkProblematic.TabIndex = 7;\r
             this.chkProblematic.Text = "Missing copia";\r
             this.chkProblematic.UseVisualStyleBackColor = true;\r
             this.chkProblematic.CheckedChanged += new System.EventHandler(this.OnTypeFilterChanged);\r
             // \r
-            // pSearch\r
+            // dgTraffic\r
             // \r
-            this.pSearch.Controls.Add(this.pResults);\r
-            this.pSearch.Controls.Add(this.tableLayoutPanelSearch);\r
-            this.pSearch.Dock = System.Windows.Forms.DockStyle.Fill;\r
-            this.pSearch.Location = new System.Drawing.Point(0, 0);\r
-            this.pSearch.Name = "pSearch";\r
-            this.pSearch.Size = new System.Drawing.Size(363, 376);\r
-            this.pSearch.TabIndex = 12;\r
+            this.dgTraffic.AllowUserToAddRows = false;\r
+            this.dgTraffic.AllowUserToDeleteRows = false;\r
+            this.dgTraffic.AllowUserToOrderColumns = true;\r
+            this.dgTraffic.AllowUserToResizeRows = false;\r
+            this.dgTraffic.AutoGenerateColumns = false;\r
+            this.dgTraffic.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCells;\r
+            this.dgTraffic.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells;\r
+            this.dgTraffic.BackgroundColor = System.Drawing.Color.White;\r
+            this.dgTraffic.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
+            this.dgTraffic.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;\r
+            dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control;\r
+            dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+            dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText;\r
+            dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+            dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+            dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+            this.dgTraffic.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle7;\r
+            this.dgTraffic.DataSource = this.trafficAPIBindingSource;\r
+            dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+            dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Window;\r
+            dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);\r
+            dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.ControlText;\r
+            dataGridViewCellStyle8.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+            dataGridViewCellStyle8.SelectionForeColor = System.Drawing.Color.Black;\r
+            dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+            this.dgTraffic.DefaultCellStyle = dataGridViewCellStyle8;\r
+            this.dgTraffic.Dock = System.Windows.Forms.DockStyle.Fill;\r
+            this.dgTraffic.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
+            this.dgTraffic.EnableHeadersVisualStyles = false;\r
+            this.dgTraffic.Location = new System.Drawing.Point(0, 72);\r
+            this.dgTraffic.Margin = new System.Windows.Forms.Padding(0);\r
+            this.dgTraffic.MultiSelect = false;\r
+            this.dgTraffic.Name = "dgTraffic";\r
+            this.dgTraffic.RowHeadersVisible = false;\r
+            dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);\r
+            this.dgTraffic.RowsDefaultCellStyle = dataGridViewCellStyle9;\r
+            this.dgTraffic.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F);\r
+            this.dgTraffic.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
+            this.dgTraffic.Size = new System.Drawing.Size(300, 328);\r
+            this.dgTraffic.TabIndex = 0;\r
+            this.dgTraffic.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellContentClick);\r
+            this.dgTraffic.CellDoubleClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellDoubleClick);\r
+            this.dgTraffic.KeyDown += new System.Windows.Forms.KeyEventHandler(this.OnDataGridKeyDown);\r
+            // \r
+            // pSeparator\r
+            // \r
+            this.pSeparator.BackColor = System.Drawing.Color.White;\r
+            this.pSeparator.Dock = System.Windows.Forms.DockStyle.Top;\r
+            this.pSeparator.Location = new System.Drawing.Point(0, 72);\r
+            this.pSeparator.Name = "pSeparator";\r
+            this.pSeparator.Size = new System.Drawing.Size(300, 6);\r
+            this.pSeparator.TabIndex = 13;\r
             // \r
             // TrafficIDSelector\r
             // \r
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\r
             this.AutoSize = true;\r
             this.BackColor = System.Drawing.Color.White;\r
+            this.Controls.Add(this.pSeparator);\r
+            this.Controls.Add(this.dgTraffic);\r
             this.Controls.Add(this.pSearch);\r
             this.Name = "TrafficIDSelector";\r
-            this.Size = new System.Drawing.Size(363, 376);\r
-            this.pResults.ResumeLayout(false);\r
-            ((System.ComponentModel.ISupportInitialize)(this.dgTraffic)).EndInit();\r
+            this.Size = new System.Drawing.Size(300, 400);\r
             ((System.ComponentModel.ISupportInitialize)(this.trafficAPIBindingSource)).EndInit();\r
-            this.flowLayoutPanel1.ResumeLayout(false);\r
-            this.flowLayoutPanel1.PerformLayout();\r
-            this.tableLayoutPanelSearch.ResumeLayout(false);\r
-            this.tableLayoutPanelSearch.PerformLayout();\r
+            this.pFolderType.ResumeLayout(false);\r
+            this.pFolderType.PerformLayout();\r
             this.pSearch.ResumeLayout(false);\r
             this.pSearch.PerformLayout();\r
+            ((System.ComponentModel.ISupportInitialize)(this.dgTraffic)).EndInit();\r
             this.ResumeLayout(false);\r
+            this.PerformLayout();\r
 \r
         }\r
 \r
         #endregion\r
         private System.Windows.Forms.BindingSource trafficAPIBindingSource;\r
-        private System.Windows.Forms.Panel pResults;\r
         private System.Windows.Forms.DateTimePicker dtScheduled;\r
         private System.Windows.Forms.TextBox txtFilter;\r
-        private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;\r
-        private System.Windows.Forms.TableLayoutPanel tableLayoutPanelSearch;\r
+        private System.Windows.Forms.FlowLayoutPanel pFolderType;\r
+        private System.Windows.Forms.TableLayoutPanel pSearch;\r
         private System.Windows.Forms.RadioButton rbMaterial;\r
         private System.Windows.Forms.RadioButton rbPromo;\r
         private System.Windows.Forms.RadioButton rbAD;\r
-        private System.Windows.Forms.Panel pSearch;\r
-        private System.Windows.Forms.DataGridView dgTraffic;\r
         private System.Windows.Forms.CheckBox chkProblematic;\r
-        private System.ComponentModel.BackgroundWorker backgroundWorker1;\r
+        private System.Windows.Forms.DataGridView dgTraffic;\r
+        private System.Windows.Forms.Panel pSeparator;\r
     }\r
 }\r
index 397175afb429562fe47a48ff5c49ea0074c5aa0a..169c0fbccdceb4f2f43814e479fb40ae181498ec 100644 (file)
@@ -136,9 +136,7 @@ namespace TrafficClient {
         }\r
 \r
         private void tableLayoutPanelSearch_Paint(object sender, PaintEventArgs e) {\r
-            var rectangle = e.ClipRectangle;\r
-            //ControlPaint.DrawBorder3D(e.Graphics, rectangle, Border3DStyle.Raised, Border3DSide.All);\r
-            ControlPaint.DrawBorder(e.Graphics, rectangle, Color.LightGray, ButtonBorderStyle.Solid); // dotted border\r
+            ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.LightGray, ButtonBorderStyle.Solid); // dotted border\r
         }\r
     }\r
 \r
index 56cdd44b8e5618365315cc35ea6750da975cb557..ffb63740f92a29473c9ef099f1febcdbff912b56 100644 (file)
   <metadata name="trafficAPIBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
     <value>34, 18</value>\r
   </metadata>\r
-  <metadata name="backgroundWorker1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
-    <value>214, 18</value>\r
-  </metadata>\r
 </root>
\ No newline at end of file
index 6b2336b59a4e6c6ad587d82814ff0838a7786c40..9e0ab538c2542ad8fe7fc576ed7a5f48c06d9b7f 100644 (file)
                <Logger name="org.quartz" level="ERROR" additivity="false" />\r
                <Logger name="org.eclipse.jetty.osgi.boot" level="ERROR" additivity="false" />\r
 \r
-               <logger name="org.jboss.resteasy.core" level="debug" />\r
-               <logger name="org.jboss.resteasy.specimpl" level="debug" />\r
-               <logger name="org.jboss.resteasy.plugins.server" level="debug" />\r
-               <logger name="org.jboss.resteasy.plugins.providers" level="debug" />\r
+<!--           <logger name="org.jboss.resteasy.core" level="debug" /> -->\r
+<!--           <logger name="org.jboss.resteasy.specimpl" level="debug" /> -->\r
+<!--           <logger name="org.jboss.resteasy.plugins.server" level="debug" /> -->\r
+<!--           <logger name="org.jboss.resteasy.plugins.providers" level="debug" /> -->\r
                <logger name="user.commons.nexio" level="debug" />\r
        </Loggers>\r
 </Configuration>
\ No newline at end of file
index 52abb4182786dfc4b6809b075f646b7edde47c50..63f6235b6e3005978cb85b2ae069338ba07d207b 100644 (file)
@@ -32,7 +32,7 @@
                        <Filters>\r
                                <MarkerFilter marker="MEDIACUBE" onMatch="DENY" onMismatch="NEUTRAL" />\r
                        </Filters>\r
-                       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5level] [%t] [%M] [%class{36}] %msg%n %throwable{short}" />\r
+                       <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg%n %throwable" />\r
                        <Policies>\r
                                <TimeBasedTriggeringPolicy />\r
                        </Policies>\r
                        <Filters>\r
                                <MarkerFilter marker="MEDIACUBE" onMatch="DENY" onMismatch="NEUTRAL" />\r
                        </Filters>\r
-                       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5level] [%t] [%M] [%class{36}] %msg%n %throwable{short}" />\r
+                       <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M %msg%n %throwable" />\r
                        <Policies>\r
                                <TimeBasedTriggeringPolicy />\r
                        </Policies>\r
                </RollingFile>\r
                <RollingFile name="RollingFileExceptions" fileName="${fileName.err}" filePattern="${filePattern.err}">\r
-                       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%-5level] [%t] [%M] [%class{36}] %msg%n %throwable{full}" />\r
+                       <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{1}.%M - %markerSimpleName - %msg%n %throwable" />\r
                        <Filters>\r
                                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />\r
                        </Filters>\r
                <Logger name="org.quartz" level="ERROR" additivity="false" />\r
                <Logger name="org.eclipse.jetty.osgi.boot" level="ERROR" additivity="false" />\r
 \r
-               <logger name="org.jboss.resteasy.core" level="debug" />\r
-               <logger name="org.jboss.resteasy.specimpl" level="debug" />\r
-               <logger name="org.jboss.resteasy.plugins.server" level="debug" />\r
-               <logger name="org.jboss.resteasy.plugins.providers" level="debug" />\r
+<!--           <logger name="org.jboss.resteasy.core" level="debug" /> -->\r
+<!--           <logger name="org.jboss.resteasy.specimpl" level="debug" /> -->\r
+<!--           <logger name="org.jboss.resteasy.plugins.server" level="debug" /> -->\r
+<!--           <logger name="org.jboss.resteasy.plugins.providers" level="debug" /> -->\r
 <!--           <logger name="user.commons.nexio" level="debug" /> -->\r
        </Loggers>\r
 </Configuration>
\ No newline at end of file
index d8f53d84bd1e2541d87a0c638f862d3eb6e5199d..8e7050e8fc09a5741d8e7f681686e7250efa217a 100644 (file)
                                                                <resource>\r
                                                                        <directory>${basedir}/../-configuration</directory>\r
                                                                        <includes>\r
-                                                                               <include>scheduledjobs.json</include>\r
                                                                                <include>dsm.opt</include>\r
                                                                        </includes>\r
                                                                </resource>\r
+                                                               <resource>\r
+                                                                       <directory>${basedir}/../user.jobengine.executors/config</directory>\r
+                                                                       <includes>\r
+                                                                               <include>scheduledjobs.json</include>\r
+                                                                       </includes>\r
+                                                               </resource>\r
                                                                <resource>\r
                                                                        <directory>${basedir}</directory>\r
                                                                        <includes>\r
                                                                <resource>\r
                                                                        <directory>${basedir}/../-configuration</directory>\r
                                                                        <includes>\r
-                                                                               <include>scheduledjobs.json</include>\r
                                                                                <include>dsm.opt</include>\r
                                                                        </includes>\r
                                                                </resource>\r
+                                                               <resource>\r
+                                                                       <directory>${basedir}/../user.jobengine.executors/config</directory>\r
+                                                                       <includes>\r
+                                                                               <include>scheduledjobs.json</include>\r
+                                                                       </includes>\r
+                                                               </resource>\r
                                                                <resource>\r
                                                                        <directory>${basedir}</directory>\r
                                                                        <includes>\r
                                                        <resources>\r
                                                                <resource>\r
                                                                        <directory>${basedir}/../user.jobengine.executors/config</directory>\r
+                                                                       <includes>\r
+                                                                               <include>config.xml</include>\r
+                                                                       </includes>\r
                                                                </resource>\r
                                                        </resources>\r
                                                </configuration>\r
                                                        <resources>\r
                                                                <resource>\r
                                                                        <directory>${basedir}/../user.jobengine.executors/config</directory>\r
+                                                                       <includes>\r
+                                                                               <include>config.xml</include>\r
+                                                                       </includes>\r
                                                                </resource>\r
                                                        </resources>\r
                                                </configuration>\r
index 3b28b6bc25355a3946d0a49691a0eb7613b479f5..a460ac632720ebccc80f62857a8de6489ac27e22 100644 (file)
          "name" : "OCTOPUS adatok szinkronizálása",\r
       "template": "sync-octopus.xml",\r
       "executeimmediate": true,\r
-      "cronexpression": "0 0/1 * * * ?"\r
+      "cronexpression": "0 0/1 * * * ?",\r
+      "parameters": [\r
+       {"name": "forceFull", "value": false, "type": "java.lang.Boolean"}\r
+      ]\r
+       },      \r
+       {\r
+      "active": false,\r
+         "name" : "OCTOPUS adatok teljes szinkronizálása",\r
+      "template": "sync-octopus.xml",\r
+      "executeimmediate": false,\r
+      "cronexpression": "#0 0/1 * * * ?",\r
+      "parameters": [\r
+       {"name": "forceFull", "value": true, "type": "java.lang.Boolean"}\r
+      ]\r
        },      \r
        {\r
       "active": false,\r
index 8a6d0b12cb30d253d5f329d6c3e773c69c6718a8..63c50a3b69c45ed3c3aa81318ae09773884109b2 100644 (file)
@@ -1,6 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <jobtemplate name="OCTOPUS adatok szinkronizálása">\r
+       <declarations>\r
+               <parameters>\r
+                       <parameter name="forceFull" type="java.lang.Boolean" />\r
+               </parameters>\r
+       </declarations>\r
        <commands>\r
-               <calljobstep id="id1" type="user.jobengine.server.steps.SyncOCTOPUSDataStep" weight="1" />\r
+               <calljobstep id="id1" type="user.jobengine.server.steps.SyncOCTOPUSDataStep" weight="1">\r
+                       <inputs>\r
+                               <input>\r
+                                       <parameter name="forceFull" />\r
+                               </input>\r
+                       </inputs>\r
+               </calljobstep>\r
        </commands>\r
 </jobtemplate>
\ No newline at end of file
index 75f3fe0936d88e0e695e78b183973b2a5ffd2ec9..4753075aec9e61f7c6a067f9cacf7625bafd24e1 100644 (file)
@@ -24,13 +24,13 @@ public class SyncOCTOPUSDataStep extends JobStep {
        }\r
 \r
        @StepEntry\r
-       public Object[] execute(IJobEngine jobEngine, final IJobRuntime jobRuntime) {\r
+       public Object[] execute(boolean forceFull, IJobEngine jobEngine, final IJobRuntime jobRuntime) {\r
                OctopusDataMiner dataMiner = null;\r
                try {\r
                        progressListener = createListener(jobRuntime);\r
                        dataMiner = new OctopusDataMiner();\r
                        dataMiner.addProgressListener(progressListener);\r
-                       dataMiner.run();\r
+                       dataMiner.run(forceFull);\r
                } catch (Exception e) {\r
                        logger.catching(e);\r
                        throw e;\r
index 844f5e6875ac6ddef5f0cf643a7bb7682c706f1c..fb11e316f1b66130c437a9285b74fdf27987792a 100644 (file)
@@ -62,7 +62,7 @@ public class OctopusDataMiner implements Runnable {
        private static final String STORY = "story";\r
        private static final String SCHEDULED_START = "scheduledStart";\r
        private static final String SLUGS = "slugs";\r
-       private static final String CHECKING_RUNDOWN_S_D_D = "Checking Rundown %s (%d/%d)";\r
+       private static final String CHECKING_RUNDOWN = "Checking Rundown %s (%d/%d)";\r
        private static final String FIELDS_STORIES = "stories,Story.modified,Story.name,Story.id,Story.mosObjects,Story.script,Story.type,Story.format,customColumns,CustomColumn.label,CustomColumn.value";\r
        private static final String FIELDS_SLUGS = "slugs,Slug.story,Slug.position,Story.name,Story.id,Story.modified,Story.mosObjects,Story.script,Story.type,Story.format,Story.customColumns,CustomColumn.label,CustomColumn.value";\r
        private static final String RUNDOWN = "Rundown";\r
@@ -74,7 +74,7 @@ public class OctopusDataMiner implements Runnable {
        private static final String MODIFIED = "modified";\r
        private static final String STORIES = "stories";\r
        private static final String ID = "id";\r
-       private static final String CHECKING_STORY_FOLDER_S_D_D = "Checking StoryFolder %s (%d/%d)";\r
+       private static final String CHECKING_STORY_FOLDER = "Checking StoryFolder %s (%d/%d)";\r
        private static final String EXIT = "Exit";\r
        private static final String RESULT = "result";\r
        private static final String STORY_FOLDER = "StoryFolder";\r
@@ -162,7 +162,6 @@ public class OctopusDataMiner implements Runnable {
                DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
                DBCursor cursor = collection.find(null, new BasicDBObject(ID, 1).append(REF_RUNDOWN, 1).append(REF_STORYFOLDER, 1));\r
                //DBCursor find = collection.find(QueryBuilder.start(ID).greaterThan(0).get());\r
-               List<DBObject> stories = null;\r
                try {\r
 \r
                        while (cursor.hasNext()) {\r
@@ -472,7 +471,6 @@ public class OctopusDataMiner implements Runnable {
 \r
                        BasicDBList rundowns = queryRundowns();\r
                        storyRundowns = buildRundownReferences(rundowns);\r
-\r
                        BasicDBList storyFolders = queryStoryFolders();\r
                        storyStoryFolders = buildStoryFolderReferences(storyFolders);\r
 \r
@@ -497,74 +495,11 @@ public class OctopusDataMiner implements Runnable {
                logger.trace(FINISHED);\r
        }\r
 \r
-       // private void insertStoryFoldersToDB2() {\r
-       // DBCollection collection = db.getCollection(STORY_FOLDER_COLLECTION_NAME);\r
-       // Set<String> storyKeys = storyFolders.keySet();\r
-       // for (String key : storyKeys) {\r
-       // BasicDBObject object = (BasicDBObject) storyFolders.get(key);\r
-       // BasicDBObject stories = (BasicDBObject) object.get("stories");\r
-       // object.remove("stories");\r
-       // if (stories.containsKey("id")) {\r
-       // long storyId = stories.getLong("id");\r
-       // storyObjects.append(String.format("%d", storyId), stories);\r
-       // }\r
-       // collection.insert(object);\r
-       // }\r
-       // }\r
-       //\r
-       // private void getStoriesFromParent(BasicDBObject object) {\r
-       // try {\r
-       // BasicDBObject stories = (BasicDBObject) object.get("stories");\r
-       // object.remove("stories");\r
-       // Set<String> subKeys = stories.keySet();\r
-       // for (String string : subKeys) {\r
-       // BasicDBObject s = (BasicDBObject) stories.get(string);\r
-       // long storyId = s.getLong("id");\r
-       // storyObjects.append(String.format("%d", storyId), s);\r
-       // }\r
-       // } catch (Exception e) {\r
-       // System.out.println(e.getMessage());\r
-       // }\r
-       // }\r
-       //\r
-       // private void insertRundownsToDB2() {\r
-       // DBCollection collection = db.getCollection(RUNDOWN_COLLECTION_NAME);\r
-       // Set<String> rundownKeys = rundownDBObjects.keySet();\r
-       // for (String key : rundownKeys) {\r
-       // BasicDBObject object = (BasicDBObject) rundownDBObjects.get(key);\r
-       // getStoriesFromParent(object);\r
-       // collection.insert(object);\r
-       // }\r
-       // }\r
-       //\r
-       // private void insertStoriesToDB2() {\r
-       // DBCollection collection = db.getCollection(STORY_COLLECTION_NAME);\r
-       // Set<String> storyKeys = storyObjects.keySet();\r
-       // for (String key : storyKeys) {\r
-       // BasicDBObject object = (BasicDBObject) storyObjects.get(key);\r
-       // collection.insert(object);\r
-       // }\r
-       // }\r
-       //\r
-       // @SuppressWarnings("unchecked")\r
-       // private void setStoryFolders() {\r
-       // IConverter converter = new Converter();\r
-       // converter.addDeserializer(BasicDBObject.class, new\r
-       // StoryFolderDeserializable());\r
-       // String result = null;\r
-       // JerseyWebTarget storyFolderwebTarget =\r
-       // client.target(address).path("StoryFolder");\r
-       // JerseyWebTarget target = storyFolderwebTarget.queryParam("fields",\r
-       // "id,name,modified,stories,Story.name,Story.id,Story.modified,Story.scriptXml,Story.type");\r
-       // JerseyInvocation.Builder builder = target\r
-       // .request(\r
-       // "?fields=id,name,modified,stories,Story.name,Story.id,Story.modified,Story.scriptXml,Story.type")\r
-       // .header("Octopus-Device-Id", user).header("Octopus-Device-Name", pwd);\r
-       // Response response = builder.get();\r
-       // result = response.readEntity(String.class);\r
-       // result = replaceString(result, RESULT_STARTER_STRING);\r
-       // storyFolders = converter.convertBasicDBObjectFromJson(result);\r
-       // }\r
+       public void run(boolean forceFull) {\r
+               if (forceFull)\r
+                       clear();\r
+               run();\r
+       }\r
 \r
        public void setLastUpdateTime(Date lastUpdateTime) {\r
                DBCollection collection = db.getCollection(OctopusAPI.TIME_COLLECTION_NAME);\r
@@ -600,7 +535,7 @@ public class OctopusDataMiner implements Runnable {
                List<BasicDBObject> rundownsList = NoSQLUtils.asList(rundowns);\r
                int idx = 1;\r
                for (BasicDBObject rundown : rundownsList) {\r
-                       logger.debug(String.format(CHECKING_RUNDOWN_S_D_D, rundown.getLong(ID), rundownsList.size(), idx));\r
+                       logger.debug(String.format(CHECKING_RUNDOWN, rundown.getLong(ID), rundownsList.size(), idx));\r
                        storeRundown(rundown, lastUpdateTime);\r
                        int progress = idx * 50 / rundownsList.size();\r
                        if (progress - progressEvent.getProgress() > 0) {\r
@@ -702,7 +637,7 @@ public class OctopusDataMiner implements Runnable {
                List<BasicDBObject> storyFolderList = NoSQLUtils.asList(storyFolders);\r
                int idx = 1;\r
                for (BasicDBObject storyFolder : storyFolderList) {\r
-                       logger.debug(String.format(CHECKING_STORY_FOLDER_S_D_D, storyFolder.getLong(ID), storyFolderList.size(), idx));\r
+                       logger.debug(String.format(CHECKING_STORY_FOLDER, storyFolder.getLong(ID), storyFolderList.size(), idx));\r
                        storeStoryFolder(storyFolder, lastUpdateTime);\r
                        int progress = 50 + (idx * 50 / storyFolderList.size());\r
                        if (progress - progressEvent.getProgress() > 0) {\r
index 5f543d8bd7134f600fc34ddabcd6894e6e713c2b..e8b5abb9593526b2101620ef29ae067423bfae73 100644 (file)
@@ -37,9 +37,9 @@
                                        onSelect="@command('selectJob')" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style" >\r
                                       <listhead sizable="true">\r
                                        <listheader label="Id" hflex="min" align="left"/>\r
-                                       <listheader label="Name" hflex="min" align="left"/>\r
+                                       <listheader label="Name" hflex="300px" align="left"/>\r
                                        <listheader label="Priority" hflex="min" align="left"/>\r
-                                       <listheader label="Status" hflex="min" align="left"/>\r
+                                       <listheader label="Status" hflex="100px" align="left"/>\r
                                        <listheader label="Progress" width="200px" align="left"/>\r
                                        <listheader label="Message" align="left"/>\r
                                       </listhead>\r
index 9e794f6ec87fbcdf91a4daa07bcf024ca8731e35..3572bf2fd971cea70442d315434906c7599df690 100644 (file)
@@ -11,7 +11,7 @@
            </listitem>\r
        </template>\r
        </listbox>\r
-    <hbox width="100%" pack="tight">\r
+    <hbox width="100%" pack="end">\r
         <button id="closeButton" label="Mégsem" onClick="@command('close')" />\r
         <button id="executeButton" label="Futtatás" onClick="@command('execute')" />\r
     </hbox>\r
index fc982460ad3eea9159d4c8297e9e3a32e2ddc236..8e0249575c24846c84e900c2a30b6a7770d6a349 100644 (file)
@@ -16,7 +16,7 @@
                        </row>\r
                </rows>\r
        </grid>\r
-       <hbox width="100%" pack="right">\r
+       <hbox width="100%" pack="end">\r
         <button id="closeButton" label="Mégsem" onClick="@command('close')" />\r
         <button id="executeButton" label="Végrehajtás" onClick="@command('execute')" />\r
     </hbox>\r
index e2ee6cf23f9723c1d0913740b78e47fd3b94c85d..767efc0715e739b7b5b7dc8faf73c471d24808cf 100644 (file)
@@ -129,6 +129,7 @@ public class JobEngine implements IJobEngine {
        public static final String TEMPLATEROOT = "jobengine.jobtemplates.root";
        public static final String STEPSROOT = "jobengine.jobsteps.root";
        public static final String STEPSALTERNATEROOT = "jobengine.jobsteps.alternate.root";
+       private static final String EXECUTORCONFIGFILE = "config.xml";
        static private IItemManager itemManager;
        private static IJobEngine instance;
 
@@ -140,8 +141,6 @@ public class JobEngine implements IJobEngine {
                return itemManager;
        }
 
-       private final String STEPROOT = "jobengine.jobsteps.root";
-       private final String EXECUTORCONFIGFILE = "config.xml";
        private volatile boolean shutdown = false;
        private final BlockingQueue<IJobRuntime> runQueue;
        private final BlockingQueue<IJobMessage> messageQueue;
@@ -446,7 +445,7 @@ public class JobEngine implements IJobEngine {
                        // String configFile =
                        // DirectoryUtils.checkEndSlash(System.getProperty(STEPROOT)) +
                        // EXECUTORCONFIGFILE;
-                       String stepRoot = DirectoryUtils.normalize(System.getProperty(STEPROOT), File.separator);
+                       String stepRoot = DirectoryUtils.normalize(System.getProperty(STEPSROOT), File.separator);
                        String stepsAlternateRoot = DirectoryUtils.normalize(System.getProperty(STEPSALTERNATEROOT), File.separator);
                        String configFile = DirectoryUtils.combine(stepRoot, EXECUTORCONFIGFILE, true, true);
                        logger.info("Loading executors based on configuration: " + configFile);
index b834f20070608c9849dc75b44bb97e79dd9079b9..a90e61fe9a7e2cfe3c7064a07e8496158e5b8c84 100644 (file)
@@ -15,37 +15,21 @@ import user.jobengine.server.IJobEngine;
 import user.jobengine.server.IJobRuntime;\r
 \r
 /**\r
- * JobRuntime-ot reprezental, template nev alapjan\r
- * kulonbozteti meg oket a quartz.\r
+ * JobRuntime-ot reprezental, template nev alapjan kulonbozteti meg oket a quartz.\r
  */\r
 @DisallowConcurrentExecution\r
 public class ScheduledJob extends NativeJob { //implements InterruptableJob{\r
        private static final Logger logger = LogManager.getLogger();\r
+       public final static String JOB_SERVICE_INSTANCE = "jobServiceInstance";\r
+       private String jobId;\r
        private String jobName = null;\r
        private String templateName = null;\r
        private String cronExpressions = null;\r
        private boolean executeOnStartup = true;\r
        private boolean active = true;\r
        private IJobEngine jobEngine = null;\r
-       private Map<String, Object> jobParameters = new HashMap<String, Object>();\r
-\r
-       public final static String JOB_SERVICE_INSTANCE = "jobServiceInstance";\r
-\r
-       public String getCronExpressions() {\r
-               return cronExpressions;\r
-       }\r
 \r
-       public void setCronExpressions(String cronExpressions) {\r
-               this.cronExpressions = cronExpressions;\r
-       }\r
-\r
-       public boolean isExecuteOnStartup() {\r
-               return executeOnStartup;\r
-       }\r
-\r
-       public void setExecuteOnStartup(boolean executeOnStartup) {\r
-               this.executeOnStartup = executeOnStartup;\r
-       }\r
+       private Map<String, Object> jobParameters = new HashMap<String, Object>();\r
 \r
        public void doJob() {\r
                try {\r
@@ -65,32 +49,24 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
                }\r
        }\r
 \r
-       public IJobEngine getJobEngine() {\r
-               return jobEngine;\r
-       }\r
-\r
-       public void setJobEngine(IJobEngine jobEngine) {\r
-               this.jobEngine = jobEngine;\r
-       }\r
-\r
-       public String getTemplateName() {\r
-               return templateName;\r
+       public String getCronExpressions() {\r
+               return cronExpressions;\r
        }\r
 \r
-       public void setTemplateName(String templateName) {\r
-               this.templateName = templateName;\r
+       public IJobEngine getJobEngine() {\r
+               return jobEngine;\r
        }\r
 \r
-       public void setJobParameter(String name, Object value) {\r
-               this.jobParameters.put(name, value);\r
+       public String getJobId() {\r
+               return jobId;\r
        }\r
 \r
        public String getJobName() {\r
                return jobName;\r
        }\r
 \r
-       public void setJobName(String jobName) {\r
-               this.jobName = jobName;\r
+       public String getTemplateName() {\r
+               return templateName;\r
        }\r
 \r
        /**\r
@@ -100,11 +76,48 @@ public class ScheduledJob extends NativeJob { //implements InterruptableJob{
                return active;\r
        }\r
 \r
+       public boolean isExecuteOnStartup() {\r
+               return executeOnStartup;\r
+       }\r
+\r
        /**\r
-        * @param active the active to set\r
+        * @param active\r
+        *            the active to set\r
         */\r
        public void setActive(boolean active) {\r
                this.active = active;\r
        }\r
 \r
+       public void setCronExpressions(String cronExpressions) {\r
+               this.cronExpressions = cronExpressions;\r
+       }\r
+\r
+       public void setExecuteOnStartup(boolean executeOnStartup) {\r
+               this.executeOnStartup = executeOnStartup;\r
+       }\r
+\r
+       public void setJobEngine(IJobEngine jobEngine) {\r
+               this.jobEngine = jobEngine;\r
+       }\r
+\r
+       public void setJobId(String jobId) {\r
+               this.jobId = jobId;\r
+       }\r
+\r
+       public void setJobName(String jobName) {\r
+               this.jobName = jobName;\r
+       }\r
+\r
+       public void setJobParameter(String name, Object value) {\r
+               this.jobParameters.put(name, value);\r
+       }\r
+\r
+       public void setTemplateName(String templateName) {\r
+               this.templateName = templateName;\r
+       }\r
+\r
+       @Override\r
+       public String toString() {\r
+               return String.format("job { id: %s, template: %s, name %s }", jobId, templateName, jobName);\r
+       }\r
 }\r
index 206ad68822bc3836a17758402071176364225198..f5a51225985ae3d639e9bed19d790afcf65e3c3c 100644 (file)
@@ -42,10 +42,17 @@ public class SchedulerService {
        private static final String COMMENT = "#";\r
        private static final Logger logger = LogManager.getLogger();\r
        private static final String CRON_EXPRESSIONS_DELIMITER = ";";\r
+\r
+       public static Object parseObjectFromString(String s, Class<?> clazz) throws Exception {\r
+               return clazz.getConstructor(new Class[] { String.class }).newInstance(s);\r
+       }\r
+\r
        private Scheduler scheduler = null;\r
        private IJobEngine jobEngine = null;\r
        private BasicDBList scheduleJobs;\r
 \r
+       private int schedulerJobId;\r
+\r
        public SchedulerService(IJobEngine jobEngine) throws Exception {\r
                // http://www.quartz-scheduler.org/documentation/quartz-2.2.x/configuration/\r
                // https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm\r
@@ -53,37 +60,9 @@ public class SchedulerService {
                scheduler = StdSchedulerFactory.getDefaultScheduler();\r
        }\r
 \r
-       /**\r
-        * Elore konfiguralt, idozitett (serice) jobok inditasa\r
-        * @throws Exception\r
-        */\r
-       private void loadStartupJobsFromConfig() throws Exception {\r
-               String configPath = System.getProperty("jobengine.jobscheduling.config");\r
-               if (configPath == null || "".equals(configPath)) {\r
-                       throw new Exception(\r
-                                       "Error in SchedulerService.loadStartupJobsFromConfig() configfile not set in system properties: 'jobengine.jobscheduling.config'");\r
-               }\r
-               File schedulingConfigFile = new File(configPath);\r
-               if (schedulingConfigFile.exists()) {\r
-                       String jsonConfig = new String(Files.readAllBytes(Paths.get(schedulingConfigFile.getAbsolutePath())));\r
-                       BasicDBObject dbo = (BasicDBObject) JSONUtil.jsonToDbObject(jsonConfig);\r
-                       scheduleJobs = (BasicDBList) dbo.get("joblist");\r
-                       for (int c = 0; c < scheduleJobs.size(); c++) {\r
-                               BasicDBObject sjob = (BasicDBObject) scheduleJobs.get(c);\r
-                               ScheduledJob sj = createScheduledJobd(sjob);\r
-                               //skip inactive jobs\r
-                               if (!sj.isActive())\r
-                                       continue;\r
-                               schedule(sj);\r
-                       }\r
-               } else {\r
-                       logger.error("Error in SchedulerService.loadStartupJobsFromConfig() configfile not found: "\r
-                                       + schedulingConfigFile.getAbsolutePath());\r
-               }\r
-       }\r
-\r
-       public ScheduledJob createScheduledJobd(BasicDBObject jobJSON) {\r
+       public ScheduledJob createScheduledJob(BasicDBObject jobJSON) {\r
                ScheduledJob sj = new ScheduledJob();\r
+               sj.setJobId(String.valueOf(++schedulerJobId));\r
                sj.setJobName(jobJSON.getString("name"));\r
                sj.setTemplateName(jobJSON.getString("template"));\r
                sj.setCronExpressions(jobJSON.getString("cronexpression"));\r
@@ -108,28 +87,9 @@ public class SchedulerService {
                return sj;\r
        }\r
 \r
-       public static Object parseObjectFromString(String s, Class<?> clazz) throws Exception {\r
-               return clazz.getConstructor(new Class[] { String.class }).newInstance(s);\r
-       }\r
-\r
-       public void schedule(ScheduledJob job) {\r
-               job.setJobEngine(jobEngine);\r
-               String jobID = job.getTemplateName();\r
-               try {\r
-                       register(job);\r
-                       if (job.isExecuteOnStartup())\r
-                               scheduleImmediate(jobID);\r
-\r
-                       List<String> cronExpressions = getCronExpressions(job);\r
-                       if (cronExpressions != null && cronExpressions.size() > 0)\r
-                               scheduleCronExpressions(jobID, cronExpressions);\r
-               } catch (SchedulerException e) {\r
-                       logger.error("Scheduled job registration error: ", e);\r
-               }\r
-       }\r
-\r
        /**\r
         * Regisztralt jobok azonnali futtatasa.\r
+        *\r
         * @param jobID\r
         * @throws InterruptedException\r
         * @throws SchedulerException\r
@@ -154,8 +114,7 @@ public class SchedulerService {
                        }\r
 \r
                        @Override\r
-                       public void jobWasExecuted(JobExecutionContext paramJobExecutionContext,\r
-                                       JobExecutionException paramJobExecutionException) {\r
+                       public void jobWasExecuted(JobExecutionContext paramJobExecutionContext, JobExecutionException paramJobExecutionException) {\r
                                listenerManager.removeJobListener(listenerName);\r
                        }\r
                };\r
@@ -177,6 +136,10 @@ public class SchedulerService {
                return result;\r
        }\r
 \r
+       public BasicDBList getScheduleJobs() {\r
+               return scheduleJobs;\r
+       }\r
+\r
        private void interruptJobs(List<JobExecutionContext> jobs) throws UnableToInterruptJobException {\r
                for (JobExecutionContext context : jobs) {\r
                        String instanceID = context.getFireInstanceId();\r
@@ -185,19 +148,61 @@ public class SchedulerService {
                }\r
        }\r
 \r
+       /**\r
+        * Elore konfiguralt, idozitett (serice) jobok inditasa\r
+        *\r
+        * @throws Exception\r
+        */\r
+       private void loadStartupJobsFromConfig() throws Exception {\r
+               String configPath = System.getProperty("jobengine.jobscheduling.config");\r
+               if (configPath == null || "".equals(configPath))\r
+                       throw new Exception("Missing system property: 'jobengine.jobscheduling.config'");\r
+               File schedulingConfigFile = new File(configPath);\r
+               if (schedulingConfigFile.exists()) {\r
+                       String jsonConfig = new String(Files.readAllBytes(Paths.get(schedulingConfigFile.getAbsolutePath())));\r
+                       BasicDBObject dbo = (BasicDBObject) JSONUtil.jsonToDbObject(jsonConfig);\r
+                       scheduleJobs = (BasicDBList) dbo.get("joblist");\r
+                       for (int c = 0; c < scheduleJobs.size(); c++) {\r
+                               BasicDBObject sjob = (BasicDBObject) scheduleJobs.get(c);\r
+                               ScheduledJob sj = null;\r
+                               try {\r
+                                       sj = createScheduledJob(sjob);\r
+                               } catch (Exception e) {\r
+                                       logger.error("Error creating job: {}", sj);\r
+                               }\r
+                               //skip inactive jobs\r
+                               if (!sj.isActive())\r
+                                       continue;\r
+                               schedule(sj);\r
+                       }\r
+               } else {\r
+                       logger.error("Missing '{}' configuration file: {}", configPath, schedulingConfigFile.getAbsolutePath());\r
+               }\r
+       }\r
+\r
        public void register(ScheduledJob job) throws SchedulerException {\r
-               String jobID = job.getTemplateName();\r
-               //              JobKey jobKey = JobKey.jobKey(jobID);\r
-               //              Set<JobKey> jobKeys = scheduler.getJobKeys(GroupMatcher.anyJobGroup());\r
-               //              if (scheduler.getJobDetail(jobKey) != null) {\r
-               //                      logger.info("Job '{}' already registered in scheduler", jobID);\r
-               //                      return;\r
-               //              }\r
+               String jobID = job.getJobId();\r
                JobDataMap jobDataMap = new JobDataMap();\r
                jobDataMap.put(ScheduledJob.JOB_SERVICE_INSTANCE, job);\r
                JobDetail jobDetail = JobBuilder.newJob(ScheduledJob.class).withIdentity(jobID).setJobData(jobDataMap).build();\r
                scheduler.addJob(jobDetail, false, true);\r
-               logger.info("Job '{}' is successfully registered in scheduler", jobID);\r
+               logger.info("Job {} is successfully registered in scheduler", job);\r
+       }\r
+\r
+       public void schedule(ScheduledJob job) {\r
+               job.setJobEngine(jobEngine);\r
+               String jobID = job.getJobId();\r
+               try {\r
+                       register(job);\r
+                       if (job.isExecuteOnStartup())\r
+                               scheduleImmediate(jobID);\r
+\r
+                       List<String> cronExpressions = getCronExpressions(job);\r
+                       if (cronExpressions != null && cronExpressions.size() > 0)\r
+                               scheduleCronExpressions(jobID, cronExpressions);\r
+               } catch (SchedulerException e) {\r
+                       logger.error("Scheduled job registration error: ", e);\r
+               }\r
        }\r
 \r
        private void scheduleCronExpressions(String jobID, List<String> cronExpressions) {\r
@@ -209,15 +214,13 @@ public class SchedulerService {
                                        continue;\r
                                }\r
                                if (trimmedCronExpression.startsWith(COMMENT)) {\r
-                                       logger.info("Skipping # inactive cron expression based schedule for job {} using expression {}",\r
-                                                       jobID, trimmedCronExpression);\r
+                                       logger.info("Skipping # inactive cron expression based schedule for job {} using expression {}", jobID, trimmedCronExpression);\r
                                        continue;\r
                                }\r
                                CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(trimmedCronExpression);\r
                                CronTrigger trigger = TriggerBuilder.newTrigger().forJob(jobID).withSchedule(scheduleBuilder).build();\r
                                scheduler.scheduleJob(trigger);\r
-                               logger.info("Successfull cron expression based schedule for job {} using expression {}", jobID,\r
-                                               trimmedCronExpression);\r
+                               logger.info("Successfull cron expression based schedule for job {} using expression {}", jobID, trimmedCronExpression);\r
                        } catch (Exception e) {\r
                                logger.error("Cron schedule error: ", e);\r
                        }\r
@@ -253,14 +256,10 @@ public class SchedulerService {
 \r
        public void unregisterJob(ScheduledJob job) throws SchedulerException {\r
                if (scheduler != null && !scheduler.isShutdown()) {\r
-                       JobKey jobKey = JobKey.jobKey(job.getTemplateName());\r
+                       JobKey jobKey = JobKey.jobKey(job.getJobId());\r
                        if (scheduler.checkExists(jobKey))\r
                                scheduler.deleteJob(jobKey);\r
                }\r
        }\r
 \r
-       public BasicDBList getScheduleJobs() {\r
-               return scheduleJobs;\r
-       }\r
-\r
 }\r
index f906bf280f234a99cec64b173ae508aa59f3d17c..e8c42d9fa7ea4185b29888299609803887450a7f 100644 (file)
@@ -41,14 +41,14 @@ public class JobSelectorModel extends BaseModel {
                if (selectedJobElement == null)\r
                        return;\r
                SchedulerService scheduler = jobEngine.getScheduler();\r
-               ScheduledJob scheduledJob = scheduler.createScheduledJobd(selectedJobElement.getDbObject());\r
+               ScheduledJob scheduledJob = scheduler.createScheduledJob(selectedJobElement.getDbObject());\r
                scheduledJob.setJobEngine(jobEngine);\r
                for (int i = 0; i < 1; i++) {\r
 \r
                        try {\r
                                if (!scheduledJob.isActive())\r
                                        scheduler.register(scheduledJob);\r
-                               scheduler.executeImmediate(scheduledJob.getTemplateName());\r
+                               scheduler.executeImmediate(scheduledJob.getJobId());\r
                                Thread.sleep(100);\r
                        } catch (Exception e) {\r
                                //Page not found /pages/MessageBox.zul\r