From: Vásáry Dániel Date: Sun, 2 Aug 2020 20:49:16 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=3d1309e830c5366157edd9d5db1420b04990bfdf;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31913 --- diff --git a/client/AudioRecorder/MetadataSelectorForm.cs b/client/AudioRecorder/MetadataSelectorForm.cs index 85acb573..09396f89 100644 --- a/client/AudioRecorder/MetadataSelectorForm.cs +++ b/client/AudioRecorder/MetadataSelectorForm.cs @@ -83,7 +83,7 @@ namespace AudioRecorder { }; } - private void TrafficIDChangedEvent(string id, int variantID, string text, List selected) { + private void TrafficIDChangedEvent(string id, int variantID, string epizodeID, string text, List selected) { if (id == null) SelectedMetadata = null; else { diff --git a/client/DxPlay/PlayerForm.cs b/client/DxPlay/PlayerForm.cs index fa9be0e0..d1189cb1 100644 --- a/client/DxPlay/PlayerForm.cs +++ b/client/DxPlay/PlayerForm.cs @@ -86,7 +86,7 @@ namespace DxPlay { } - private void OnSelectedIDChanged(string ID, int variantID, string text, List selected) { + private void OnSelectedIDChanged(string ID, int variantID, string epizodeID, string text, List selected) { //logger.Info("Selected ID: " + ID); try { model.SelectedSegments = selected; diff --git a/client/Maestro/Configuration/ACTIVE-configuration-promo.json b/client/Maestro/Configuration/-ACTIVE-configuration-promo.json similarity index 100% rename from client/Maestro/Configuration/ACTIVE-configuration-promo.json rename to client/Maestro/Configuration/-ACTIVE-configuration-promo.json diff --git a/client/Maestro/Configuration/configuration.json b/client/Maestro/Configuration/configuration.json index 03c635ad..dca817fc 100644 --- a/client/Maestro/Configuration/configuration.json +++ b/client/Maestro/Configuration/configuration.json @@ -1,6 +1,6 @@ { "title": "Development", - "active": true, + "active": false, "startInTray": false, "enableCustomMetadataId": true, "filter": "avi", diff --git a/client/Maestro/Configuration/editor-mv.json b/client/Maestro/Configuration/editor-mv.json index ee67c186..6a1fcb20 100644 --- a/client/Maestro/Configuration/editor-mv.json +++ b/client/Maestro/Configuration/editor-mv.json @@ -1,6 +1,6 @@ { "title": "Editor", - "active": false, + "active": true, "startInTray": false, "enableCustomMetadataId": true, "player": { diff --git a/client/Maestro/Maestro.csproj b/client/Maestro/Maestro.csproj index 612aa9a6..758236f3 100644 --- a/client/Maestro/Maestro.csproj +++ b/client/Maestro/Maestro.csproj @@ -288,7 +288,7 @@ Form - + Always @@ -405,6 +405,8 @@ + + diff --git a/client/Maestro/MaestroForm.Designer.cs b/client/Maestro/MaestroForm.Designer.cs index e5c7a737..536a5b2a 100644 --- a/client/Maestro/MaestroForm.Designer.cs +++ b/client/Maestro/MaestroForm.Designer.cs @@ -26,17 +26,17 @@ namespace Maestro { /// private void InitializeComponent() { this.components = new System.ComponentModel.Container(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle31 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle32 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle33 = new System.Windows.Forms.DataGridViewCellStyle(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MaestroForm)); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle36 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle37 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle34 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle35 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle39 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle40 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle38 = new System.Windows.Forms.DataGridViewCellStyle(); this.groupSource = new System.Windows.Forms.GroupBox(); this.dgSource = new System.Windows.Forms.DataGridView(); this.bindingSource = new System.Windows.Forms.BindingSource(this.components); @@ -66,6 +66,7 @@ namespace Maestro { this.btnRedefineSegments = new System.Windows.Forms.ToolStripButton(); this.btnEditMetadata = new System.Windows.Forms.ToolStripButton(); this.btnDefineSegments = new System.Windows.Forms.ToolStripButton(); + this.btnUseEpisodeID = new System.Windows.Forms.ToolStripButton(); this.btnLookupMetadata = new System.Windows.Forms.Button(); this.labelSelectedMetadata = new System.Windows.Forms.Label(); this.textSelectedMetadata = new System.Windows.Forms.TextBox(); @@ -116,6 +117,7 @@ namespace Maestro { this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.lSkipped = new System.Windows.Forms.ToolStripLabel(); this.lSkippedCount = new System.Windows.Forms.ToolStripLabel(); + this.dataGridViewProgressColumn1 = new Maestro.Commons.DataGridViewProgressColumn(); this.systemMessageBindingSource = new System.Windows.Forms.BindingSource(this.components); this.metadataInfoBindingSource = new System.Windows.Forms.BindingSource(this.components); this.groupSource.SuspendLayout(); @@ -188,32 +190,32 @@ namespace Maestro { this.dgSource.BackgroundColor = System.Drawing.Color.White; this.dgSource.BorderStyle = System.Windows.Forms.BorderStyle.None; this.dgSource.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised; - dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dgSource.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; + dataGridViewCellStyle31.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle31.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle31.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle31.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle31.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle31.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle31.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgSource.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle31; this.dgSource.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgSource.DataSource = this.bindingSource; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.Gainsboro; - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.Black; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgSource.DefaultCellStyle = dataGridViewCellStyle2; + dataGridViewCellStyle32.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle32.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle32.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle32.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle32.SelectionBackColor = System.Drawing.Color.Gainsboro; + dataGridViewCellStyle32.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle32.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgSource.DefaultCellStyle = dataGridViewCellStyle32; this.dgSource.Dock = System.Windows.Forms.DockStyle.Fill; this.dgSource.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; this.dgSource.EnableHeadersVisualStyles = false; this.dgSource.Location = new System.Drawing.Point(10, 47); this.dgSource.Name = "dgSource"; this.dgSource.RowHeadersVisible = false; - dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - this.dgSource.RowsDefaultCellStyle = dataGridViewCellStyle3; + dataGridViewCellStyle33.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.dgSource.RowsDefaultCellStyle = dataGridViewCellStyle33; this.dgSource.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); this.dgSource.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; this.dgSource.Size = new System.Drawing.Size(330, 163); @@ -521,6 +523,7 @@ namespace Maestro { this.trafficIDSelector.Location = new System.Drawing.Point(3, 3); this.trafficIDSelector.Margin = new System.Windows.Forms.Padding(0); this.trafficIDSelector.Name = "trafficIDSelector"; + this.trafficIDSelector.Parameters = null; this.trafficIDSelector.Size = new System.Drawing.Size(316, 314); this.trafficIDSelector.TabIndex = 0; // @@ -551,7 +554,8 @@ namespace Maestro { this.tsMetadata.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.btnRedefineSegments, this.btnEditMetadata, - this.btnDefineSegments}); + this.btnDefineSegments, + this.btnUseEpisodeID}); this.tsMetadata.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow; this.tsMetadata.Location = new System.Drawing.Point(0, 0); this.tsMetadata.Name = "tsMetadata"; @@ -597,6 +601,18 @@ namespace Maestro { this.btnDefineSegments.ToolTipText = "Szegmensek"; this.btnDefineSegments.Click += new System.EventHandler(this.OnDefineSegments); // + // btnUseEpisodeID + // + this.btnUseEpisodeID.CheckOnClick = true; + this.btnUseEpisodeID.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.btnUseEpisodeID.Image = global::Maestro.Properties.Resources.outline_flip_black_24dp; + this.btnUseEpisodeID.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.btnUseEpisodeID.ImageTransparentColor = System.Drawing.Color.Magenta; + this.btnUseEpisodeID.Name = "btnUseEpisodeID"; + this.btnUseEpisodeID.Size = new System.Drawing.Size(28, 28); + this.btnUseEpisodeID.Text = "toolStripButton1"; + this.btnUseEpisodeID.ToolTipText = "Epizód kijelölés"; + // // btnLookupMetadata // this.btnLookupMetadata.BackColor = System.Drawing.Color.Transparent; @@ -778,15 +794,15 @@ namespace Maestro { this.columnKillDate, this.columnMessage}); this.dgJobs.DataSource = this.bindingSourceJobs; - dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle6.NullValue = null; - dataGridViewCellStyle6.SelectionBackColor = System.Drawing.Color.Gainsboro; - dataGridViewCellStyle6.SelectionForeColor = System.Drawing.Color.Black; - dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgJobs.DefaultCellStyle = dataGridViewCellStyle6; + dataGridViewCellStyle36.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle36.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle36.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle36.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle36.NullValue = null; + dataGridViewCellStyle36.SelectionBackColor = System.Drawing.Color.Gainsboro; + dataGridViewCellStyle36.SelectionForeColor = System.Drawing.Color.Black; + dataGridViewCellStyle36.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgJobs.DefaultCellStyle = dataGridViewCellStyle36; this.dgJobs.Dock = System.Windows.Forms.DockStyle.Fill; this.dgJobs.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; this.dgJobs.EnableHeadersVisualStyles = false; @@ -794,8 +810,8 @@ namespace Maestro { this.dgJobs.Location = new System.Drawing.Point(3, 3); this.dgJobs.Name = "dgJobs"; this.dgJobs.RowHeadersVisible = false; - dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - this.dgJobs.RowsDefaultCellStyle = dataGridViewCellStyle7; + dataGridViewCellStyle37.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.dgJobs.RowsDefaultCellStyle = dataGridViewCellStyle37; this.dgJobs.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); this.dgJobs.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; this.dgJobs.Size = new System.Drawing.Size(988, 96); @@ -832,8 +848,8 @@ namespace Maestro { // columnID // this.columnID.DataPropertyName = "ID"; - dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - this.columnID.DefaultCellStyle = dataGridViewCellStyle4; + dataGridViewCellStyle34.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.columnID.DefaultCellStyle = dataGridViewCellStyle34; this.columnID.HeaderText = "ID"; this.columnID.Name = "columnID"; this.columnID.Width = 44; @@ -841,8 +857,8 @@ namespace Maestro { // columnStatus // this.columnStatus.DataPropertyName = "Status"; - dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - this.columnStatus.DefaultCellStyle = dataGridViewCellStyle5; + dataGridViewCellStyle35.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.columnStatus.DefaultCellStyle = dataGridViewCellStyle35; this.columnStatus.HeaderText = "Status"; this.columnStatus.Name = "columnStatus"; this.columnStatus.Width = 66; @@ -912,15 +928,15 @@ namespace Maestro { this.dgMessages.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.columnMessagesTime, this.columnMessagesMessage}); - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - dataGridViewCellStyle9.ForeColor = System.Drawing.Color.Red; - dataGridViewCellStyle9.NullValue = null; - dataGridViewCellStyle9.SelectionBackColor = System.Drawing.Color.Gainsboro; - dataGridViewCellStyle9.SelectionForeColor = System.Drawing.Color.Red; - dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgMessages.DefaultCellStyle = dataGridViewCellStyle9; + dataGridViewCellStyle39.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle39.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle39.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + dataGridViewCellStyle39.ForeColor = System.Drawing.Color.Red; + dataGridViewCellStyle39.NullValue = null; + dataGridViewCellStyle39.SelectionBackColor = System.Drawing.Color.Gainsboro; + dataGridViewCellStyle39.SelectionForeColor = System.Drawing.Color.Red; + dataGridViewCellStyle39.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgMessages.DefaultCellStyle = dataGridViewCellStyle39; this.dgMessages.Dock = System.Windows.Forms.DockStyle.Fill; this.dgMessages.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically; this.dgMessages.EnableHeadersVisualStyles = false; @@ -929,8 +945,8 @@ namespace Maestro { this.dgMessages.Name = "dgMessages"; this.dgMessages.ReadOnly = true; this.dgMessages.RowHeadersVisible = false; - dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - this.dgMessages.RowsDefaultCellStyle = dataGridViewCellStyle10; + dataGridViewCellStyle40.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.dgMessages.RowsDefaultCellStyle = dataGridViewCellStyle40; this.dgMessages.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); this.dgMessages.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; this.dgMessages.Size = new System.Drawing.Size(988, 96); @@ -949,8 +965,8 @@ namespace Maestro { // this.columnMessagesMessage.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; this.columnMessagesMessage.DataPropertyName = "Message"; - dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); - this.columnMessagesMessage.DefaultCellStyle = dataGridViewCellStyle8; + dataGridViewCellStyle38.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.columnMessagesMessage.DefaultCellStyle = dataGridViewCellStyle38; this.columnMessagesMessage.HeaderText = "Üzenet"; this.columnMessagesMessage.Name = "columnMessagesMessage"; this.columnMessagesMessage.ReadOnly = true; @@ -1135,6 +1151,15 @@ namespace Maestro { this.lSkippedCount.Text = "0"; this.lSkippedCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // + // dataGridViewProgressColumn1 + // + this.dataGridViewProgressColumn1.DataPropertyName = "Progress"; + this.dataGridViewProgressColumn1.Frozen = true; + this.dataGridViewProgressColumn1.HeaderText = ""; + this.dataGridViewProgressColumn1.MinimumWidth = 100; + this.dataGridViewProgressColumn1.Name = "dataGridViewProgressColumn1"; + this.dataGridViewProgressColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.False; + // // systemMessageBindingSource // this.systemMessageBindingSource.DataSource = typeof(Maestro.SystemMessage); @@ -1291,6 +1316,8 @@ namespace Maestro { private ToolStripSeparator toolStripSeparator7; private ToolStripLabel lRevoked; private ToolStripLabel lRevokedCount; + private ToolStripButton btnUseEpisodeID; + private Commons.DataGridViewProgressColumn dataGridViewProgressColumn1; } } diff --git a/client/Maestro/MaestroForm.Metadata.cs b/client/Maestro/MaestroForm.Metadata.cs index 9c4ec3b5..5e76f505 100644 --- a/client/Maestro/MaestroForm.Metadata.cs +++ b/client/Maestro/MaestroForm.Metadata.cs @@ -411,7 +411,7 @@ namespace Maestro { }; } - private void OnTrafficIDSelected(string id, int variantID, string text, List selected) { + private void OnTrafficIDSelected(string id, int variantID, string epizodeID, string text, List selected) { btnRedefineSegments.Visible = false; if (id == null) { ArchiveMetadata = null; @@ -422,7 +422,7 @@ namespace Maestro { MetadataType metadataType = MetadataTypeUtil.Guess(id); SelectedMetadata = new MetadataInfo() { Kind = metadataType, - ID = id, + ID = btnUseEpisodeID.Checked ? epizodeID : id, MetadataText = text, VariantID = variantID, Selected = selected diff --git a/client/Maestro/MaestroForm.resx b/client/Maestro/MaestroForm.resx index ffa61412..a37bd163 100644 --- a/client/Maestro/MaestroForm.resx +++ b/client/Maestro/MaestroForm.resx @@ -128,7 +128,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS - CAAAAk1TRnQBSQFMAgEBAgEAAZgBAgGYAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAAcABAgHAAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -177,9 +177,15 @@ 951, 17 + + 951, 17 + 846, 17 + + 1146, 17 + True diff --git a/client/Maestro/Properties/AssemblyInfo.cs b/client/Maestro/Properties/AssemblyInfo.cs index 38eabe36..6940efac 100644 --- a/client/Maestro/Properties/AssemblyInfo.cs +++ b/client/Maestro/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.1.0.5")] -[assembly: AssemblyFileVersion("2.1.0.5")] +[assembly: AssemblyVersion("2.1.0.6")] +[assembly: AssemblyFileVersion("2.1.0.6")] diff --git a/client/Maestro/Properties/Resources.Designer.cs b/client/Maestro/Properties/Resources.Designer.cs index 765cc214..85193ba7 100644 --- a/client/Maestro/Properties/Resources.Designer.cs +++ b/client/Maestro/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace Maestro.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -250,6 +250,26 @@ namespace Maestro.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap outline_filter_1_black_24dp { + get { + object obj = ResourceManager.GetObject("outline_filter_1_black_24dp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap outline_flip_black_24dp { + get { + object obj = ResourceManager.GetObject("outline_flip_black_24dp", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// diff --git a/client/Maestro/Properties/Resources.resx b/client/Maestro/Properties/Resources.resx index f2783a5a..3d711bd4 100644 --- a/client/Maestro/Properties/Resources.resx +++ b/client/Maestro/Properties/Resources.resx @@ -118,26 +118,32 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - ..\Resources\mediacube_logo_small.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_settings_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_clear_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_playlist_add_check_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ic_playlist_add_check_black_24dp_1x_green1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Play.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_search_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_receipt_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_playlist_add_check_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_reorder_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\mediacube_logo_v2_half_hard_edge.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_folder_open_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_clear_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ic_toc_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\ic_list_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -145,37 +151,37 @@ ..\Resources\ic_note_add_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_playlist_add_check_black_24dp_1x_green1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\ic_receipt_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_cached_black_18dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\ic_receipt_black_24dp_1x_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_reorder_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\outline_filter_1_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_settings_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_playlist_add_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_subject_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_folder_open_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_toc_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_search_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_view_headline_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\mediacube_logo_small.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\ic_subject_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\ic_refresh_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_cached_black_18dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ic_view_headline_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\ic_playlist_add_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\outline_flip_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/client/Maestro/Resources/outline_filter_1_black_24dp.png b/client/Maestro/Resources/outline_filter_1_black_24dp.png new file mode 100644 index 00000000..374b4064 Binary files /dev/null and b/client/Maestro/Resources/outline_filter_1_black_24dp.png differ diff --git a/client/Maestro/Resources/outline_flip_black_24dp.png b/client/Maestro/Resources/outline_flip_black_24dp.png new file mode 100644 index 00000000..ff5c3f84 Binary files /dev/null and b/client/Maestro/Resources/outline_flip_black_24dp.png differ diff --git a/client/MetadataSelector/MetadataIDSelector.cs b/client/MetadataSelector/MetadataIDSelector.cs index ec0048d9..737cbd6d 100644 --- a/client/MetadataSelector/MetadataIDSelector.cs +++ b/client/MetadataSelector/MetadataIDSelector.cs @@ -141,7 +141,7 @@ namespace MaestroShared.Controls { textSelectedMetadata.Text = name; } - private void TrafficIDChangedEvent(string id, int variantID, string text, List selected) { + private void TrafficIDChangedEvent(string id, int variantID, string epizodeID, string text, List selected) { octopusIDSelector.ClearSelection(); nativeOctopusIDSelector.ClearSelection(); ClearFreeMetadata(); diff --git a/client/PlanAIRClient/TrafficIDSelector.cs b/client/PlanAIRClient/TrafficIDSelector.cs index 15697f5f..9cc0cef2 100644 --- a/client/PlanAIRClient/TrafficIDSelector.cs +++ b/client/PlanAIRClient/TrafficIDSelector.cs @@ -11,7 +11,7 @@ using System.Text.RegularExpressions; using System.Windows.Forms; namespace TrafficClient { - public delegate void OnSelectedIDChanged(string ID, int variantID, string text, List selected); + public delegate void OnSelectedIDChanged(string ID, int variantID, string epizodeID, string text, List selected); public partial class TrafficIDSelector : UserControl { public ITrafficAPI trafficAPI { get; private set; } @@ -182,10 +182,10 @@ namespace TrafficClient { if (selectedItems?.Count > 0) { btnNewVersion.Enabled = true; CreateVersionIfMissing(trafficItem); - IDChangedEvent?.Invoke(trafficItem.MediaID, trafficItem.VariantID, trafficItem.Title, selectedItems); + IDChangedEvent?.Invoke(trafficItem.MediaID, trafficItem.VariantID, trafficItem.EpisodeID, trafficItem.Title, selectedItems); } else { btnNewVersion.Enabled = false; - IDChangedEvent?.Invoke(null, 0, null, null); + IDChangedEvent?.Invoke(null, 0, null, null, null); } } diff --git a/server/-configuration/AMC/soap/getCustomView b/server/-configuration/AMC/soap/getCustomView new file mode 100644 index 00000000..0a65d8ea --- /dev/null +++ b/server/-configuration/AMC/soap/getCustomView @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/server/-configuration/AMC/soap/getMediaUsageByUTRange b/server/-configuration/AMC/soap/getMediaUsageByUTRange new file mode 100644 index 00000000..511580c1 --- /dev/null +++ b/server/-configuration/AMC/soap/getMediaUsageByUTRange @@ -0,0 +1,10 @@ + + + + + + + false + true + + \ No newline at end of file diff --git a/server/-configuration/mediacube.json b/server/-configuration/mediacube.json index bd927894..733e5b30 100644 --- a/server/-configuration/mediacube.json +++ b/server/-configuration/mediacube.json @@ -108,12 +108,12 @@ }, { "user" : "lebony", - "password" : "lebony", + "password" : "4E25B117B14D86D7DCECB4E433CF932C", "email" : null }, { "user" : "root", - "password" : "password", + "password" : "5F4DCC3B5AA765D61D8327DEB882CF99", "email" : "vasary@elgekko.net" } ], diff --git a/server/-configuration/run-mediacube-server-mv.launch b/server/-configuration/run-mediacube-server-mv.launch index f7f6d9f0..ebcd1ff6 100644 --- a/server/-configuration/run-mediacube-server-mv.launch +++ b/server/-configuration/run-mediacube-server-mv.launch @@ -19,7 +19,7 @@ - + diff --git a/server/-configuration/run-mediacube-server-user.launch b/server/-configuration/run-mediacube-server-user.launch index 2d084b11..283e43d3 100644 --- a/server/-configuration/run-mediacube-server-user.launch +++ b/server/-configuration/run-mediacube-server-user.launch @@ -19,7 +19,7 @@ - + diff --git a/server/-configuration/run-mediacube-server.launch b/server/-configuration/run-mediacube-server.launch index 1698aedc..d8603cff 100644 --- a/server/-configuration/run-mediacube-server.launch +++ b/server/-configuration/run-mediacube-server.launch @@ -21,7 +21,7 @@ - + diff --git a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java index 4959df0d..93f0294c 100644 --- a/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java +++ b/server/hu.user.mediacube.executors.tests/src/hu/user/mediacube/executors/tests/SmallTests.java @@ -1,9 +1,14 @@ package hu.user.mediacube.executors.tests; import java.io.File; +import java.nio.file.DirectoryStream; import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.TreeMap; import org.apache.commons.io.FilenameUtils; import org.junit.Test; @@ -40,11 +45,28 @@ public class SmallTests { System.out.println(Arrays.toString(sut)); } + @Test + public void test10() throws Exception { + List files = new ArrayList<>(); + DirectoryStream directoryStream = Files.newDirectoryStream(Paths.get("/_video")); + for (Path file : directoryStream) { + if (!file.toFile().isDirectory()) + files.add(file); + } + files.sort((p1, p2) -> { + if (p1.toFile().lastModified() == p2.toFile().lastModified()) + return 0; + return p1.toFile().lastModified() > p2.toFile().lastModified() ? 1 : -1; + }); + + for (Path file : files) + System.out.println(file); + } + @Test public void test2() throws Exception { Integer i = 5; Boolean j = Boolean.FALSE; - xxx(i, j); } @Test @@ -83,8 +105,59 @@ public class SmallTests { } - void xxx(int x, boolean y) { - System.out.println("call"); + @Test + public void test6() throws Exception { + TreeMap sut = new TreeMap<>(); + + sut.put("20200301T10:00:00", ""); + sut.put("20200101T12:00:00", ""); + sut.put("20200101T10:00:00", ""); + sut.put("20200201T00:00:00", ""); + + for (String key : sut.keySet()) { + System.out.println(key); + } + + String name = "valammi.mxf"; + System.out.println(name.substring(0, name.lastIndexOf("."))); + + boolean create = false; + create |= false; + System.out.println(create); + + } + + @Test + public void test7() throws Exception { + DirectoryStream directoryStream = Files.newDirectoryStream(Paths.get("/opt")); + int count = 0; + for (Path path : directoryStream) { + count++; + } + System.out.println(count); + for (Path path : directoryStream) { + System.out.println(path); + } + } + + @Test + public void test8() throws Exception { + + int currentCount = 11; + int allCount = 90; + System.out.println(currentCount * 100 / allCount); + } + + @Test + public void test9() throws Exception { + List files = Arrays.asList(Paths.get("/opt/20200101100000.xxx.json"), Paths.get("/opt/xxx.json"), Paths.get("/opt/yyy.json"), + Paths.get("/opt/20200202200000.xxx.json")); + + files.sort((a, b) -> { + return a.compareTo(b); + }); + for (Path file : files) + System.out.println(file); } } diff --git a/server/user.jobengine.executors/config/config.xml b/server/user.jobengine.executors/config/config.xml index 6f70a96d..5bf0dd2e 100644 --- a/server/user.jobengine.executors/config/config.xml +++ b/server/user.jobengine.executors/config/config.xml @@ -2,10 +2,10 @@ - + - + diff --git a/server/user.jobengine.executors/jobtemplates/cancelable.xml b/server/user.jobengine.executors/jobtemplates/cancelable.xml index 37185de7..f7b501c5 100644 --- a/server/user.jobengine.executors/jobtemplates/cancelable.xml +++ b/server/user.jobengine.executors/jobtemplates/cancelable.xml @@ -1,6 +1,17 @@ + + + + + - + + + + + + + \ No newline at end of file diff --git a/server/user.jobengine.executors/jobtemplates/fork-validate-and-archive.xml b/server/user.jobengine.executors/jobtemplates/fork-validate-and-archive.xml index d4461a87..0195aa57 100644 --- a/server/user.jobengine.executors/jobtemplates/fork-validate-and-archive.xml +++ b/server/user.jobengine.executors/jobtemplates/fork-validate-and-archive.xml @@ -3,25 +3,17 @@ - - - + - - - - - - diff --git a/server/user.jobengine.executors/jobtemplates/fork-validate-and-restore.xml b/server/user.jobengine.executors/jobtemplates/fork-validate-and-restore.xml index 63d2cb22..cc52684f 100644 --- a/server/user.jobengine.executors/jobtemplates/fork-validate-and-restore.xml +++ b/server/user.jobengine.executors/jobtemplates/fork-validate-and-restore.xml @@ -3,25 +3,17 @@ - - - + - - - - - - diff --git a/server/user.jobengine.executors/jobtemplates/peablebeach-missingmaterial-checker.xml b/server/user.jobengine.executors/jobtemplates/peablebeach-missingmaterial-checker.xml index f1fae0b8..b7cf9495 100644 --- a/server/user.jobengine.executors/jobtemplates/peablebeach-missingmaterial-checker.xml +++ b/server/user.jobengine.executors/jobtemplates/peablebeach-missingmaterial-checker.xml @@ -4,6 +4,7 @@ + @@ -21,6 +22,9 @@ + + + diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java index 10c9ddd9..db37b4ca 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/CancelableStep.java @@ -13,7 +13,7 @@ public class CancelableStep extends JobStep { private ObjectMapper mapper = ServiceObjectMapper.getMapper(); @StepEntry - public Object[] execute() throws Exception { + public Object[] execute(int param) throws Exception { // DownloadableArchive a = new DownloadableArchive(); // Media media = getManager().createMedia("Generic", "Name", "description", "houseId"); @@ -25,12 +25,16 @@ public class CancelableStep extends JobStep { // String prettyString = mapper.writeValueAsString(a); // DownloadableArchive b = mapper.readValue(prettyString, DownloadableArchive.class); // Media media2 = b.getMedia(); + + // getJobRuntime().setDescription(String.valueOf(param)); + try { for (int i = 0; i < count; i++) { if (getJobRuntime().isWaitingCancel()) break; - Thread.sleep(1000); - setProgress((i + 1) * count); + Thread.sleep(500); + int progress = (i + 1) * 100 / count; + setProgress(progress); // if (i == 5) // throw new Exception("Test"); } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java index 5c7a0251..7d7a76b1 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/EscortFiles.java @@ -39,6 +39,7 @@ import user.commons.StoreUri; import user.commons.remotestore.FtpDirectoryLister; public class EscortFiles { + public static final String DOT_CATCHED = ".catched"; public static final String DOT_JSON = ".json"; private static final Logger logger = LogManager.getLogger(); private static final String EXTENDEDAGENCY = "ExtendedAgency"; @@ -68,6 +69,15 @@ public class EscortFiles { return String.format(KILLDATE_FILENAME, fileName, composeKillDate(days)); } + public static void createCatchedFile(Path escortFile) throws IOException { + Path catchedFilePath = Paths.get(escortFile.toString() + DOT_CATCHED); + Files.createFile(catchedFilePath); + } + + public static void createFellow(String escortFile, String extension) throws IOException { + Files.copy(Paths.get(escortFile), Paths.get(escortFile + "." + extension)); + } + public static void createMetadata(String filePath, String fileName, String metadata) throws IOException { ensureUNCFolder(filePath, STATUSFOLDER); String metadataFileName = fileName + DOT_JSON; @@ -174,6 +184,11 @@ public class EscortFiles { ensureUNCFolder(statusPath); } + public static boolean isCatchedFileExists(Path escortFile) { + Path catchedFilePath = Paths.get(escortFile.toString() + DOT_CATCHED); + return catchedFilePath.toFile().exists(); + } + public static boolean isMetadataExists(String filePath, String fileName) throws IOException { boolean result = false; String metadataFileName = fileName + DOT_JSON; @@ -182,6 +197,18 @@ public class EscortFiles { return result; } + public static void remove(Path file) { + try { + file.toFile().delete(); + } catch (Exception e) { + logger.error("Unable to delete {}", file.toAbsolutePath().toString()); + } + } + + public static void removeCatchedFile(Path escortFile) { + remove(Paths.get(escortFile.toString() + DOT_CATCHED)); + } + public static void setNEXIOKillDate(int killDateDays, String targetFileName, String nexioAgency, StoreUri targetUri) throws Exception { OutputStream outStream = null; try { @@ -207,8 +234,4 @@ public class EscortFiles { targetUri.cleanUp(); } } - - public static void createFellow(String escortFile, String extension) throws IOException { - Files.copy(Paths.get(escortFile), Paths.get(escortFile + "." + extension)); - } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FileCleanupStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FileCleanupStep.java index 7fc3440a..c5387649 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/FileCleanupStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FileCleanupStep.java @@ -24,10 +24,8 @@ public class FileCleanupStep extends JobStep { try { Path filePath = Paths.get(sourceStoreUri.toString(true), fileName); deleteSilently(filePath); - if (escortFile != null) { - Path escortFilePath = Paths.get(escortFile); - deleteSilently(escortFilePath); - } + deleteSilently(Paths.get(escortFile)); + deleteSilently(Paths.get(escortFile + EscortFiles.DOT_CATCHED)); } catch (Exception e) { logger.error(e.getMessage()); throw e; diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FileValidatorStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FileValidatorStep.java index fc17afb5..fee9abe2 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/FileValidatorStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FileValidatorStep.java @@ -15,6 +15,7 @@ import user.commons.remotestore.RemoteStoreProtocol; public class FileValidatorStep extends JobStep { private static final String COLORSPACE = "COLORSPACE"; private static final Logger logger = LogManager.getLogger(); + private static final String testSimulate = System.getProperty("test.simulate"); private void deleteSilently(Path file) { try { @@ -33,13 +34,28 @@ public class FileValidatorStep extends JobStep { if (!filePath.toFile().exists()) throw new FileNotFoundException("File not exists: " + filePath.toString()); + if (getJobRuntime().isWaitingCancel()) { + deleteSilently(filePath); + deleteSilently(Paths.get(escortFile)); + deleteSilently(Paths.get(escortFile + EscortFiles.DOT_CATCHED)); + cancel(); + return null; + } + if (expectedFrameNumber > 0 || StringUtils.isNotBlank(exceptedColorSpace)) validateMedia(filePath, expectedFrameNumber, exceptedColorSpace, escortFile); if (expectedSize > 0) validateSize(filePath, expectedSize, escortFile); - logger.info(getMarker(), "{} passed validation", fileName); + //A metadata persister miatt torlunk mindet teszt modban + if (StringUtils.isNotBlank(testSimulate)) { + deleteSilently(Paths.get(escortFile)); + deleteSilently(Paths.get(escortFile + EscortFiles.DOT_CATCHED)); + logger.info(getSessionMarker(), "{} deleted to prevent real processing", escortFile); + } + + logger.info(getSessionMarker(), "{} passed validation", fileName); return null; } @@ -53,10 +69,8 @@ public class FileValidatorStep extends JobStep { long frames = mi.getFrames(); if (frames != expectedFrameNumber) { deleteSilently(filePath); - if (escortFile != null) { - Path escortFilePath = Paths.get(escortFile); - deleteSilently(escortFilePath); - } + deleteSilently(Paths.get(escortFile)); + deleteSilently(Paths.get(escortFile + EscortFiles.DOT_CATCHED)); throw new Exception("Length mismatch in " + filePath + ". Expected: " + expectedFrameNumber + ", found: " + frames); } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkByStatusFileStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkByStatusFileStep.java deleted file mode 100644 index c9858b96..00000000 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkByStatusFileStep.java +++ /dev/null @@ -1,121 +0,0 @@ -package user.jobengine.server.steps; - -import java.io.IOException; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.HashMap; -import java.util.Map; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.message.Message; -import org.apache.logging.log4j.message.ParameterizedMessage; - -import user.commons.DownloadableMedia; -import user.commons.StoreUri; -import user.commons.remotestore.RemoteStoreProtocol; -import user.jobengine.server.IJobRuntime; - -public class ForkByStatusFileStep extends JobStep { - private static final Logger logger = LogManager.getLogger(); - - @StepEntry - public Object[] execute(String tempStoreName, String targetStoreName, String targetProtocol, String template, String expectedColorSpace, int limit) - throws Exception { - DirectoryStream directoryStream = null; - int count = limit; - try { - StoreUri tempStoreUri = getManager().getStoreUri(tempStoreName, RemoteStoreProtocol.LOCAL); - StoreUri targetStoreUri = getManager().getStoreUri(targetStoreName, Enum.valueOf(RemoteStoreProtocol.class, targetProtocol)); - - if (getJobRuntime().forkPrepare()) { - Path path = Paths.get(tempStoreUri.toString(true), ".STATUS"); - directoryStream = Files.newDirectoryStream(path); - if (directoryStream != null) { - for (Path escortFile : directoryStream) { - - if (getJobRuntime().isWaitingCancel()) { - cancel(); - break; - } - - if (processPathItem(tempStoreUri, targetStoreUri, template, escortFile)) - count--; - - if (count == 0) - break; - } - } - if (count == limit) - getJobRuntime().cancelForkPrepare(); - else - getJobRuntime().forkWaitComplete(); - } - - setProgress(100); - } catch (Exception e) { - logger.error(getSessionMarker(), e.getMessage()); - throw e; - } finally { - if (directoryStream != null) { - try { - directoryStream.close(); - } catch (IOException e) { - } - } - } - - return null; - } - - private boolean processPathItem(StoreUri tempStoreUri, StoreUri targetStoreUri, String template, Path escortFile) throws IOException { - if (escortFile.toFile().isDirectory()) - return false; - - //ami nem JSON azt nem kezeljuk - if (!escortFile.getFileName().toString().toLowerCase().endsWith(EscortFiles.DOT_JSON)) - return false; - - //aminek van COLORSPACE kiterjesztésű - Path colorspaceFile = Paths.get(escortFile.toString() + ".colorspace"); - if (colorspaceFile.toFile().exists()) - return false; - - String fileName = escortFile.getFileName().toString(); - //minimum 3 karakter: STORENAME.FILENAME.MXF.JSON - long dotCount = fileName.chars().filter(ch -> ch == '.').count(); - if (dotCount < 3) - return false; - - try { - DownloadableMedia downloadable = EscortFiles.decode(escortFile); - logger.info("Starting {}", template); - - StoreUri sourceStoreUri = getManager().getStoreUri(downloadable.getLong("storeUriId")); - - Map parameters = new HashMap<>(); - parameters.put("sourceStoreUri", sourceStoreUri); - parameters.put("fileName", downloadable.getString("fileName")); - parameters.put("tempStoreUri", tempStoreUri); - parameters.put("targetStoreUri", targetStoreUri); - parameters.put("expectedFrameNumber", downloadable.getLong("frames")); - parameters.put("expectedSize", downloadable.getLong("size")); - parameters.put("expectedColorSpace", downloadable.getString("colorSpace")); - parameters.put("escortFile", escortFile.toAbsolutePath().toString()); - - IJobRuntime child = getEngine().submit(getJobRuntime(), null, template, "Archiválás", parameters); - if (child == null) - throw new Exception("Submit error."); - - } catch (Exception e) { - Message m = new ParameterizedMessage(e.getMessage()); - logger.error(getMarker(), m, e); - logger.error(getSessionMarker(), m); - return false; - } - - return true; - } -} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkDownloadStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkDownloadStep.java new file mode 100644 index 00000000..8be4b846 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkDownloadStep.java @@ -0,0 +1,143 @@ +package user.jobengine.server.steps; + +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.DownloadableMedia; +import user.commons.JobStatus; +import user.commons.StoreUri; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class ForkDownloadStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + + @StepEntry + public Object[] execute(String tempStoreName, String template, String expectedColorSpace, int limit) throws Exception { + DirectoryStream directoryStream = null; + int count = limit; + int allCount = 0; + int currentCount = 0; + + try { + StoreUri tempStoreUri = getManager().getStoreUri(tempStoreName, RemoteStoreProtocol.LOCAL); + Path path = Paths.get(tempStoreUri.toString(true), ".STATUS"); + + List escortFiles = new ArrayList<>(); + directoryStream = Files.newDirectoryStream(path); + for (Path escortFile : directoryStream) { + if (getJobRuntime().isWaitingCancel()) { + cancel(); + return null; + } + escortFiles.add(escortFile); + } + allCount = escortFiles.size(); + //a file neve az adasbakerules idopontjaval kezdodik + escortFiles.sort((p1, p2) -> { + if (p1.toFile().lastModified() == p2.toFile().lastModified()) + return 0; + return p1.toFile().lastModified() > p2.toFile().lastModified() ? 1 : -1; + }); + + if (allCount > 0) { + for (Path escortFile : escortFiles) { + if (getJobRuntime().isWaitingCancel()) { + cancel(); + break; + } + + if (processPathItem(tempStoreUri, template, escortFile)) { + count--; + if (count == 0) + break; + } + currentCount++; + setProgress(currentCount * 100 / allCount); + } + } + + setProgress(100); + } catch (Exception e) { + logger.error(getSessionMarker(), e.getMessage()); + throw e; + } finally { + if (directoryStream != null) { + try { + directoryStream.close(); + } catch (IOException e) { + } + } + } + + return null; + } + + private boolean processPathItem(StoreUri tempStoreUri, String template, Path escortFile) throws IOException { + if (escortFile.toFile().isDirectory()) + return false; + + //ami nem JSON azt nem kezeljuk + if (!escortFile.getFileName().toString().toLowerCase().endsWith(EscortFiles.DOT_JSON)) + return false; + + //aminek van COLORSPACE kiterjesztesu valtozata azt nem kezeljuk + // Path colorspaceFile = Paths.get(escortFile.toString() + ".colorspace"); + // if (colorspaceFile.toFile().exists()) + // return false; + + if (EscortFiles.isCatchedFileExists(escortFile)) + return false; + + String fileName = escortFile.getFileName().toString(); + //minimum 3 karakter: STORENAME.FILENAME.MXF.JSON + long dotCount = fileName.chars().filter(ch -> ch == '.').count(); + if (dotCount < 3) + return false; + + try { + DownloadableMedia downloadable = EscortFiles.decode(escortFile); + logger.info("Starting {}", template); + + StoreUri sourceStoreUri = getManager().getStoreUri(downloadable.getLong("sourceStoreUriId")); + StoreUri targetStoreUri = getManager().getStoreUri(downloadable.getLong("targetStoreUriId")); + Map parameters = new HashMap<>(); + parameters.put("sourceStoreUri", sourceStoreUri); + parameters.put("fileName", downloadable.getString("fileName")); + parameters.put("tempStoreUri", tempStoreUri); + parameters.put("targetStoreUri", targetStoreUri); + parameters.put("expectedFrameNumber", downloadable.getLong("frames")); + parameters.put("expectedSize", downloadable.getLong("size")); + parameters.put("expectedColorSpace", downloadable.getString("colorSpace")); + parameters.put("escortFile", escortFile.toAbsolutePath().toString()); + + //IJobRuntime parent, String template, String name, int priority, Map parameters + IJobRuntime child = getEngine().submit(null, e -> { + if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) + EscortFiles.removeCatchedFile(escortFile); + }, template, "Archiválás", 0, IJobEngine.DEFAULT_OWNER, parameters); + if (child == null) + throw new Exception("Submit error."); + + child.setRelated(downloadable.getString("title")); + EscortFiles.createCatchedFile(escortFile); + + } catch (Exception e) { + logger.error(getSessionMarker(), e.getMessage()); + return false; + } + + return true; + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkUploadStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkUploadStep.java new file mode 100644 index 00000000..ede48c76 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/ForkUploadStep.java @@ -0,0 +1,142 @@ +package user.jobengine.server.steps; + +import java.io.IOException; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.DownloadableMedia; +import user.commons.JobStatus; +import user.commons.StoreUri; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.server.IJobEngine; +import user.jobengine.server.IJobRuntime; + +public class ForkUploadStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + + @StepEntry + public Object[] execute(String tempStoreName, String template, String expectedColorSpace, int limit) throws Exception { + DirectoryStream directoryStream = null; + int count = limit; + int allCount = 0; + int currentCount = 0; + + try { + StoreUri tempStoreUri = getManager().getStoreUri(tempStoreName, RemoteStoreProtocol.LOCAL); + Path path = Paths.get(tempStoreUri.toString(true), ".STATUS"); + + List escortFiles = new ArrayList<>(); + directoryStream = Files.newDirectoryStream(path); + for (Path escortFile : directoryStream) { + if (getJobRuntime().isWaitingCancel()) { + cancel(); + return null; + } + escortFiles.add(escortFile); + } + allCount = escortFiles.size(); + //a file neve az adasbakerules idopontjaval kezdodik + escortFiles.sort((p1, p2) -> { + return p1.compareTo(p2); + }); + + if (allCount > 0) { + for (Path escortFile : escortFiles) { + if (getJobRuntime().isWaitingCancel()) { + cancel(); + break; + } + + if (processPathItem(tempStoreUri, template, escortFile)) { + count--; + if (count == 0) + break; + } + currentCount++; + setProgress(currentCount * 100 / allCount); + } + } + + setProgress(100); + } catch (Exception e) { + logger.error(getSessionMarker(), e.getMessage()); + throw e; + } finally { + if (directoryStream != null) { + try { + directoryStream.close(); + } catch (IOException e) { + } + } + } + + return null; + } + + private boolean processPathItem(StoreUri tempStoreUri, String template, Path escortFile) throws IOException { + if (escortFile.toFile().isDirectory()) + return false; + + //ami nem JSON azt nem kezeljuk + if (!escortFile.getFileName().toString().toLowerCase().endsWith(EscortFiles.DOT_JSON)) + return false; + + //aminek van COLORSPACE kiterjesztésű + // Path colorspaceFile = Paths.get(escortFile.toString() + ".colorspace"); + // if (colorspaceFile.toFile().exists()) + // return false; + + if (EscortFiles.isCatchedFileExists(escortFile)) + return false; + + String fileName = escortFile.getFileName().toString(); + //minimum 3 karakter: STORENAME.FILENAME.MXF.JSON + long dotCount = fileName.chars().filter(ch -> ch == '.').count(); + if (dotCount < 3) + return false; + + try { + DownloadableMedia downloadable = EscortFiles.decode(escortFile); + logger.info(getSessionMarker(), "Starting {} for {}", template, fileName); + + StoreUri sourceStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM); + StoreUri targetStoreUri = getManager().getStoreUri(downloadable.getLong("targetStoreUriId")); + + Map parameters = new HashMap<>(); + parameters.put("sourceStoreUri", sourceStoreUri); + parameters.put("fileName", downloadable.getString("fileName")); + parameters.put("tempStoreUri", tempStoreUri); + parameters.put("targetStoreUri", targetStoreUri); + parameters.put("expectedFrameNumber", downloadable.getLong("frames")); + parameters.put("expectedSize", downloadable.getLong("size")); + parameters.put("expectedColorSpace", downloadable.getString("colorSpace")); + parameters.put("escortFile", escortFile.toAbsolutePath().toString()); + + int priority = downloadable.containsKey("priority") ? downloadable.getInt("priority") : 0; + //IJobRuntime parent, String template, String name, int priority, Map parameters + IJobRuntime child = getEngine().submit(null, e -> { + if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) + EscortFiles.removeCatchedFile(escortFile); + }, template, "Visszatöltés", priority, IJobEngine.DEFAULT_OWNER, parameters); + if (child == null) + throw new Exception("Submit error."); + + child.setRelated(downloadable.getString("title")); + EscortFiles.createCatchedFile(escortFile); + } catch (Exception e) { + logger.error(getSessionMarker(), e.getMessage()); + return false; + } + + return true; + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/GenericArchiveCheckerStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/GenericArchiveCheckerStep.java index 10f5a76e..1e6078ec 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/GenericArchiveCheckerStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/GenericArchiveCheckerStep.java @@ -27,18 +27,20 @@ public class GenericArchiveCheckerStep extends JobStep { @StepEntry public Object[] execute(String sourceStoreName, String protocol, String wildCard, String escortStoreName, int limit) throws Exception { - StoreUri storeUri = null; + StoreUri sourceStoreUri = null; int count = limit; try { - storeUri = getManager().getStoreUri(sourceStoreName, Enum.valueOf(RemoteStoreProtocol.class, protocol)); + sourceStoreUri = getManager().getStoreUri(sourceStoreName, Enum.valueOf(RemoteStoreProtocol.class, protocol)); StoreUri escortSoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL); + StoreUri targetStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM); + String outputPath = Paths.get(escortSoreUri.toString(true)).toString(); //az FTP store nem tamogatja az asszinkron listazast - List remoteFiles = storeUri.getRemoteFiles(wildCard); + List remoteFiles = sourceStoreUri.getRemoteFiles(wildCard); for (RemoteFile remoteFile : remoteFiles) { - if (processClip(sourceStoreName, remoteFile, storeUri.getId(), outputPath)) + if (processClip(sourceStoreName, remoteFile, sourceStoreUri, targetStoreUri, outputPath)) count--; if (count == 0) { @@ -50,14 +52,14 @@ public class GenericArchiveCheckerStep extends JobStep { } catch (Exception e) { throw e; } finally { - if (storeUri != null) - storeUri.cleanUp(); + if (sourceStoreUri != null) + sourceStoreUri.cleanUp(); } return null; } - private boolean processClip(String storeName, RemoteFile remoteFile, long storeUriId, String outputPath) { + private boolean processClip(String storeName, RemoteFile remoteFile, StoreUri sourceStoreUri, StoreUri targetStoreUri, String outputPath) { boolean result = false; String title = remoteFile.getName(); Timestamp modified = Timestamp.from(remoteFile.getModify().toInstant()); @@ -75,7 +77,8 @@ public class GenericArchiveCheckerStep extends JobStep { if (createEscort) { long mediaId = media == null ? 0 : media.getId(); String fileName = title + DOT_MXF; - DownloadableMedia archive = DownloadableMedia.create(title, fileName, modified, created, 0, size, storeUriId, mediaId); + DownloadableMedia archive = DownloadableMedia.create(title, fileName, modified, created, 0, size, sourceStoreUri.getId(), targetStoreUri.getId(), + mediaId); String escortFileName = storeName + "." + remoteFile.getName(); try { result = EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, archive.toPrettyString("")); diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/HarrisMissingMaterialCheckerStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/HarrisMissingMaterialCheckerStep.java index 1acca884..d5851f59 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/HarrisMissingMaterialCheckerStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/HarrisMissingMaterialCheckerStep.java @@ -30,28 +30,44 @@ public class HarrisMissingMaterialCheckerStep extends JobStep { try { escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL); StoreUri targetStoreUri = getManager().getStoreUri(targetStoreName, Enum.valueOf(RemoteStoreProtocol.class, targetProtocol)); + StoreUri sourceStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM); List records = null; for (Object vicFile : vicFiles) { + if (getJobRuntime().isWaitingCancel()) { + cancel(); + break; + } + Path vicFilePath = Paths.get(String.valueOf(vicFile)); logger.info("Processing {} (exists: {})", vicFilePath, vicFilePath.toFile().exists()); VICFileParser parser = new VICFileParser(vicFilePath, lineFormat, validTypeCodes); + List currentRecords = parser.getRecords(); if (records == null) - records = parser.getRecords(); - else - records.addAll(parser.getRecords()); + records = currentRecords; + else { + if (currentRecords != null) + records.addAll(currentRecords); + } } - int i = 0; - for (HarrisRecord record : records) { - processRecord(record, targetStoreName, targetStoreUri, escortStoreUri); - i++; - int progress = i * 100 / records.size(); - setProgress(progress); - } + if (records != null && !getJobRuntime().isWaitingCancel()) { + int i = 0; + for (HarrisRecord record : records) { + if (getJobRuntime().isWaitingCancel()) { + cancel(); + break; + } + + processRecord(record, targetStoreName, sourceStoreUri, targetStoreUri, escortStoreUri); + i++; + int progress = i * 100 / records.size(); + setProgress(progress); + } + } + setProgress(100); } catch (Exception e) { logger.error(getSessionMarker(), e.getMessage()); - logger.error(e.getMessage()); throw e; } finally { if (escortStoreUri != null) @@ -61,7 +77,7 @@ public class HarrisMissingMaterialCheckerStep extends JobStep { return null; } - private void processRecord(HarrisRecord record, String targetStoreName, StoreUri targetStoreUri, StoreUri escortStoreUri) { + private void processRecord(HarrisRecord record, String targetStoreName, StoreUri sourceStoreUri, StoreUri targetStoreUri, StoreUri escortStoreUri) { Media media = getManager().getMedia(record.getFileName()); String fileName = record.getFileName(); @@ -74,7 +90,8 @@ public class HarrisMissingMaterialCheckerStep extends JobStep { } DownloadableMedia downloadable = DownloadableMedia.create(media.getTitle(), fileName, media.getModified(), media.getCreated(), media.getLength(), 0L, - targetStoreUri.getId(), media.getId()); + sourceStoreUri.getId(), targetStoreUri.getId(), media.getId()); + downloadable.put("priority", 100); String escortFileName = targetStoreName + "." + downloadable.getString("fileName"); String outputPath = null; try { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataPersisterStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataPersisterStep.java index 66813d00..cd216217 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataPersisterStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/MetadataPersisterStep.java @@ -48,12 +48,17 @@ public class MetadataPersisterStep extends JobStep { media.setItemId(item.getId()); media.setLength(downloadable.getLong("frames")); media.setArchived(Timestamp.from(Instant.now())); + Timestamp modified = downloadable.getTimestamp("modified"); + Timestamp created = downloadable.getTimestamp("created"); + media.setModified(modified); + media.setCreated(created); media.add(); mediaFile.setMediaId(media.getId()); mediaFile.add(); - } + } else + logger.error(getMarker(), "Status file does not exists {}", escortFilePath); } catch (Exception e) { - logger.error(e.getMessage()); + logger.error(getSessionMarker(), e.getMessage()); throw e; } return null; diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOArchiveCheckerStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOArchiveCheckerStep.java index 5d34da69..f3b88b6a 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOArchiveCheckerStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIOArchiveCheckerStep.java @@ -24,25 +24,18 @@ public class NEXIOArchiveCheckerStep extends JobStep { private static final String DOT_MXF = ".mxf"; private static final Logger logger = LogManager.getLogger(); - private boolean check(Timestamp modified, Timestamp created, int duration, Media media) { - boolean create = media == null; - create |= create || !media.getModified().equals(modified); - create |= create || !media.getCreated().equals(created); - //a regi moziknal nincs hossz mentve - create |= create || (media.getLength() > 0 && media.getLength() != duration); - return create; - } - @StepEntry public Object[] execute(String sourceStoreName, String escortStoreName, int lastModifiedHours, int limit) throws Exception { Controller controller = null; try { StoreUri nexioStoreUri = getManager().getStoreUri(sourceStoreName, RemoteStoreProtocol.NEXIO); - StoreUri downloadStoreUri = getManager().getStoreUri(sourceStoreName, RemoteStoreProtocol.FTP); + StoreUri sourceStoreUri = getManager().getStoreUri(sourceStoreName, RemoteStoreProtocol.FTP); + StoreUri targetStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM); StoreUri escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL); String outputPath = Paths.get(escortStoreUri.toString(true)).toString(); + logger.info(getMarker(), "Connecting mediabase {}", nexioStoreUri.toString()); if (nexioStoreUri.getPortNumber() == 0) controller = new Controller(nexioStoreUri.getUri(), nexioStoreUri.getPortNumber()); else @@ -51,11 +44,13 @@ public class NEXIOArchiveCheckerStep extends JobStep { Mediabase mediabase = controller.getMediabase(); Iterator clips = mediabase.getClips(); - processClips(sourceStoreName, downloadStoreUri.getId(), outputPath, limit, clips, lastModifiedHours); + logger.info(getMarker(), "Processing clips"); + processClips(sourceStoreName, sourceStoreUri, targetStoreUri, outputPath, limit, clips, lastModifiedHours); } catch (Exception e) { logger.error(getSessionMarker(), e.getMessage()); throw e; } finally { + setProgress(100); if (controller != null) controller.disconnect(); } @@ -63,9 +58,20 @@ public class NEXIOArchiveCheckerStep extends JobStep { return null; } - private void processClips(String storeName, long storeUriId, String outputPath, int limit, Iterator clips, int lastModifiedHours) - throws ClipNotFoundException, IOException, ProtocolException { - int count = limit; + private boolean check(Timestamp modified, Timestamp created, int duration, Media media) { + boolean create = media == null; + if (!create) { + create |= !media.getModified().equals(modified); + create |= !media.getCreated().equals(created); + //a regi moziknal nincs hossz mentve, es csak arra lovunk aminel 2 framnel nagyobb a kulonbseg + create |= media.getLength() > 0 && Math.abs(media.getLength() - duration) > 2; + } + return create; + } + + private void processClips(String storeName, StoreUri sourceStoreUri, StoreUri targetStoreUri, String outputPath, int limit, Iterator clips, + int lastModifiedHours) throws ClipNotFoundException, IOException, ProtocolException { + int currentCount = 0; while (clips.hasNext()) { if (getJobRuntime().isWaitingCancel()) { @@ -92,27 +98,33 @@ public class NEXIOArchiveCheckerStep extends JobStep { //negativ ha a masodik az elso elott van long modifiedHours = Duration.between(clipModified, Instant.now()).toHours(); if (modifiedHours > lastModifiedHours) { - logger.info(getSessionMarker(), "Modification time is too cloose for {}"); + logger.info(getMarker(), "Modification time is too cloose for {}", title); continue; } mediaId = media.getId(); } String fileName = title + DOT_MXF; - DownloadableMedia downloadable = DownloadableMedia.create(title, fileName, modified, created, frames, 0, storeUriId, mediaId); + DownloadableMedia downloadable = DownloadableMedia.create(title, fileName, modified, created, frames, 0, sourceStoreUri.getId(), + targetStoreUri.getId(), mediaId); String escortFileName = storeName + "." + downloadable.getString("fileName"); if (EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, downloadable.toPrettyString(""))) { - logger.info(getSessionMarker(), "Archive status file created for {}", fileName); - count--; + logger.info(getMarker(), "Archive status file created for {}", fileName); + currentCount++; } } - //vegtelen : limit<=0 - if (count == 0) { - logger.info("Limit reached: {}", limit); + if (limit > 0) { + int p = (currentCount / limit) * 100; + setProgress(p); + } + + if (currentCount == limit) { + logger.info(getMarker(), "Limit reached: {}", limit); break; } + // logger.info(getSessionMarker(), "{} {}", limit, currentCount); } } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/PBQuery.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/PBQuery.java new file mode 100644 index 00000000..9566b6bb --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/PBQuery.java @@ -0,0 +1,308 @@ +package user.jobengine.server.steps; + +import java.io.DataInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.StringReader; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.TreeMap; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.apache.commons.lang.StringUtils; +import org.apache.http.Header; +import org.apache.http.HttpEntity; +import org.apache.http.HttpResponse; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.BasicHttpParams; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; +import org.apache.http.protocol.HTTP; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +public class PBQuery { + public class MMMedia { + String name; + String usage; + } + + private static final Logger logger = LogManager.getLogger(); + private static final int CONNECTION_TIMEOUT = 1000; + private static final int SOCKET_TIMEOUT = 2000; + public static final String GETMEDIAUSAGEBYUTRANGE = "/getMediaUsageByUTRange"; + public static final String GETCUSTOMVIEW = "/getCustomView"; + + public static final String SOAP_TEMPLATE_ROOT = System.getProperty("jobengine.soap.template.root", "/opt/mediacube/configuration/soap"); + + private static Document toDocument(String xml) { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = null; + try { + builder = factory.newDocumentBuilder(); + Document doc = builder.parse(new InputSource(new StringReader(xml))); + return doc; + } catch (Exception e) { + logger.error(e.getMessage()); + } + return null; + } + + private SimpleDateFormat sdf_range = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:'00'"); + private String primaryEndPoint; + private String primaryUserName; + private String primaryPassword; + private String secondaryEndPoint; + private String secondaryUserName; + + private String secondaryPassword; + + private int rangeForwardHours; + + private String getAttribute(Node node, String name) { + String result = null; + if (node != null && node.hasAttributes()) { + NamedNodeMap attributes = node.getAttributes(); + if (attributes != null) { + Node mediaNameNode = attributes.getNamedItem(name); + if (mediaNameNode != null) + result = mediaNameNode.getNodeValue(); + } + } + return result; + } + + public LinkedHashSet getPossibelMissingMaterialNames(List poolContent) throws Exception { + LinkedHashSet result = querySortableMedias(poolContent); + LinkedHashSet otherMedias = queryOtherMedias(poolContent); + result.addAll(otherMedias); + return result; + + } + + public void init(String primaryEndPoint, String primaryUserName, String primaryPassword, String secondaryEndPoint, String secondaryUserName, + String secondaryPassword, int rangeForwardHours) throws Exception { + this.primaryEndPoint = primaryEndPoint; + this.primaryUserName = primaryUserName; + this.primaryPassword = primaryPassword; + this.secondaryEndPoint = secondaryEndPoint; + this.secondaryUserName = secondaryUserName; + this.secondaryPassword = secondaryPassword; + this.rangeForwardHours = rangeForwardHours; + } + + public String query(String endPoint, String action, String soap, String user, String pwd) throws Exception { + + HttpParams httpParameters = new BasicHttpParams(); + HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT); + HttpConnectionParams.setSoTimeout(httpParameters, SOCKET_TIMEOUT); + DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters); + //http://10.170.100.61:18083 + + String result = null; + DataInputStream is = null; + try { + URL url = new URL(endPoint); + httpclient.getCredentialsProvider().setCredentials(new AuthScope(url.getHost(), url.getPort(), null, "Digest"), + new UsernamePasswordCredentials(user, pwd)); + + HttpPost httppost = new HttpPost(url.toURI()); + httppost.setHeader("soapaction", action); + //Content-Type application/soap+xml; charset=utf-8; action="/getMediaUsageByUTRange" + httppost.setHeader("Content-Type", "text/xml; charset=utf-8"); + HttpEntity entity = new StringEntity(soap.toString(), HTTP.UTF_8); + httppost.setEntity(entity); + logger.info("Executing call"); + HttpResponse response = httpclient.execute(httppost);// calling server + HttpEntity r_entity = response.getEntity(); //get response + Header[] headers = response.getAllHeaders(); + for (Header h : headers) { + logger.info("Reponse Header", h.getName() + ": " + h.getValue()); + } + if (r_entity != null) { + byte[] bytes = new byte[(int) r_entity.getContentLength()]; + if (r_entity.isStreaming()) { + is = new DataInputStream(r_entity.getContent()); + is.readFully(bytes); + } + result = new String(bytes); + } + } catch (Exception e) { + logger.error("Exception While Connecting", "" + e.getMessage()); + throw e; + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + } + } + if (httpclient != null) { + httpclient.getConnectionManager().shutdown(); + } + } + + return result; + } + + public LinkedHashSet queryOtherMedias(List poolContent) throws Exception { + LinkedHashSet result = new LinkedHashSet<>(); + String xml = null; + String soap = null; + Path template = Paths.get(SOAP_TEMPLATE_ROOT, GETCUSTOMVIEW); + + if (!template.toFile().exists()) + throw new FileNotFoundException(template.toString()); + try { + soap = new String(Files.readAllBytes(template)); + xml = query(primaryEndPoint, GETCUSTOMVIEW, soap, primaryUserName, primaryPassword); + } catch (Exception e1) { + try { + xml = query(secondaryEndPoint, GETCUSTOMVIEW, soap, secondaryUserName, secondaryPassword); + } catch (Exception e2) { + } + } + + if (StringUtils.isNotBlank(xml)) { + + Document document = toDocument(xml); + NodeList mediaNodes = document.getElementsByTagName("media"); + + if (mediaNodes == null || mediaNodes.getLength() == 0) + return result; + + TreeMap usages = new TreeMap<>(); + + for (int i = 0; i < mediaNodes.getLength(); i++) { + Node mediaNode = mediaNodes.item(i); + String mediaName = getAttribute(mediaNode, "mediaName"); + if (StringUtils.isBlank(mediaName)) { + logger.info("Missing mediaName"); + continue; + } + + if (poolContent.contains(mediaName)) + continue; + + String usageTime = getAttribute(mediaNode, "earliestUsageTime"); + logger.info("{}, {}", mediaName, usageTime); + //a TreeMap lehetove teszi: nincs duplikatum + a korabbi musorok elore kerulnek + usages.put(usageTime + "_" + mediaName, mediaName); + + } + + for (String key : usages.keySet()) { + MMMedia media = new MMMedia(); + media.name = usages.get(key); + media.usage = key.split("_")[0]; + result.add(media); + } + logger.info("Document done, items {}", mediaNodes.getLength()); + } + return result; + } + + public LinkedHashSet querySortableMedias(List poolContent) throws Exception { + LinkedHashSet result = new LinkedHashSet<>(); + String xml = null; + String soap = null; + + Path template = Paths.get(SOAP_TEMPLATE_ROOT, GETMEDIAUSAGEBYUTRANGE); + if (!template.toFile().exists()) + throw new FileNotFoundException(template.toString()); + + try { + long now = System.currentTimeMillis(); + Calendar cal = Calendar.getInstance(); + cal.setTimeInMillis(now); + cal.add(Calendar.HOUR_OF_DAY, rangeForwardHours); + + String fromDateStr = sdf_range.format(new Date(now)); + String toDateStr = sdf_range.format(cal.getTime()); + + soap = new String(Files.readAllBytes(template)); + soap = soap.replace("{start}", fromDateStr); + soap = soap.replace("{end}", toDateStr); + + xml = query(primaryEndPoint, GETMEDIAUSAGEBYUTRANGE, soap, primaryUserName, primaryPassword); + } catch (Exception e1) { + try { + xml = query(secondaryEndPoint, GETMEDIAUSAGEBYUTRANGE, soap, secondaryUserName, secondaryPassword); + } catch (Exception e2) { + } + } + + if (StringUtils.isNotBlank(xml)) { + + Document document = toDocument(xml); + NodeList mediaNodes = document.getElementsByTagName("mediaUsage"); + + if (mediaNodes == null || mediaNodes.getLength() == 0) + return result; + + TreeMap usages = new TreeMap<>(); + + for (int i = 0; i < mediaNodes.getLength(); i++) { + Node mediaNode = mediaNodes.item(i); + String mediaName = getAttribute(mediaNode, "mediaName"); + if (StringUtils.isBlank(mediaName)) { + logger.info("Missing mediaName"); + continue; + } + + if (poolContent.contains(mediaName)) + continue; + + Node usageChild = mediaNode.getFirstChild(); + if (usageChild == null) { + logger.info("Skipping {}, no media usage defined", mediaName); + continue; + } + + NodeList usageNodes = usageChild.getChildNodes(); + if (usageNodes == null || usageNodes.getLength() == 0) { + logger.info("Skipping {}, no media usage defined", mediaName); + continue; + } + + for (int j = 0; j < usageNodes.getLength(); j++) { + Node mediaUsageNode = usageNodes.item(j); + String usageTime = getAttribute(mediaUsageNode, "earliestUsageTime"); + logger.info("{}, {}", mediaName, usageTime); + //a TreeMap lehetove teszi: nincs duplikatum + a korabbi musorok elore kerulnek + usages.put(usageTime + "_" + mediaName, mediaName); + } + + } + + for (String key : usages.keySet()) { + MMMedia media = new MMMedia(); + media.name = usages.get(key); + media.usage = key.split("_")[0]; + result.add(media); + } + logger.info("Document done, items {}", mediaNodes.getLength()); + + } + return result; + } + +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/RegisterUserRestoreStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/RegisterUserRestoreStep.java new file mode 100644 index 00000000..c98f2ce4 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/RegisterUserRestoreStep.java @@ -0,0 +1,70 @@ +package user.jobengine.server.steps; + +import java.nio.file.Paths; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.DownloadableMedia; +import user.commons.StoreUri; +import user.commons.remotestore.RemoteStoreProtocol; +import user.jobengine.db.ArchivedMedia; +import user.jobengine.db.Media; + +public class RegisterUserRestoreStep extends JobStep { + private static final Logger logger = LogManager.getLogger(); + private static final String appendExtension = System.getProperty("missingmaterial.appendextension", ".mxf"); + + @StepEntry + public Object[] execute(String escortStoreName, String targetStoreName, List basket, String recipient) throws Exception { + StoreUri escortStoreUri = null; + try { + escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL); + StoreUri targetStoreUri = getManager().getStore(targetStoreName).getTargetStoreUri(); + StoreUri sourceStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM); + int processed = 0; + for (ArchivedMedia media : basket) { + processRecord(media, targetStoreName, sourceStoreUri, targetStoreUri, escortStoreUri, recipient); + processed++; + int progress = processed * 100 / basket.size(); + setProgress(progress); + } + } catch (Exception e) { + logger.error(getSessionMarker(), e.getMessage()); + throw e; + } finally { + if (escortStoreUri != null) + escortStoreUri.cleanUp(); + } + + return null; + } + + private void processRecord(ArchivedMedia archivedMedia, String targetStoreName, StoreUri sourceStoreUri, StoreUri targetStoreUri, StoreUri escortStoreUri, + String recipient) { + Media media = archivedMedia.getMedia(); + + String fileName = media.getTitle(); + if (StringUtils.isNotBlank(appendExtension)) + fileName += appendExtension; + + DownloadableMedia downloadable = DownloadableMedia.create(media.getTitle(), fileName, media.getModified(), media.getCreated(), media.getLength(), 0L, + sourceStoreUri.getId(), targetStoreUri.getId(), media.getId()); + downloadable.put("recipient", recipient); + String escortFileName = targetStoreName + "." + downloadable.getString("fileName"); + String outputPath = null; + try { + outputPath = Paths.get(escortStoreUri.toString(true)).toString(); + if (EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, downloadable.toPrettyString(""))) + logger.info(getSessionMarker(), "Status file created {}", escortFileName); + else + logger.info(getSessionMarker(), "Status file already exists {}", escortFileName); + } catch (Exception e) { + logger.error("Can't create escort file {}", Paths.get(outputPath.toString(), escortFileName)); + } + + } + +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TestForkCancelableStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TestForkCancelableStep.java index 6d0e2057..91d00a8d 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TestForkCancelableStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TestForkCancelableStep.java @@ -3,6 +3,9 @@ package user.jobengine.server.steps; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import user.commons.IJob; +import user.commons.JobStatus; +import user.commons.ListUtils; import user.jobengine.server.IJobEngine; import user.jobengine.server.IJobRuntime; @@ -11,18 +14,23 @@ public class TestForkCancelableStep extends JobStep { // private static final String CHILD_TEMPLATE = "fake-concurrent.xml"; private static final String CHILD_TEMPLATE = "cancelable.xml"; private static final Logger logger = LogManager.getLogger(); - int count = 2; + int count = 5; @StepEntry public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception { - if (jobRuntime.forkPrepare()) { - for (int i = 0; i < count; i++) { - //jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i)); - jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, null); - } + //jobRuntime.forkPrepare(); + for (int i = 0; i < count; i++) { + //jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i)); + // IJobRuntime runtime = jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, "JOB " + i, ListUtils.asMap("param", i)); + IJobRuntime runtime = getEngine().submit(null, e -> { + if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED)) + logger.info("Cleanup occured because status is {} {}", e.getStatus(), ((IJob) e.getSource()).getId()); + }, CHILD_TEMPLATE, "JOB " + i, 0, IJobEngine.DEFAULT_OWNER, ListUtils.asMap("param", i)); + + runtime.setRelated("TEST" + runtime.getId()); } - jobRuntime.forkWaitComplete(); + // jobRuntime.forkWaitComplete(); logger.info("Done"); return null; } diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TransferStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TransferStep.java index ac382368..804c5d26 100644 --- a/server/user.jobengine.executors/src/user/jobengine/server/steps/TransferStep.java +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TransferStep.java @@ -10,19 +10,21 @@ import user.commons.remotestore.RemoteStoreProtocol; public class TransferStep extends JobStep { private static final Logger logger = LogManager.getLogger(); - private static final boolean symulateTransferToTSM = Boolean.parseBoolean(System.getProperty("test.simulate.transfer.tsm", "false")); + private static final boolean simulateTransferToTSM = Boolean.parseBoolean(System.getProperty("test.simulate.transfer.tsm", "false")); @StepEntry public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { try { String description = Paths.get(sourceStoreUri.toString(true), sourceFileName).toString(); getJobRuntime().setDescription(description); + + //logger.info(getSessionMarker(), String.valueOf(isSimulateTSMWrite(sourceStoreUri, targetStoreUri))); if (isSimulateTSMWrite(sourceStoreUri, targetStoreUri)) { - logger.info(getSessionMarker(), "Skipping real TSM write of {} from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri); + logger.info(getMarker(), "Skipping real TSM write of {} from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri); } else { sourceStoreUri.addProgressListener(e -> setProgress(e.getProgress())); sourceStoreUri.transferFrom(targetStoreUri, sourceFileName, targetFileName); - logger.info(getSessionMarker(), "Transfer of {} completed from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri); + logger.info(getMarker(), "Transfer of {} completed from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri); } } catch (Exception e) { logger.error(getSessionMarker(), "Error in transfer of {} when copying from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri); @@ -37,6 +39,6 @@ public class TransferStep extends JobStep { } private boolean isSimulateTSMWrite(StoreUri sourceStoreUri, StoreUri targetStoreUri) { - return symulateTransferToTSM && (RemoteStoreProtocol.TSM.equals(targetStoreUri.getProtocol())); + return simulateTransferToTSM && (RemoteStoreProtocol.TSM.equals(targetStoreUri.getProtocol())); } } diff --git a/server/user.jobengine.osgi.commons/deploy.launch b/server/user.jobengine.osgi.commons/build-user-jobengine-osgi-commons.launch similarity index 100% rename from server/user.jobengine.osgi.commons/deploy.launch rename to server/user.jobengine.osgi.commons/build-user-jobengine-osgi-commons.launch diff --git a/server/user.jobengine.osgi.commons/src/pb/wsclient/PBClientTest.java b/server/user.jobengine.osgi.commons/src/pb/wsclient/PBClientTest.java deleted file mode 100644 index ca10a8f7..00000000 --- a/server/user.jobengine.osgi.commons/src/pb/wsclient/PBClientTest.java +++ /dev/null @@ -1,73 +0,0 @@ -package pb.wsclient; - -import java.net.URL; -import java.util.List; -import javax.xml.ws.BindingProvider; - - -public class PBClientTest { - - - //KONSTRUKTOR - public PBClientTest() { - try { - - URL wsdlURL = PBClientTest.class.getClassLoader().getResource("MarinaAPI.wsdl"); - - PBSMarinaAPIService api = new PBSMarinaAPIService(wsdlURL); - PBSMarinaAPI port = api.getPBSMarinaAPISOAPPort(); - - BindingProvider bp = (BindingProvider)port; - bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://10.170.100.5:18083"); - - //Optional credentials - bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "pbs"); - bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pbs"); - - - DateTimecodeRangeContainer rangec = new DateTimecodeRangeContainer(); - DateTimecodeRange range = new DateTimecodeRange(); - range.setStart("2019-03-26T10:00:00:00"); //now - range.setEnd("2019-03-29T10:00:00:00"); //now + x hours - rangec.setDateTimecodeRange(range); - - - - MediaUsageListContainer mulc = port.getMediaUsageByUTRange(rangec,false,true); - MediaUsageList mul = mulc.getMediaUsageList(); - - List mediaList = mul.getMediaUsage(); - java.lang.System.out.println("response ok: " + mediaList.size()); - for(MediaUsage mu : mediaList) { - - if(MediaType.VIDEO.equals(mu.getMediaType())) { - java.lang.System.out.println(mu.getMediaName() + " ***********************"); - MediaUsage.MediaInstancesUsage muUsage = mu.getMediaInstancesUsage(); - List muUsageList = muUsage.getMediaInstanceUsage(); - for(MediaInstanceUsage usage : muUsageList) { - java.lang.System.out.println(" LastUsageTime(): " + usage.getLastUsageTime() + ", EarliestUsageTime(): " + usage.getEarliestUsageTime()); - } - }else { - java.lang.System.out.println("Skip media type: " + mu.getMediaType() + " for: " + mu.getMediaName()); - } - - //MediaType muType = mu.getMediaType(); - } - - - //\\10.170.100.10\media - - }catch(Exception exc) { - exc.printStackTrace(); - } - } - - - - - public static void main(String[] args) { - new PBClientTest(); - - } - -} diff --git a/server/user.jobengine.osgi.commons/src/user/commons/DownloadableMedia.java b/server/user.jobengine.osgi.commons/src/user/commons/DownloadableMedia.java index 9304a403..a7288405 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/DownloadableMedia.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/DownloadableMedia.java @@ -6,8 +6,8 @@ import com.ibm.nosql.json.api.BasicDBObject; public class DownloadableMedia extends BasicDBObject { - public static DownloadableMedia create(String title, String fileName, Timestamp modified, Timestamp created, long frames, long size, long storeUriId, - long mediaId) { + public static DownloadableMedia create(String title, String fileName, Timestamp modified, Timestamp created, long frames, long size, long sourceStoreUriId, + long targetStoreUriId, long mediaId) { DownloadableMedia archive = new DownloadableMedia(); archive.put("title", title); archive.put("fileName", fileName); @@ -15,7 +15,8 @@ public class DownloadableMedia extends BasicDBObject { archive.put("created", created); archive.put("frames", frames); archive.put("size", size); - archive.put("storeUriId", storeUriId); + archive.put("sourceStoreUriId", sourceStoreUriId); + archive.put("targetStoreUriId", targetStoreUriId); archive.put("mediaId", mediaId); return archive; } diff --git a/server/user.jobengine.osgi.commons/src/user/commons/IJob.java b/server/user.jobengine.osgi.commons/src/user/commons/IJob.java index 5a9dbfb8..948aa44d 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/IJob.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/IJob.java @@ -13,12 +13,16 @@ public interface IJob extends IEntityBase { String getOwner(); + Map getParameters(); + long getParentJobId(); int getPriority(); int getProgress(); + String getRelated(); + Timestamp getScheduledTime(); JobStatus getStatus(); @@ -47,6 +51,8 @@ public interface IJob extends IEntityBase { void setProgress(int progress); + void setRelated(String related); + void setScheduledTime(Timestamp scheduledTime); void setStatus(JobStatus status); diff --git a/server/user.jobengine.osgi.commons/src/user/commons/Job.java b/server/user.jobengine.osgi.commons/src/user/commons/Job.java index 1bd10cd2..49200ffe 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/Job.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/Job.java @@ -11,13 +11,15 @@ public class Job extends Syncable implements IJob, Comparable { protected final static AtomicLong counter1 = new AtomicLong(); protected volatile int priority; - protected String name = null; - protected String owner = null; - protected volatile JobStatus status = null; - protected volatile String description = null; - protected String template = null; - protected volatile Timestamp submitted = null; - protected volatile Timestamp finished = null; + private Map parameters; + protected String name; + protected String owner; + private String related; + protected volatile JobStatus status; + protected volatile String description; + protected String template; + protected volatile Timestamp submitted; + protected volatile Timestamp finished; protected volatile int progress; private Timestamp scheduledTime; private long parentJobId; @@ -71,6 +73,11 @@ public class Job extends Syncable implements IJob, Comparable { return owner; } + @Override + public Map getParameters() { + return parameters; + } + @Override public long getParentJobId() { return parentJobId; @@ -86,6 +93,11 @@ public class Job extends Syncable implements IJob, Comparable { return progress; } + @Override + public String getRelated() { + return related; + } + @Override @XmlJavaTypeAdapter(TimestampAdapter.class) public Timestamp getScheduledTime() { @@ -139,6 +151,7 @@ public class Job extends Syncable implements IJob, Comparable { @Override public void setParameters(Map parameters) { + this.parameters = parameters; } @Override @@ -158,6 +171,11 @@ public class Job extends Syncable implements IJob, Comparable { this.progress = progress; } + @Override + public void setRelated(String related) { + this.related = related; + } + @Override public void setScheduledTime(Timestamp scheduledTime) { this.scheduledTime = scheduledTime; @@ -182,4 +200,5 @@ public class Job extends Syncable implements IJob, Comparable { public String toString() { return String.format("## %d / %s / %s [%s] ##", getId(), getName(), getTemplate(), status); } + } diff --git a/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java b/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java index 5c3f94d5..9f0db73e 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/StoreUri.java @@ -228,7 +228,8 @@ public class StoreUri extends EntityBase implements Serializable { public RemoteFile getRemoteFile(String fileName) throws Exception { ensureLister(); - return lister.get(fileName); + RemoteFile remoteFile = lister.get(fileName); + return remoteFile; } public List getRemoteFiles() throws Exception { @@ -386,7 +387,7 @@ public class StoreUri extends EntityBase implements Serializable { RemoteFile remoteFile = lister.get(fileName); if (remoteFile == null) throw new Exception(String.format("RemoteFile '%s' not exists.", fileName)); - logger.info("RemoteFile:" + remoteFile.getName() + " " + remoteFile.getSize()); + logger.info("Transfering RemoteFile {}, size {}", remoteFile.getName(), remoteFile.getSize()); IDirectoryLister outputLister = RemoteFileHandler.createLister(targetStoreUri); if (outputLister == null) throw new Exception("OutputLister is null."); diff --git a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMInputStream.java b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMInputStream.java index 1ea413dd..9638e979 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMInputStream.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMInputStream.java @@ -15,28 +15,23 @@ public class TSMInputStream extends InputStream { private static final Logger logger = LogManager.getLogger(); private TSMBufferedClient client; private TSMBackupFileObject backupObject; - private String filespaceName; - private String highLevelName; private RemoteFile remoteFile; private boolean initialized; - public TSMInputStream(TSMBufferedClient client, String filespaceName, String highLevelName, RemoteFile remoteFile) { + public TSMInputStream(TSMBufferedClient client, RemoteFile remoteFile) { this.client = client; - this.filespaceName = filespaceName; - this.highLevelName = highLevelName; this.remoteFile = remoteFile; } @Override public void close() { client.disconnect(); - logger.info("TSM lekapcsol�dott!"); + logger.info("TSM disconnected"); } public void open() throws TSMException { - backupObject = client.getActiveBackupFileObject(filespaceName, highLevelName, remoteFile.getName()); - logger.info("BackupObject created"); + backupObject = (TSMBackupFileObject) remoteFile.getSourceObject(); } @Override diff --git a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMLister.java b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMLister.java index a7ffedd5..8129cda5 100644 --- a/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMLister.java +++ b/server/user.jobengine.osgi.commons/src/user/commons/remotestore/TSMLister.java @@ -17,16 +17,17 @@ import user.tsm.client.TSMBufferedClient; public class TSMLister implements IDirectoryLister { - private static final String FSNAME = File.separator + System.getProperty("tsm.fsname", "JOBENGINE"); - private static final String HLNAME = File.separator + System.getProperty("tsm.hlname", "JOBENGINE"); + private static final String NODENAME = System.getProperty("tsm.nodename", "JOBENGINE"); + private static final String FSNAME = System.getProperty("tsm.fsname", "JOBENGINE"); + private static final String HLNAME = System.getProperty("tsm.hlname", "JOBENGINE"); private static final Logger logger = LogManager.getLogger(); private TSMBufferedClient client; public TSMLister(StoreUri storeUri) throws Exception { - client = new TSMBufferedClient(); - logger.info("TSMBufferedClient created!"); + client = new TSMBufferedClient(NODENAME); + logger.info("TSMBufferedClient created"); client.connect(storeUri.getUserName(), storeUri.getPassword()); - logger.info("TSMBufferedClient connected!"); + logger.info("TSMBufferedClient connected, parameters: {} {} {}, separator: {}", NODENAME, FSNAME, HLNAME, File.separator); } @Override @@ -61,19 +62,31 @@ public class TSMLister implements IDirectoryLister { @Override public RemoteFile get(String fileName) throws Exception { RemoteFile result = null; - TSMBackupFileObject backupFileObject = client.getActiveBackupFileObject(FSNAME, HLNAME, File.separator + fileName); - logger.info("TSMLister get"); + + String currentFileName = fileName; + logger.info("Getting {}, {}, {}", FSNAME, HLNAME, currentFileName); + TSMBackupFileObject backupFileObject = client.getActiveBackupFileObject(FSNAME, "\\", "\\" + currentFileName); + + //probaljuk meg kiterjesztes nelkul is + if (backupFileObject == null && currentFileName.contains(".")) { + currentFileName = fileName.substring(0, fileName.lastIndexOf(".")); + logger.info("Getting {}, {}, {}", FSNAME, HLNAME, currentFileName); + backupFileObject = client.getActiveBackupFileObject(FSNAME, "\\", "\\" + currentFileName); + } + if (backupFileObject != null) { result = toRemoteFile(backupFileObject); - logger.info("BackupFileObject: " + backupFileObject.getLowLevelName()); - } else + logger.info("Got object {}, {}, {}", FSNAME, HLNAME, currentFileName); + } else { + logger.info("Object not exists {}, {}, {}", FSNAME, HLNAME, currentFileName); cleanUp(); + } return result; } @Override public InputStream getInputStream(RemoteFile remoteFile) throws Exception { - TSMInputStream inputStream = new TSMInputStream(client, FSNAME, HLNAME, remoteFile); + TSMInputStream inputStream = new TSMInputStream(client, remoteFile); logger.info("TSM InputStream created"); inputStream.open(); return inputStream; @@ -118,6 +131,7 @@ public class TSMLister implements IDirectoryLister { RemoteFile result = new RemoteFile(); result.setName(file.getLowLevelName()); result.setSize(file.getSizeEstimate()); + result.setSourceObject(file); return result; } } diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/BreakDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/BreakDAO_SJProfile0.ser index c372d026..880386d4 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/BreakDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/BreakDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainCategoryDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainCategoryDAO_SJProfile0.ser index de4d57b9..fe5d6cf1 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainCategoryDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainCategoryDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainDAO_SJProfile0.ser index 0f3df58d..33e78297 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainIndexDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainIndexDAO_SJProfile0.ser index f44597f0..4b246573 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainIndexDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/DomainIndexDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/EntityBaseDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/EntityBaseDAO_SJProfile0.ser index 676f061d..ba588c78 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/EntityBaseDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/EntityBaseDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/FileTypeDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/FileTypeDAO_SJProfile0.ser index bdcf6fa6..10a12a48 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/FileTypeDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/FileTypeDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/FolderDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/FolderDAO_SJProfile0.ser index 3e7ddf78..ffb9a79c 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/FolderDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/FolderDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/HelperDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/HelperDAO_SJProfile0.ser index 5cc27e39..a51a003e 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/HelperDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/HelperDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/ItemDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/ItemDAO_SJProfile0.ser index 1fbc0c8a..7199db4e 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/ItemDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/ItemDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/ItemTypeDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/ItemTypeDAO_SJProfile0.ser index c0d5873b..74fea23f 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/ItemTypeDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/ItemTypeDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/JobDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/JobDAO_SJProfile0.ser index 75ce30f0..919dd7a9 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/JobDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/JobDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/JobParametersDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/JobParametersDAO_SJProfile0.ser index 33857e11..e4e2ef02 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/JobParametersDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/JobParametersDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MasterIdDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MasterIdDAO_SJProfile0.ser index 8b3f2052..bd72e112 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MasterIdDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MasterIdDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaDAO_SJProfile0.ser index 14bcb65a..5a151de7 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaFileDAO.java b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaFileDAO.java index 353230a0..fa1382df 100644 --- a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaFileDAO.java +++ b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaFileDAO.java @@ -16,6 +16,7 @@ class MediaFileIter extends sqlj.runtime.ref.ResultSetIterImpl implements sqlj.runtime.NamedIterator { + private int fileSizeNdx; private int houseIdNdx; private int fileStructInfoNdx; private int relativePathNdx; @@ -34,6 +35,7 @@ implements sqlj.runtime.NamedIterator relativePathNdx = findColumn("relativePath"); fileStructInfoNdx = findColumn("fileStructInfo"); houseIdNdx = findColumn("houseId"); + fileSizeNdx = findColumn("fileSize"); } public MediaFileIter(sqlj.runtime.profile.RTResultSet resultSet, int fetchSize, int maxRows) throws java.sql.SQLException @@ -46,6 +48,7 @@ implements sqlj.runtime.NamedIterator relativePathNdx = findColumn("relativePath"); fileStructInfoNdx = findColumn("fileStructInfo"); houseIdNdx = findColumn("houseId"); + fileSizeNdx = findColumn("fileSize"); } public long id() throws java.sql.SQLException @@ -82,12 +85,17 @@ implements sqlj.runtime.NamedIterator { return resultSet.getString(houseIdNdx); } + public long fileSize() + throws java.sql.SQLException + { + return resultSet.getLongNoNull(fileSizeNdx); + } } // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:9^140*/ +/*@lineinfo:user-code*//*@lineinfo:9^155*/ @SuppressWarnings("unused") public class MediaFileDAO extends EntityBaseDAO { @@ -109,6 +117,7 @@ public class MediaFileDAO extends EntityBaseDAO { entity.setRelativePath(iterator.relativePath()); entity.setFileStructInfo(iterator.fileStructInfo()); entity.setHouseId(iterator.houseId()); + entity.setFileSize(iterator.fileSize()); if (result == null) result = new ArrayList(); @@ -121,10 +130,10 @@ public class MediaFileDAO extends EntityBaseDAO { @Override protected ResultSetIterImpl selectByKey(DefaultContext context, long id) throws SQLException{ MediaFileIter iter = null; - /*@lineinfo:generated-code*//*@lineinfo:43^2*/ + /*@lineinfo:generated-code*//*@lineinfo:44^2*/ // ************************************************************ -// #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE WHERE ID = :id }; +// #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE WHERE ID = :id }; // ************************************************************ { @@ -149,17 +158,17 @@ public class MediaFileDAO extends EntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:43^135*/ +/*@lineinfo:user-code*//*@lineinfo:44^145*/ return iter; } @Override protected ResultSetIterImpl selectByForeignKey(DefaultContext context, long id) throws SQLException{ MediaFileIter iter = null; - /*@lineinfo:generated-code*//*@lineinfo:50^2*/ + /*@lineinfo:generated-code*//*@lineinfo:51^2*/ // ************************************************************ -// #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE WHERE MEDIAID = :id }; +// #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE WHERE MEDIAID = :id }; // ************************************************************ { @@ -184,17 +193,17 @@ public class MediaFileDAO extends EntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:50^140*/ +/*@lineinfo:user-code*//*@lineinfo:51^150*/ return iter; } @Override protected ResultSetIterImpl selectAll(DefaultContext context) throws SQLException{ MediaFileIter iter = null; - /*@lineinfo:generated-code*//*@lineinfo:57^2*/ + /*@lineinfo:generated-code*//*@lineinfo:58^2*/ // ************************************************************ -// #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE }; +// #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE }; // ************************************************************ { @@ -218,13 +227,13 @@ public class MediaFileDAO extends EntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:57^120*/ +/*@lineinfo:user-code*//*@lineinfo:58^130*/ return iter; } @Override protected void delete(DefaultContext context, long id) throws SQLException{ - /*@lineinfo:generated-code*//*@lineinfo:63^2*/ + /*@lineinfo:generated-code*//*@lineinfo:64^2*/ // ************************************************************ // #sql [context] { DELETE FROM MEDIAFILE WHERE ID = :id }; @@ -252,12 +261,12 @@ public class MediaFileDAO extends EntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:63^56*/ +/*@lineinfo:user-code*//*@lineinfo:64^56*/ } @Override protected void truncateTable(DefaultContext context) throws SQLException{ - /*@lineinfo:generated-code*//*@lineinfo:68^2*/ + /*@lineinfo:generated-code*//*@lineinfo:69^2*/ // ************************************************************ // #sql [context] { TRUNCATE TABLE MEDIAFILE DROP STORAGE IGNORE DELETE TRIGGERS IMMEDIATE }; @@ -284,7 +293,7 @@ public class MediaFileDAO extends EntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:68^90*/ +/*@lineinfo:user-code*//*@lineinfo:69^90*/ } @Override @@ -297,11 +306,12 @@ public class MediaFileDAO extends EntityBaseDAO { String relativePath = obj.getRelativePath(); String fileStructInfo = obj.getFileStructInfo(); String houseId = obj.getHouseId(); + long fileSize = obj.getFileSize(); - /*@lineinfo:generated-code*//*@lineinfo:82^2*/ + /*@lineinfo:generated-code*//*@lineinfo:84^2*/ // ************************************************************ -// #sql [context] { UPDATE MEDIAFILE SET MEDIAID = :mediaId, STOREID = :storeId, FILETYPEID = :fileTypeId, RELATIVEPATH = :relativePath, FILESTRUCTINFO = :fileStructInfo, HOUSEID = :houseId WHERE ID = :id }; +// #sql [context] { UPDATE MEDIAFILE SET MEDIAID = :mediaId, STOREID = :storeId, FILETYPEID = :fileTypeId, RELATIVEPATH = :relativePath, FILESTRUCTINFO = :fileStructInfo, HOUSEID = :houseId, FILESIZE = :fileSize WHERE ID = :id }; // ************************************************************ { @@ -319,7 +329,8 @@ public class MediaFileDAO extends EntityBaseDAO { __sJT_stmt.setString(4, relativePath); __sJT_stmt.setString(5, fileStructInfo); __sJT_stmt.setString(6, houseId); - __sJT_stmt.setLong(7, id); + __sJT_stmt.setLong(7, fileSize); + __sJT_stmt.setLong(8, id); __sJT_execCtx.executeUpdate(); } finally @@ -332,7 +343,7 @@ public class MediaFileDAO extends EntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:82^204*/ +/*@lineinfo:user-code*//*@lineinfo:84^226*/ } @Override @@ -344,11 +355,12 @@ public class MediaFileDAO extends EntityBaseDAO { String relativePath = obj.getRelativePath(); String fileStructInfo = obj.getFileStructInfo(); String houseId = obj.getHouseId(); + long fileSize = obj.getFileSize(); - /*@lineinfo:generated-code*//*@lineinfo:95^2*/ + /*@lineinfo:generated-code*//*@lineinfo:98^2*/ // ************************************************************ -// #sql [context] { INSERT INTO MEDIAFILE (MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID) VALUES (:mediaId, :storeId, :fileTypeId, :relativePath, :fileStructInfo, :houseId) }; +// #sql [context] { INSERT INTO MEDIAFILE (MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE) VALUES (:mediaId, :storeId, :fileTypeId, :relativePath, :fileStructInfo, :houseId, :fileSize) }; // ************************************************************ { @@ -366,6 +378,7 @@ public class MediaFileDAO extends EntityBaseDAO { __sJT_stmt.setString(4, relativePath); __sJT_stmt.setString(5, fileStructInfo); __sJT_stmt.setString(6, houseId); + __sJT_stmt.setLong(7, fileSize); __sJT_execCtx.executeUpdate(); } finally @@ -378,7 +391,7 @@ public class MediaFileDAO extends EntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:95^194*/ +/*@lineinfo:user-code*//*@lineinfo:98^215*/ } void addAll(DefaultContext context, IEntityBase entity) throws SQLException { @@ -399,7 +412,7 @@ public class MediaFileDAO extends EntityBaseDAO { void removeAll(DefaultContext context, long filterId) throws SQLException { manager.traceIn(); - /*@lineinfo:generated-code*//*@lineinfo:116^2*/ + /*@lineinfo:generated-code*//*@lineinfo:119^2*/ // ************************************************************ // #sql [context] { DELETE FROM MEDIAFILE WHERE MEDIAID = :filterId }; @@ -427,16 +440,16 @@ public class MediaFileDAO extends EntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:116^67*/ +/*@lineinfo:user-code*//*@lineinfo:119^67*/ manager.traceOut(); } private MediaFileIter selectByHouseId(DefaultContext context, String houseId) throws SQLException{ MediaFileIter iter = null; - /*@lineinfo:generated-code*//*@lineinfo:122^2*/ + /*@lineinfo:generated-code*//*@lineinfo:125^2*/ // ************************************************************ -// #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE WHERE HOUSEID = :houseId }; +// #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE WHERE HOUSEID = :houseId }; // ************************************************************ { @@ -461,7 +474,7 @@ public class MediaFileDAO extends EntityBaseDAO { // ************************************************************ -/*@lineinfo:user-code*//*@lineinfo:122^145*/ +/*@lineinfo:user-code*//*@lineinfo:125^155*/ return iter; } diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaFileDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaFileDAO_SJProfile0.ser index 67048993..2c428e03 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaFileDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MediaFileDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataDAO_SJProfile0.ser index 3d961db8..64adbf78 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataElementDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataElementDAO_SJProfile0.ser index e0683368..9e807e6c 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataElementDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataElementDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataTypeDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataTypeDAO_SJProfile0.ser index e5284973..a23e1a23 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataTypeDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/MetadataTypeDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/RemoteStoreDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/RemoteStoreDAO_SJProfile0.ser index 8b93baf4..3afde202 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/RemoteStoreDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/RemoteStoreDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/SceneContentDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/SceneContentDAO_SJProfile0.ser index 6d49a6a5..66e8bc16 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/SceneContentDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/SceneContentDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/SceneDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/SceneDAO_SJProfile0.ser index b3491513..84649387 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/SceneDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/SceneDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/SearchDefinitionDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/SearchDefinitionDAO_SJProfile0.ser index 31606588..45c69c4c 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/SearchDefinitionDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/SearchDefinitionDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/ShotDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/ShotDAO_SJProfile0.ser index 72087902..fcd3288c 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/ShotDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/ShotDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/StoreDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/StoreDAO_SJProfile0.ser index 9e266259..a1bc7f9d 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/StoreDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/StoreDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/StoreUriDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/StoreUriDAO_SJProfile0.ser index e503e68b..8b02ce0e 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/StoreUriDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/StoreUriDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/UserInfoDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/UserInfoDAO_SJProfile0.ser index 6111df5c..e41595b0 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/UserInfoDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/UserInfoDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/generated/user/jobengine/db/WorkflowActionDAO_SJProfile0.ser b/server/user.jobengine.osgi.db/generated/user/jobengine/db/WorkflowActionDAO_SJProfile0.ser index a0cd23ed..5f84c81e 100644 Binary files a/server/user.jobengine.osgi.db/generated/user/jobengine/db/WorkflowActionDAO_SJProfile0.ser and b/server/user.jobengine.osgi.db/generated/user/jobengine/db/WorkflowActionDAO_SJProfile0.ser differ diff --git a/server/user.jobengine.osgi.db/migrations/scripts/009_add_related_to_job.sql b/server/user.jobengine.osgi.db/migrations/scripts/009_add_related_to_job.sql new file mode 100644 index 00000000..fddbea58 --- /dev/null +++ b/server/user.jobengine.osgi.db/migrations/scripts/009_add_related_to_job.sql @@ -0,0 +1,39 @@ +-- +-- Copyright 2010-2016 the original author or authors. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +-- // Alter JOB table, add RELATED column +-- Migration SQL that makes the change goes here. + +ALTER TABLE JOB ADD COLUMN RELATED VARCHAR(255) +@ + +CREATE INDEX IDX_JOB_RELATED ON JOB ("RELATED") +@ + +CALL SYSPROC.ADMIN_CMD('REORG TABLE DB2ADMIN.JOB') +@ + +-- //@UNDO +-- SQL to undo the change goes here. + +DROP INDEX IDX_JOB_RELATED +@ + +ALTER TABLE JOB DROP COLUMN RELATED +@ + +CALL SYSPROC.ADMIN_CMD('REORG TABLE DB2ADMIN.JOB') +@ diff --git a/server/user.jobengine.osgi.db/migrations/scripts/010_add_lookup_related.sql b/server/user.jobengine.osgi.db/migrations/scripts/010_add_lookup_related.sql new file mode 100644 index 00000000..ef93c831 --- /dev/null +++ b/server/user.jobengine.osgi.db/migrations/scripts/010_add_lookup_related.sql @@ -0,0 +1,30 @@ +-- +-- Copyright 2010-2016 the original author or authors. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +-- // Add LOOKUP function for use dynamic like from sqlj +-- Migration SQL that makes the change goes here. + +CREATE OR REPLACE FUNCTION LOOKUP(col VARCHAR(255), search VARCHAR(255)) + RETURNS int + RETURN +SELECT LOCATE(search, LOWER(col)) FROM SYSIBM.SYSDUMMY1 +@ + +-- //@UNDO +-- SQL to undo the change goes here. + +DROP FUNCTION LOOKUP +@ diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/EntityBaseDAO.sqlj b/server/user.jobengine.osgi.db/src/user/jobengine/db/EntityBaseDAO.sqlj index 4cf5a483..891f413d 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/EntityBaseDAO.sqlj +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/EntityBaseDAO.sqlj @@ -10,7 +10,7 @@ import org.apache.logging.log4j.Logger; import sqlj.runtime.ref.DefaultContext; import sqlj.runtime.ref.ResultSetIterImpl; /** - * Az entit�sok alap DAO oszt�lya. + * Az entitasok alap DAO osztalya. */ @SuppressWarnings("unused") public abstract class EntityBaseDAO implements IEntityBaseDAO { @@ -117,6 +117,20 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { } return result; } + + @Override + public List getAll(IDAOIterProvider provider) { + List result = null; + DefaultContext context = manager.getDbContext(); + try { + result = getAll(context, provider); + } catch (Exception e) { + throw new ItemManagerException(e); + } finally { + manager.putDbContext(context); + } + return result; + } @Override public IEntityBase get(IDAOIterProvider provider) { @@ -147,6 +161,20 @@ public abstract class EntityBaseDAO implements IEntityBaseDAO { return entity; } + public List getAll(DefaultContext context, IDAOIterProvider provider) { + manager.traceIn(); + List result = null; + try { + ResultSetIterImpl iter = provider.get(context, this); + checkNull(iter, ResultSetIterImpl.class); + result = getList(context, iter, false, true); + } catch (Exception e) { + throw new ItemManagerException(e); + } + manager.traceOut(); + return result; + } + public List getAll(DefaultContext context) { manager.traceIn(); List result = null; diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/IEntityBaseDAO.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/IEntityBaseDAO.java index fb1f94d8..037914dd 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/IEntityBaseDAO.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/IEntityBaseDAO.java @@ -15,6 +15,8 @@ public interface IEntityBaseDAO { List getAll(long id); + List getAll(IDAOIterProvider provider); + void merge(IEntityBase entity); void modify(IEntityBase entity); diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java index ec8c788e..18ac3b28 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/IItemManager.java @@ -13,6 +13,7 @@ import sqlj.runtime.ref.DefaultContext; import user.commons.BaseType; import user.commons.IEntityBase; import user.commons.IEntityPersister; +import user.commons.IJob; import user.commons.Job; import user.commons.StoreUri; import user.commons.remotestore.RemoteStoreProtocol; @@ -218,6 +219,8 @@ public interface IItemManager extends IEntityPersister { */ List getItemTypes(); + List getJobsHistory(String related); + /** * Azonosító alapján elkér egy Verzió objektumot. * @@ -321,6 +324,8 @@ public interface IItemManager extends IEntityPersister { */ Store getSystemStore(boolean lowres); + List getTargetStores(); + /** * Ha a bemeneti paraméter alapján létezik ilyen felhasználó, akkor true-val tér vissza. * diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java index 52c4849f..2ee4361b 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/ItemManager.java @@ -29,6 +29,7 @@ import sqlj.runtime.ref.ResultSetIterImpl; import user.commons.BaseType; import user.commons.CalendarUtils; import user.commons.IEntityBase; +import user.commons.IJob; import user.commons.Job; import user.commons.ListUtils; import user.commons.StoreUri; @@ -824,6 +825,21 @@ public class ItemManager extends MemoryCache implements IItemManager { return result; } + @SuppressWarnings("unchecked") + @Override + public List getJobsHistory(String related) { + IEntityBaseDAO daoBase = getBaseDAO(Job.class); + return (List) (List) daoBase.getAll((context, dao) -> { + ResultSetIterImpl result = null; + try { + result = ((JobDAO) dao).selectByRelated(context, related); + } catch (SQLException e) { + logger.error(e.getMessage()); + } + return result; + }); + } + long getLastId(Statement st) throws SQLException { traceIn(); long id = 0; @@ -972,6 +988,20 @@ public class ItemManager extends MemoryCache implements IItemManager { return result; } + @SuppressWarnings("unchecked") + @Override + public List getTargetStores() { + StoreDAO dao = (StoreDAO) getBaseDAO(Store.class); + List stores = (List) (List) dao.getAll(); + List result = new ArrayList<>(); + for (Store store : stores) { + if (store.isSystem() || !store.hasTargetStoreUri()) + continue; + result.add(store); + } + return result; + } + @Override public boolean getUser(String userName, String password) { IEntityBase entity = getUserInfo(userName, password); diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/JobDAO.sqlj b/server/user.jobengine.osgi.db/src/user/jobengine/db/JobDAO.sqlj index b0bcd13f..924be001 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/JobDAO.sqlj +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/JobDAO.sqlj @@ -41,6 +41,7 @@ class JobDAO extends EntityBaseDAO { entity.setFinished(iterator.finished()); entity.setTemplate(iterator.template()); entity.setScheduledTime(iterator.scheduledTime()); + entity.setRelated(iterator.related()); if (result == null) result = new ArrayList(); result.add(entity); @@ -59,14 +60,20 @@ class JobDAO extends EntityBaseDAO { @Override protected ResultSetIterImpl selectByKey(DefaultContext context, long id) throws SQLException{ JobIter iter = null; - #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME FROM JOB WHERE ID = :id }; + #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED FROM JOB WHERE ID = :id }; return iter; } @Override protected ResultSetIterImpl selectAll(DefaultContext context) throws SQLException{ JobIter iter = null; - #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME FROM JOB }; + #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED FROM JOB }; + return iter; + } + + public ResultSetIterImpl selectByRelated(DefaultContext context, String related) throws SQLException{ + JobIter iter = null; + #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED FROM JOB WHERE LOOKUP(RELATED, :related) > 0 }; return iter; } @@ -94,8 +101,9 @@ class JobDAO extends EntityBaseDAO { Timestamp finished = obj.getFinished(); String template = obj.getTemplate(); Timestamp scheduledTime = obj.getScheduledTime(); - - #sql [context] { UPDATE JOB SET NAME = :name, OWNER = :owner, PRIORITY = :priority, PROGRESS = :progress, STATUS = :status, DESCRIPTION = :description, SUBMITTED = :submitted, FINISHED = :finished, TEMPLATE = :template, SCHEDULEDTIME = :scheduledTime WHERE ID = :id }; + String related = obj.getRelated(); + + #sql [context] { UPDATE JOB SET NAME = :name, OWNER = :owner, PRIORITY = :priority, PROGRESS = :progress, STATUS = :status, DESCRIPTION = :description, SUBMITTED = :submitted, FINISHED = :finished, TEMPLATE = :template, SCHEDULEDTIME = :scheduledTime, RELATED = :related WHERE ID = :id }; } @Override @@ -111,9 +119,10 @@ class JobDAO extends EntityBaseDAO { Timestamp finished = obj.getFinished(); String template = obj.getTemplate(); Timestamp scheduledTime = obj.getScheduledTime(); + String related = obj.getRelated(); - #sql [context] { INSERT INTO JOB (NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME) - VALUES (:name, :owner, :priority, :progress, :status, :description, :submitted, :finished, :template, :scheduledTime) }; + #sql [context] { INSERT INTO JOB (NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED) + VALUES (:name, :owner, :priority, :progress, :status, :description, :submitted, :finished, :template, :scheduledTime, :related) }; } public List getAllIncomplete(String template) { @@ -123,7 +132,7 @@ class JobDAO extends EntityBaseDAO { try { JobIter iter = null; //ResultSetIterImpl iter = null; - #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME + #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED FROM JOB WHERE TEMPLATE = :template AND STATUS IN ('EXECUTING', 'WAIT_EXECUTOR', 'WAIT_SUSPEND', 'RUNABLE')}; result = getList(context, iter, false); diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/JobIter.sqlj b/server/user.jobengine.osgi.db/src/user/jobengine/db/JobIter.sqlj index bee2d520..b3952393 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/JobIter.sqlj +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/JobIter.sqlj @@ -2,4 +2,4 @@ package user.jobengine.db; import java.sql.Timestamp; -#sql public iterator JobIter(long id, String name, String owner, int priority, int progress, String status, String description, Timestamp submitted, Timestamp finished, String template, Timestamp scheduledTime); +#sql public iterator JobIter(long id, String name, String owner, int priority, int progress, String status, String description, Timestamp submitted, Timestamp finished, String template, Timestamp scheduledTime, String related); diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFile.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFile.java index 2fe834c5..11b373f0 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFile.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFile.java @@ -15,6 +15,7 @@ public class MediaFile extends EntityBase implements Serializable { private String relativePath = null; private Store store = null; private long storeId = 0; + private long fileSize = 0; private String houseId = null; public String getFileStructInfo() { @@ -108,4 +109,12 @@ public class MediaFile extends EntityBase implements Serializable { this.storeId = id; } + public long getFileSize() { + return fileSize; + } + + public void setFileSize(long fileSize) { + this.fileSize = fileSize; + } + } \ No newline at end of file diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFileDAO.sqlj b/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFileDAO.sqlj index da5b04f3..1d5f3c15 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFileDAO.sqlj +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/MediaFileDAO.sqlj @@ -6,7 +6,7 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; -#sql iterator MediaFileIter(long id, long mediaId, long storeId, long fileTypeId, String relativePath, String fileStructInfo, String houseId); +#sql iterator MediaFileIter(long id, long mediaId, long storeId, long fileTypeId, String relativePath, String fileStructInfo, String houseId, long fileSize); @SuppressWarnings("unused") public class MediaFileDAO extends EntityBaseDAO { @@ -28,6 +28,7 @@ public class MediaFileDAO extends EntityBaseDAO { entity.setRelativePath(iterator.relativePath()); entity.setFileStructInfo(iterator.fileStructInfo()); entity.setHouseId(iterator.houseId()); + entity.setFileSize(iterator.fileSize()); if (result == null) result = new ArrayList(); @@ -40,21 +41,21 @@ public class MediaFileDAO extends EntityBaseDAO { @Override protected ResultSetIterImpl selectByKey(DefaultContext context, long id) throws SQLException{ MediaFileIter iter = null; - #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE WHERE ID = :id }; + #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE WHERE ID = :id }; return iter; } @Override protected ResultSetIterImpl selectByForeignKey(DefaultContext context, long id) throws SQLException{ MediaFileIter iter = null; - #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE WHERE MEDIAID = :id }; + #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE WHERE MEDIAID = :id }; return iter; } @Override protected ResultSetIterImpl selectAll(DefaultContext context) throws SQLException{ MediaFileIter iter = null; - #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE }; + #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE }; return iter; } @@ -78,8 +79,9 @@ public class MediaFileDAO extends EntityBaseDAO { String relativePath = obj.getRelativePath(); String fileStructInfo = obj.getFileStructInfo(); String houseId = obj.getHouseId(); + long fileSize = obj.getFileSize(); - #sql [context] { UPDATE MEDIAFILE SET MEDIAID = :mediaId, STOREID = :storeId, FILETYPEID = :fileTypeId, RELATIVEPATH = :relativePath, FILESTRUCTINFO = :fileStructInfo, HOUSEID = :houseId WHERE ID = :id }; + #sql [context] { UPDATE MEDIAFILE SET MEDIAID = :mediaId, STOREID = :storeId, FILETYPEID = :fileTypeId, RELATIVEPATH = :relativePath, FILESTRUCTINFO = :fileStructInfo, HOUSEID = :houseId, FILESIZE = :fileSize WHERE ID = :id }; } @Override @@ -91,8 +93,9 @@ public class MediaFileDAO extends EntityBaseDAO { String relativePath = obj.getRelativePath(); String fileStructInfo = obj.getFileStructInfo(); String houseId = obj.getHouseId(); + long fileSize = obj.getFileSize(); - #sql [context] { INSERT INTO MEDIAFILE (MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID) VALUES (:mediaId, :storeId, :fileTypeId, :relativePath, :fileStructInfo, :houseId) }; + #sql [context] { INSERT INTO MEDIAFILE (MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE) VALUES (:mediaId, :storeId, :fileTypeId, :relativePath, :fileStructInfo, :houseId, :fileSize) }; } void addAll(DefaultContext context, IEntityBase entity) throws SQLException { @@ -119,7 +122,7 @@ public class MediaFileDAO extends EntityBaseDAO { private MediaFileIter selectByHouseId(DefaultContext context, String houseId) throws SQLException{ MediaFileIter iter = null; - #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE WHERE HOUSEID = :houseId }; + #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE WHERE HOUSEID = :houseId }; return iter; } diff --git a/server/user.jobengine.osgi.db/src/user/jobengine/db/Store.java b/server/user.jobengine.osgi.db/src/user/jobengine/db/Store.java index ee580d3e..60a85964 100644 --- a/server/user.jobengine.osgi.db/src/user/jobengine/db/Store.java +++ b/server/user.jobengine.osgi.db/src/user/jobengine/db/Store.java @@ -65,6 +65,18 @@ public class Store extends EntityBase implements Serializable { return this.storeUris; } + public StoreUri getTargetStoreUri() { + StoreUri result = null; + List uris = getStoreUris(); + for (StoreUri uri : uris) { + if (uri.isTarget()) { + result = uri; + break; + } + } + return result; + } + public StoreUri getTargetStoreUri(RemoteStoreProtocol protocol) { StoreUri result = null; List uris = getStoreUris(); @@ -79,6 +91,18 @@ public class Store extends EntityBase implements Serializable { return result; } + public boolean hasTargetStoreUri() { + boolean result = false; + List uris = getStoreUris(); + for (StoreUri uri : uris) { + if (uri.isTarget()) { + result = true; + break; + } + } + return result; + } + public boolean isLowres() { return isLowres; } @@ -102,4 +126,5 @@ public class Store extends EntityBase implements Serializable { public void setSystem(boolean isSystem) { this.isSystem = isSystem; } + } \ No newline at end of file diff --git a/server/user.jobengine.osgi.server/pages/access-denied.zul b/server/user.jobengine.osgi.server/pages/access-denied.zul new file mode 100644 index 00000000..27b97949 --- /dev/null +++ b/server/user.jobengine.osgi.server/pages/access-denied.zul @@ -0,0 +1,12 @@ + + + + + +