};\r
}\r
\r
- private void TrafficIDChangedEvent(string id, int variantID, string text, List<TrafficItem> selected) {\r
+ private void TrafficIDChangedEvent(string id, int variantID, string epizodeID, string text, List<TrafficItem> selected) {\r
if (id == null)\r
SelectedMetadata = null;\r
else {\r
\r
}\r
\r
- private void OnSelectedIDChanged(string ID, int variantID, string text, List<TrafficItem> selected) {\r
+ private void OnSelectedIDChanged(string ID, int variantID, string epizodeID, string text, List<TrafficItem> selected) {\r
//logger.Info("Selected ID: " + ID);\r
try {\r
model.SelectedSegments = selected;\r
{\r
"title": "Development",\r
- "active": true,\r
+ "active": false,\r
"startInTray": false,\r
"enableCustomMetadataId": true,\r
"filter": "avi",\r
{\r
"title": "Editor",\r
- "active": false,\r
+ "active": true,\r
"startInTray": false,\r
"enableCustomMetadataId": true,\r
"player": {\r
<Compile Include="MaestroForm.Source.cs">\r
<SubType>Form</SubType>\r
</Compile>\r
- <None Include="Configuration\ACTIVE-configuration-promo.json">\r
+ <None Include="Configuration\-ACTIVE-configuration-promo.json">\r
<CopyToOutputDirectory>Always</CopyToOutputDirectory>\r
</None>\r
<None Include="Configuration\-configuration - Copy.json">\r
<None Include="Resources\ic_cached_black_18dp.png" />\r
<None Include="Resources\ic_playlist_add_black_18dp.png" />\r
<None Include="Resources\ic_playlist_add_black_24dp.png" />\r
+ <None Include="Resources\outline_filter_1_black_24dp.png" />\r
+ <None Include="Resources\outline_flip_black_24dp.png" />\r
<Content Include="Resources\play.ico" />\r
<Content Include="TODO.txt" />\r
</ItemGroup>\r
/// </summary>\r
private void InitializeComponent() {\r
this.components = new System.ComponentModel.Container();\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle31 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle32 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle33 = new System.Windows.Forms.DataGridViewCellStyle();\r
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MaestroForm));\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle();\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle();\r
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle36 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle37 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle34 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle35 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle39 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle40 = new System.Windows.Forms.DataGridViewCellStyle();\r
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle38 = new System.Windows.Forms.DataGridViewCellStyle();\r
this.groupSource = new System.Windows.Forms.GroupBox();\r
this.dgSource = new System.Windows.Forms.DataGridView();\r
this.bindingSource = new System.Windows.Forms.BindingSource(this.components);\r
this.btnRedefineSegments = new System.Windows.Forms.ToolStripButton();\r
this.btnEditMetadata = new System.Windows.Forms.ToolStripButton();\r
this.btnDefineSegments = new System.Windows.Forms.ToolStripButton();\r
+ this.btnUseEpisodeID = new System.Windows.Forms.ToolStripButton();\r
this.btnLookupMetadata = new System.Windows.Forms.Button();\r
this.labelSelectedMetadata = new System.Windows.Forms.Label();\r
this.textSelectedMetadata = new System.Windows.Forms.TextBox();\r
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\r
this.lSkipped = new System.Windows.Forms.ToolStripLabel();\r
this.lSkippedCount = new System.Windows.Forms.ToolStripLabel();\r
+ this.dataGridViewProgressColumn1 = new Maestro.Commons.DataGridViewProgressColumn();\r
this.systemMessageBindingSource = new System.Windows.Forms.BindingSource(this.components);\r
this.metadataInfoBindingSource = new System.Windows.Forms.BindingSource(this.components);\r
this.groupSource.SuspendLayout();\r
this.dgSource.BackgroundColor = System.Drawing.Color.White;\r
this.dgSource.BorderStyle = System.Windows.Forms.BorderStyle.None;\r
this.dgSource.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;\r
- dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
- dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control;\r
- dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText;\r
- dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
- dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
- dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
- this.dgSource.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;\r
+ dataGridViewCellStyle31.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle31.BackColor = System.Drawing.SystemColors.Control;\r
+ dataGridViewCellStyle31.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle31.ForeColor = System.Drawing.SystemColors.WindowText;\r
+ dataGridViewCellStyle31.SelectionBackColor = System.Drawing.SystemColors.Highlight;\r
+ dataGridViewCellStyle31.SelectionForeColor = System.Drawing.SystemColors.HighlightText;\r
+ dataGridViewCellStyle31.WrapMode = System.Windows.Forms.DataGridViewTriState.True;\r
+ this.dgSource.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle31;\r
this.dgSource.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;\r
this.dgSource.DataSource = this.bindingSource;\r
- dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
- dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;\r
- dataGridViewCellStyle2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;\r
- dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
- dataGridViewCellStyle2.SelectionForeColor = System.Drawing.Color.Black;\r
- dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
- this.dgSource.DefaultCellStyle = dataGridViewCellStyle2;\r
+ dataGridViewCellStyle32.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle32.BackColor = System.Drawing.SystemColors.Window;\r
+ dataGridViewCellStyle32.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle32.ForeColor = System.Drawing.SystemColors.ControlText;\r
+ dataGridViewCellStyle32.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+ dataGridViewCellStyle32.SelectionForeColor = System.Drawing.Color.Black;\r
+ dataGridViewCellStyle32.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+ this.dgSource.DefaultCellStyle = dataGridViewCellStyle32;\r
this.dgSource.Dock = System.Windows.Forms.DockStyle.Fill;\r
this.dgSource.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
this.dgSource.EnableHeadersVisualStyles = false;\r
this.dgSource.Location = new System.Drawing.Point(10, 47);\r
this.dgSource.Name = "dgSource";\r
this.dgSource.RowHeadersVisible = false;\r
- dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.dgSource.RowsDefaultCellStyle = dataGridViewCellStyle3;\r
+ dataGridViewCellStyle33.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.dgSource.RowsDefaultCellStyle = dataGridViewCellStyle33;\r
this.dgSource.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
this.dgSource.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
this.dgSource.Size = new System.Drawing.Size(330, 163);\r
this.trafficIDSelector.Location = new System.Drawing.Point(3, 3);\r
this.trafficIDSelector.Margin = new System.Windows.Forms.Padding(0);\r
this.trafficIDSelector.Name = "trafficIDSelector";\r
+ this.trafficIDSelector.Parameters = null;\r
this.trafficIDSelector.Size = new System.Drawing.Size(316, 314);\r
this.trafficIDSelector.TabIndex = 0;\r
// \r
this.tsMetadata.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\r
this.btnRedefineSegments,\r
this.btnEditMetadata,\r
- this.btnDefineSegments});\r
+ this.btnDefineSegments,\r
+ this.btnUseEpisodeID});\r
this.tsMetadata.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.Flow;\r
this.tsMetadata.Location = new System.Drawing.Point(0, 0);\r
this.tsMetadata.Name = "tsMetadata";\r
this.btnDefineSegments.ToolTipText = "Szegmensek";\r
this.btnDefineSegments.Click += new System.EventHandler(this.OnDefineSegments);\r
// \r
+ // btnUseEpisodeID\r
+ // \r
+ this.btnUseEpisodeID.CheckOnClick = true;\r
+ this.btnUseEpisodeID.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;\r
+ this.btnUseEpisodeID.Image = global::Maestro.Properties.Resources.outline_flip_black_24dp;\r
+ this.btnUseEpisodeID.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\r
+ this.btnUseEpisodeID.ImageTransparentColor = System.Drawing.Color.Magenta;\r
+ this.btnUseEpisodeID.Name = "btnUseEpisodeID";\r
+ this.btnUseEpisodeID.Size = new System.Drawing.Size(28, 28);\r
+ this.btnUseEpisodeID.Text = "toolStripButton1";\r
+ this.btnUseEpisodeID.ToolTipText = "Epizód kijelölés";\r
+ // \r
// btnLookupMetadata\r
// \r
this.btnLookupMetadata.BackColor = System.Drawing.Color.Transparent;\r
this.columnKillDate,\r
this.columnMessage});\r
this.dgJobs.DataSource = this.bindingSourceJobs;\r
- dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
- dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Window;\r
- dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.ControlText;\r
- dataGridViewCellStyle6.NullValue = null;\r
- dataGridViewCellStyle6.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
- dataGridViewCellStyle6.SelectionForeColor = System.Drawing.Color.Black;\r
- dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
- this.dgJobs.DefaultCellStyle = dataGridViewCellStyle6;\r
+ dataGridViewCellStyle36.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle36.BackColor = System.Drawing.SystemColors.Window;\r
+ dataGridViewCellStyle36.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle36.ForeColor = System.Drawing.SystemColors.ControlText;\r
+ dataGridViewCellStyle36.NullValue = null;\r
+ dataGridViewCellStyle36.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+ dataGridViewCellStyle36.SelectionForeColor = System.Drawing.Color.Black;\r
+ dataGridViewCellStyle36.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+ this.dgJobs.DefaultCellStyle = dataGridViewCellStyle36;\r
this.dgJobs.Dock = System.Windows.Forms.DockStyle.Fill;\r
this.dgJobs.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
this.dgJobs.EnableHeadersVisualStyles = false;\r
this.dgJobs.Location = new System.Drawing.Point(3, 3);\r
this.dgJobs.Name = "dgJobs";\r
this.dgJobs.RowHeadersVisible = false;\r
- dataGridViewCellStyle7.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.dgJobs.RowsDefaultCellStyle = dataGridViewCellStyle7;\r
+ dataGridViewCellStyle37.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.dgJobs.RowsDefaultCellStyle = dataGridViewCellStyle37;\r
this.dgJobs.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
this.dgJobs.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
this.dgJobs.Size = new System.Drawing.Size(988, 96);\r
// columnID\r
// \r
this.columnID.DataPropertyName = "ID";\r
- dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.columnID.DefaultCellStyle = dataGridViewCellStyle4;\r
+ dataGridViewCellStyle34.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.columnID.DefaultCellStyle = dataGridViewCellStyle34;\r
this.columnID.HeaderText = "ID";\r
this.columnID.Name = "columnID";\r
this.columnID.Width = 44;\r
// columnStatus\r
// \r
this.columnStatus.DataPropertyName = "Status";\r
- dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.columnStatus.DefaultCellStyle = dataGridViewCellStyle5;\r
+ dataGridViewCellStyle35.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.columnStatus.DefaultCellStyle = dataGridViewCellStyle35;\r
this.columnStatus.HeaderText = "Status";\r
this.columnStatus.Name = "columnStatus";\r
this.columnStatus.Width = 66;\r
this.dgMessages.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {\r
this.columnMessagesTime,\r
this.columnMessagesMessage});\r
- dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
- dataGridViewCellStyle9.BackColor = System.Drawing.SystemColors.Window;\r
- dataGridViewCellStyle9.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- dataGridViewCellStyle9.ForeColor = System.Drawing.Color.Red;\r
- dataGridViewCellStyle9.NullValue = null;\r
- dataGridViewCellStyle9.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
- dataGridViewCellStyle9.SelectionForeColor = System.Drawing.Color.Red;\r
- dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
- this.dgMessages.DefaultCellStyle = dataGridViewCellStyle9;\r
+ dataGridViewCellStyle39.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;\r
+ dataGridViewCellStyle39.BackColor = System.Drawing.SystemColors.Window;\r
+ dataGridViewCellStyle39.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ dataGridViewCellStyle39.ForeColor = System.Drawing.Color.Red;\r
+ dataGridViewCellStyle39.NullValue = null;\r
+ dataGridViewCellStyle39.SelectionBackColor = System.Drawing.Color.Gainsboro;\r
+ dataGridViewCellStyle39.SelectionForeColor = System.Drawing.Color.Red;\r
+ dataGridViewCellStyle39.WrapMode = System.Windows.Forms.DataGridViewTriState.False;\r
+ this.dgMessages.DefaultCellStyle = dataGridViewCellStyle39;\r
this.dgMessages.Dock = System.Windows.Forms.DockStyle.Fill;\r
this.dgMessages.EditMode = System.Windows.Forms.DataGridViewEditMode.EditProgrammatically;\r
this.dgMessages.EnableHeadersVisualStyles = false;\r
this.dgMessages.Name = "dgMessages";\r
this.dgMessages.ReadOnly = true;\r
this.dgMessages.RowHeadersVisible = false;\r
- dataGridViewCellStyle10.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.dgMessages.RowsDefaultCellStyle = dataGridViewCellStyle10;\r
+ dataGridViewCellStyle40.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.dgMessages.RowsDefaultCellStyle = dataGridViewCellStyle40;\r
this.dgMessages.RowTemplate.DefaultCellStyle.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
this.dgMessages.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect;\r
this.dgMessages.Size = new System.Drawing.Size(988, 96);\r
// \r
this.columnMessagesMessage.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;\r
this.columnMessagesMessage.DataPropertyName = "Message";\r
- dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
- this.columnMessagesMessage.DefaultCellStyle = dataGridViewCellStyle8;\r
+ dataGridViewCellStyle38.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(238)));\r
+ this.columnMessagesMessage.DefaultCellStyle = dataGridViewCellStyle38;\r
this.columnMessagesMessage.HeaderText = "Üzenet";\r
this.columnMessagesMessage.Name = "columnMessagesMessage";\r
this.columnMessagesMessage.ReadOnly = true;\r
this.lSkippedCount.Text = "0";\r
this.lSkippedCount.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\r
// \r
+ // dataGridViewProgressColumn1\r
+ // \r
+ this.dataGridViewProgressColumn1.DataPropertyName = "Progress";\r
+ this.dataGridViewProgressColumn1.Frozen = true;\r
+ this.dataGridViewProgressColumn1.HeaderText = "";\r
+ this.dataGridViewProgressColumn1.MinimumWidth = 100;\r
+ this.dataGridViewProgressColumn1.Name = "dataGridViewProgressColumn1";\r
+ this.dataGridViewProgressColumn1.Resizable = System.Windows.Forms.DataGridViewTriState.False;\r
+ // \r
// systemMessageBindingSource\r
// \r
this.systemMessageBindingSource.DataSource = typeof(Maestro.SystemMessage);\r
private ToolStripSeparator toolStripSeparator7;\r
private ToolStripLabel lRevoked;\r
private ToolStripLabel lRevokedCount;\r
+ private ToolStripButton btnUseEpisodeID;\r
+ private Commons.DataGridViewProgressColumn dataGridViewProgressColumn1;\r
}\r
}\r
\r
};\r
}\r
\r
- private void OnTrafficIDSelected(string id, int variantID, string text, List<TrafficItem> selected) {\r
+ private void OnTrafficIDSelected(string id, int variantID, string epizodeID, string text, List<TrafficItem> selected) {\r
btnRedefineSegments.Visible = false;\r
if (id == null) {\r
ArchiveMetadata = null;\r
MetadataType metadataType = MetadataTypeUtil.Guess(id);\r
SelectedMetadata = new MetadataInfo() {\r
Kind = metadataType,\r
- ID = id,\r
+ ID = btnUseEpisodeID.Checked ? epizodeID : id,\r
MetadataText = text,\r
VariantID = variantID,\r
Selected = selected\r
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\r
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\r
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS\r
- CAAAAk1TRnQBSQFMAgEBAgEAAZgBAgGYAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
+ CAAAAk1TRnQBSQFMAgEBAgEAAcABAgHAAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\r
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA\r
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5\r
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA\r
<metadata name="tsSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
<value>951, 17</value>\r
</metadata>\r
+ <metadata name="tsSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>951, 17</value>\r
+ </metadata>\r
<metadata name="tsMetadata.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
<value>846, 17</value>\r
</metadata>\r
+ <metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">\r
+ <value>1146, 17</value>\r
+ </metadata>\r
<metadata name="columnInputName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">\r
<value>True</value>\r
</metadata>\r
// You can specify all the values or you can default the Build and Revision Numbers\r
// by using the '*' as shown below:\r
// [assembly: AssemblyVersion("1.0.*")]\r
-[assembly: AssemblyVersion("2.1.0.5")]\r
-[assembly: AssemblyFileVersion("2.1.0.5")]\r
+[assembly: AssemblyVersion("2.1.0.6")]\r
+[assembly: AssemblyFileVersion("2.1.0.6")]\r
// class via a tool like ResGen or Visual Studio.\r
// To add or remove a member, edit your .ResX file then rerun ResGen\r
// with the /str option, or rebuild your VS project.\r
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]\r
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]\r
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r
internal class Resources {\r
}\r
}\r
\r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ internal static System.Drawing.Bitmap outline_filter_1_black_24dp {\r
+ get {\r
+ object obj = ResourceManager.GetObject("outline_filter_1_black_24dp", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
+ /// <summary>\r
+ /// Looks up a localized resource of type System.Drawing.Bitmap.\r
+ /// </summary>\r
+ internal static System.Drawing.Bitmap outline_flip_black_24dp {\r
+ get {\r
+ object obj = ResourceManager.GetObject("outline_flip_black_24dp", resourceCulture);\r
+ return ((System.Drawing.Bitmap)(obj));\r
+ }\r
+ }\r
+ \r
/// <summary>\r
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).\r
/// </summary>\r
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r
</resheader>\r
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />\r
- <data name="AppIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\mediacube_logo_small.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_settings_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_settings_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_clear_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_clear_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_playlist_add_check_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_playlist_add_check_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="ic_playlist_add_check_black_24dp_1x_green" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_playlist_add_check_black_24dp_1x_green1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
<data name="Play" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
<value>..\Resources\Play.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_search_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_search_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_receipt_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_receipt_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_playlist_add_check_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_playlist_add_check_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_reorder_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_reorder_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
<data name="mediacube_logo_v2_half_hard_edge" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
<value>..\Resources\mediacube_logo_v2_half_hard_edge.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_folder_open_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_folder_open_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_clear_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_clear_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="ic_toc_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_toc_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
<data name="ic_list_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
<value>..\Resources\ic_list_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
<data name="ic_note_add_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
<value>..\Resources\ic_note_add_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_playlist_add_check_black_24dp_1x_green" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_playlist_add_check_black_24dp_1x_green1.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
- </data>\r
- <data name="ic_receipt_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_receipt_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_cached_black_18dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_cached_black_18dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
<data name="ic_receipt_black_24dp_1x_green" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
<value>..\Resources\ic_receipt_black_24dp_1x_green.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_reorder_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_reorder_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="outline_filter_1_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\outline_filter_1_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_settings_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_settings_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_playlist_add_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_playlist_add_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_subject_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_subject_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_folder_open_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_folder_open_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_toc_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_toc_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_search_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_search_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_view_headline_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_view_headline_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="AppIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\mediacube_logo_small.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ </data>\r
+ <data name="ic_subject_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_subject_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
<data name="ic_refresh_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
<value>..\Resources\ic_refresh_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_cached_black_18dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_cached_black_18dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="ic_view_headline_black_24dp_1x" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\ic_view_headline_black_24dp_1x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
- <data name="ic_playlist_add_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
- <value>..\Resources\ic_playlist_add_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
+ <data name="outline_flip_black_24dp" type="System.Resources.ResXFileRef, System.Windows.Forms">\r
+ <value>..\Resources\outline_flip_black_24dp.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\r
</data>\r
</root>
\ No newline at end of file
textSelectedMetadata.Text = name;\r
}\r
\r
- private void TrafficIDChangedEvent(string id, int variantID, string text, List<TrafficItem> selected) {\r
+ private void TrafficIDChangedEvent(string id, int variantID, string epizodeID, string text, List<TrafficItem> selected) {\r
octopusIDSelector.ClearSelection();\r
nativeOctopusIDSelector.ClearSelection();\r
ClearFreeMetadata();\r
using System.Windows.Forms;\r
\r
namespace TrafficClient {\r
- public delegate void OnSelectedIDChanged(string ID, int variantID, string text, List<TrafficItem> selected);\r
+ public delegate void OnSelectedIDChanged(string ID, int variantID, string epizodeID, string text, List<TrafficItem> selected);\r
\r
public partial class TrafficIDSelector : UserControl {\r
public ITrafficAPI trafficAPI { get; private set; }\r
if (selectedItems?.Count > 0) {\r
btnNewVersion.Enabled = true;\r
CreateVersionIfMissing(trafficItem);\r
- IDChangedEvent?.Invoke(trafficItem.MediaID, trafficItem.VariantID, trafficItem.Title, selectedItems);\r
+ IDChangedEvent?.Invoke(trafficItem.MediaID, trafficItem.VariantID, trafficItem.EpisodeID, trafficItem.Title, selectedItems);\r
} else {\r
btnNewVersion.Enabled = false;\r
- IDChangedEvent?.Invoke(null, 0, null, null);\r
+ IDChangedEvent?.Invoke(null, 0, null, null, null);\r
}\r
}\r
\r
--- /dev/null
+<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mar="http://www.pebble.tv/MarinaAPI">\r
+ <soap:Header/>\r
+ <soap:Body>\r
+ <mar:getCustomViewRequestContainer>\r
+ <marinaCustomAPI view="cxvMissingMediaPlaylistCache"/>\r
+ </mar:getCustomViewRequestContainer>\r
+ </soap:Body>\r
+</soap:Envelope>
\ No newline at end of file
--- /dev/null
+<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mar="http://www.pebble.tv/MarinaAPI">\r
+ <soap:Header/>\r
+ <soap:Body>\r
+ <mar:dateTimecodeRangeContainer>\r
+ <dateTimecodeRange start="{start}" end="{end}"/>\r
+ </mar:dateTimecodeRangeContainer>\r
+ <mar:bAvailableMedia>false</mar:bAvailableMedia>\r
+ <mar:bUnavailableMedia>true</mar:bUnavailableMedia>\r
+ </soap:Body>\r
+</soap:Envelope>
\ No newline at end of file
},\r
{\r
"user" : "lebony",\r
- "password" : "lebony",\r
+ "password" : "4E25B117B14D86D7DCECB4E433CF932C",\r
"email" : null\r
},\r
{\r
"user" : "root",\r
- "password" : "password",\r
+ "password" : "5F4DCC3B5AA765D61D8327DEB882CF99",\r
"email" : "vasary@elgekko.net"\r
}\r
],\r
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/bin" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/ -Djobengine.transcoder.template=MP4 -Djobengine.transcoder.version=1 -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; -Djobengine.planair.db.user=MAM -Djobengine.planair.db.password=VDani -Dnexio.host=192.168.0.12 -Djobengine.nexio.name=testnexioclips -Dnexio.useMOSGateway=false -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns181026 -Djobengine.octopus.storyfolders.name=storyfolders181026 -Djobengine.octopus.stories.name=stories181026 -Djobengine.maestro.config="${workspace_loc}/-configuration/maestro.json" -Djobengine.mediacube.config="${workspace_loc}/-configuration/mediacube.json" -Dgui.statistics.disable=true -Dgui.help.disable=true -Dgui.editor.disable=true -Djobengine.mediafinder.external=false -Djobengine.mediacube.service.proxyroot="/opt" -Djobengine.randomize.archives=true -Djobengine.jobsteps.config="${workspace_loc}/user.jobengine.executors/config/config.xml""/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/bin" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.11.1.90:50000/mc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/ -Djobengine.transcoder.template=MP4 -Djobengine.transcoder.version=1 -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; -Djobengine.planair.db.user=MAM -Djobengine.planair.db.password=VDani -Dnexio.host=192.168.0.12 -Djobengine.nexio.name=testnexioclips -Dnexio.useMOSGateway=false -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns181026 -Djobengine.octopus.storyfolders.name=storyfolders181026 -Djobengine.octopus.stories.name=stories181026 -Djobengine.maestro.config="${workspace_loc}/-configuration/maestro.json" -Djobengine.mediacube.config="${workspace_loc}/-configuration/mediacube.json" -Dgui.statistics.disable=true -Dgui.help.disable=true -Dgui.editor.disable=true -Djobengine.mediafinder.external=false -Djobengine.mediacube.service.proxyroot="/opt" -Djobengine.randomize.archives=true -Djobengine.jobsteps.config="${workspace_loc}/user.jobengine.executors/config/config.xml" -Djobengine.jobsteps.groovy.root="${workspace_loc}/user.jobengine.executors/src/user/jobengine/server/steps""/>\r
<stringAttribute key="pde.version" value="3.3"/>\r
<booleanAttribute key="show_selected_only" value="false"/>\r
<stringAttribute key="target_bundles" value="cglib@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.ibm.db2.jcc@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,groovy@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs-api@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.omnifaces@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>\r
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>\r
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/bin" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/ -Djobengine.transcoder.template=MP4 -Djobengine.transcoder.version=1 -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; -Djobengine.planair.db.user=MAM -Djobengine.planair.db.password=VDani -Dnexio.host=192.168.0.12 -Djobengine.nexio.name=testnexioclips -Dnexio.useMOSGateway=false -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns181026 -Djobengine.octopus.storyfolders.name=storyfolders181026 -Djobengine.octopus.stories.name=stories181026 -Djobengine.maestro.config="${workspace_loc}/-configuration/maestro.json" -Djobengine.mediacube.config="${workspace_loc}/-configuration/mediacube.json" -Dgui.statistics.disable=true -Dgui.help.disable=true -Dgui.editor.disable=true -Djobengine.mediafinder.external=false -Djobengine.mediacube.service.proxyroot="/opt" -Djobengine.scheduledexecution.disabled=false -Djobengine.randomize.archives=false -Djobengine.jobsteps.config="${workspace_loc}/user.jobengine.executors/config/config.xml" -Djobengine.jobsteps.groovy.root="${workspace_loc}/user.jobengine.executors/src/user/jobengine/server/steps""/>\r
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/bin" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.transcoder.address=http://10.11.1.111:65445/api/json/v1/ -Djobengine.transcoder.template=MP4 -Djobengine.transcoder.version=1 -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.planair.db.url=jdbc:sqlserver://10.11.254.86;databaseName=PA_Vivantis; -Djobengine.planair.db.user=MAM -Djobengine.planair.db.password=VDani -Dnexio.host=192.168.0.12 -Djobengine.nexio.name=testnexioclips -Dnexio.useMOSGateway=false -Dnexio.disable=true -Djobengine.octopus.rundowns.name=rundowns181026 -Djobengine.octopus.storyfolders.name=storyfolders181026 -Djobengine.octopus.stories.name=stories181026 -Djobengine.maestro.config="${workspace_loc}/-configuration/maestro.json" -Djobengine.mediacube.config="${workspace_loc}/-configuration/mediacube.json" -Dgui.statistics.disable=true -Dgui.help.disable=true -Dgui.editor.disable=true -Djobengine.mediafinder.external=false -Djobengine.mediacube.service.proxyroot="/opt" -Djobengine.scheduledexecution.disabled=false -Djobengine.randomize.archives=false -Djobengine.jobsteps.config="${workspace_loc}/user.jobengine.executors/config/config.xml" -Djobengine.jobsteps.groovy.root="${workspace_loc}/user.jobengine.executors/src/user/jobengine/server/steps" -Dgui.jobs.alternate.selector=true"/>\r
<stringAttribute key="pde.version" value="3.3"/>\r
<booleanAttribute key="show_selected_only" value="false"/>\r
<stringAttribute key="target_bundles" value="cglib@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.fasterxml.jackson.module.jackson-module-jaxb-annotations@default:default,com.ibm.db2.jcc@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,groovy@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,org.omnifaces@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Djavax.ws.rs.ext.RuntimeDelegate=org.jboss.resteasy.spi.ResteasyProviderFactory -Dorg.eclipse.epp.logging.aeri.skipReports=true -Declipse.ignoreApp=true -Dosgi.noShutdown=true -Djobengine.jobsteps.root="${workspace_loc}/user.jobengine.executors/config" -Djobengine.jobtemplates.root="${workspace_loc}/user.jobengine.executors/jobtemplates" -Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.db.user=db2admin -Djobengine.db.password=password -Djobengine.loglevel=INFO -Dlog4j.configurationFile="${workspace_loc}/-configuration/log4j2.xml" -Djobengine.jobsteps.alternate.root="${workspace_loc}/user.jobengine.executors/bin/" -Djetty.home="${workspace_loc:}/-configuration/jetty" -Djetty.etc.config.urls=etc/user-jetty.xml,etc/user-jetty-ssl.xml,etc/user-jetty-ssl-context.xml,,etc/user-jetty-http.xml,etc/user-jetty-https.xml -Dorg.eclipse.jetty.webapp.basetempdir=c:\temp\jetty -Djava.io.tmpdir=c:\temp\jetty -Djobengine.octopus.api.address=http://10.10.1.11/api/v1 -Djobengine.octopus.api.user=mam -Djobengine.octopus.api.password=napocska -Djobengine.nosql.db.url=jdbc:db2://10.228.198.1:50000/mccache:retrieveMessagesFromServerOnGetMessage=true; -Djobengine.nosql.db.user=db2admin -Djobengine.nosql.db.password=password -Djobengine.nosql.db.schema=test -Djobengine.selenio.address=http://10.10.1.71:44000/TranscodeMgrWS?wsdl -Djobengine.selenio.projectfilepath=\\10.10.1.71\Data\Blueprints\MP4_H264_AAC.zenium -Djobengine.jobscheduling.config="${workspace_loc}/-configuration/scheduledjobs.json" -Djobengine.mediacube.config="${workspace_loc}/-configuration/mediacube.json" -Djobengine.maestro.config="${workspace_loc}/-configuration/maestro.json" -Djobengine.nexio.db.url=jdbc:sqlserver://10.10.1.59:1433;databaseName=NXDB; -Djobengine.nexio.db.user=sa -Djobengine.nexio.db.password=resolve -Djobengine.planair.db.url=jdbc:sqlserver://10.10.1.45;databaseName=PA_Echo; -Djobengine.planair.db.user=MAM -Djobengine.planair.db.password=Echotv.hu -Dnexio.host=192.168.0.12 -Djobengine.nexio.name=testnexioclips -Dnexio.useMOSGateway=false -Dnexio.disable=true -Dgui.statistics.disable=true -Dgui.help.disable=true -Dgui.editor.disable=true -Djobengine.octopus.rundowns.name=rundowns181026 -Djobengine.octopus.storyfolders.name=storyfolders181026 -Djobengine.octopus.stories.name=stories181026 -Djobengine.mediafinder.external=false -Djobengine.mediafinder.external.url=localhost -Dmediacube.auth.location="${workspace_loc}/-configuration/mediacube-auth.properties""/>\r
<stringAttribute key="pde.version" value="3.3"/>\r
<booleanAttribute key="show_selected_only" value="false"/>\r
-<stringAttribute key="target_bundles" value="cglib@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.ibm.db2jcc4@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,commons-logging@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
+<stringAttribute key="target_bundles" value="cglib@default:default,com.fasterxml.jackson.core.jackson-annotations@default:default,com.fasterxml.jackson.core.jackson-core@default:default,com.fasterxml.jackson.core.jackson-databind@default:default,com.fasterxml.jackson.datatype.jackson-datatype-joda@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-base@default:default,com.fasterxml.jackson.jaxrs.jackson-jaxrs-json-provider@default:default,com.ibm.nosql@default:default,com.microsoft.sqlserver.sqljdbc@default:default,commons-logging@default:default,humble.video.noarch@default:default,humble.video.windows@default:default,javax.annotation-api@default:default,javax.mail@default:default,javax.servlet-api@default:default,javax.ws.rs-api@default:default,jcifs@default:default,joda-time@default:default,org.apache.aries.spifly.dynamic.bundle@default:default,org.apache.aries.util@default:default,org.apache.commons.beanutils@default:default,org.apache.commons.collections@default:default,org.apache.commons.digester@default:default,org.apache.commons.io@default:default,org.apache.commons.lang@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.felix.gogo.command@default:default,org.apache.felix.gogo.runtime@default:default,org.apache.felix.gogo.shell@default:default,org.apache.httpcomponents.httpclient@default:default,org.apache.httpcomponents.httpcore@default:default,org.apache.logging.log4j.api@1:true,org.apache.logging.log4j.core@default:default,org.apache.logging.log4j.slf4j-impl@default:default,org.apache.servicemix.bundles.quartz@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.console@default:default,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.util@default:default,org.eclipse.jetty.client@default:default,org.eclipse.jetty.deploy@default:default,org.eclipse.jetty.http@default:default,org.eclipse.jetty.io@default:default,org.eclipse.jetty.osgi.boot@default:true,org.eclipse.jetty.schemas@default:default,org.eclipse.jetty.security@default:default,org.eclipse.jetty.server@default:default,org.eclipse.jetty.servlet@default:default,org.eclipse.jetty.util@default:default,org.eclipse.jetty.webapp@default:default,org.eclipse.jetty.websocket.api@default:default,org.eclipse.jetty.websocket.client@default:default,org.eclipse.jetty.websocket.common@default:default,org.eclipse.jetty.websocket.server@default:default,org.eclipse.jetty.websocket.servlet@default:default,org.eclipse.jetty.xml@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.jboss.resteasy.client@default:default,org.jboss.resteasy.jaxrs@default:default,org.jmock.junit4@default:default,org.jmock@default:default,org.junit@default:default,org.mybatis.mybatis@default:default,org.objectweb.asm.commons@default:default,org.objectweb.asm.tree@default:default,org.objectweb.asm@default:default,slf4j.api@default:default,slf4j.simple@default:false"/>\r
<booleanAttribute key="tracing" value="false"/>\r
<booleanAttribute key="useCustomFeatures" value="false"/>\r
<booleanAttribute key="useDefaultConfigArea" value="true"/>\r
package hu.user.mediacube.executors.tests;\r
\r
import java.io.File;\r
+import java.nio.file.DirectoryStream;\r
import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.List;\r
+import java.util.TreeMap;\r
\r
import org.apache.commons.io.FilenameUtils;\r
import org.junit.Test;\r
System.out.println(Arrays.toString(sut));\r
}\r
\r
+ @Test\r
+ public void test10() throws Exception {\r
+ List<Path> files = new ArrayList<>();\r
+ DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get("/_video"));\r
+ for (Path file : directoryStream) {\r
+ if (!file.toFile().isDirectory())\r
+ files.add(file);\r
+ }\r
+ files.sort((p1, p2) -> {\r
+ if (p1.toFile().lastModified() == p2.toFile().lastModified())\r
+ return 0;\r
+ return p1.toFile().lastModified() > p2.toFile().lastModified() ? 1 : -1;\r
+ });\r
+\r
+ for (Path file : files)\r
+ System.out.println(file);\r
+ }\r
+\r
@Test\r
public void test2() throws Exception {\r
Integer i = 5;\r
Boolean j = Boolean.FALSE;\r
- xxx(i, j);\r
}\r
\r
@Test\r
\r
}\r
\r
- void xxx(int x, boolean y) {\r
- System.out.println("call");\r
+ @Test\r
+ public void test6() throws Exception {\r
+ TreeMap<String, String> sut = new TreeMap<>();\r
+\r
+ sut.put("20200301T10:00:00", "");\r
+ sut.put("20200101T12:00:00", "");\r
+ sut.put("20200101T10:00:00", "");\r
+ sut.put("20200201T00:00:00", "");\r
+\r
+ for (String key : sut.keySet()) {\r
+ System.out.println(key);\r
+ }\r
+\r
+ String name = "valammi.mxf";\r
+ System.out.println(name.substring(0, name.lastIndexOf(".")));\r
+\r
+ boolean create = false;\r
+ create |= false;\r
+ System.out.println(create);\r
+\r
+ }\r
+\r
+ @Test\r
+ public void test7() throws Exception {\r
+ DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get("/opt"));\r
+ int count = 0;\r
+ for (Path path : directoryStream) {\r
+ count++;\r
+ }\r
+ System.out.println(count);\r
+ for (Path path : directoryStream) {\r
+ System.out.println(path);\r
+ }\r
+ }\r
+\r
+ @Test\r
+ public void test8() throws Exception {\r
+\r
+ int currentCount = 11;\r
+ int allCount = 90;\r
+ System.out.println(currentCount * 100 / allCount);\r
+ }\r
+\r
+ @Test\r
+ public void test9() throws Exception {\r
+ List<Path> files = Arrays.asList(Paths.get("/opt/20200101100000.xxx.json"), Paths.get("/opt/xxx.json"), Paths.get("/opt/yyy.json"),\r
+ Paths.get("/opt/20200202200000.xxx.json"));\r
+\r
+ files.sort((a, b) -> {\r
+ return a.compareTo(b);\r
+ });\r
+ for (Path file : files)\r
+ System.out.println(file);\r
}\r
\r
}\r
<executors>\r
\r
<executor className="HarrisMissingMaterialCheckerStep.java" maxConcurrent="1" isRemote="false" />\r
- <executor className="CancelableStep.java" maxConcurrent="20" isRemote="false" />\r
+ <executor className="CancelableStep.java" maxConcurrent="1" isRemote="false" />\r
<executor className="FakeStep.java" maxConcurrent="20" isRemote="false" />\r
<executor className="MergeStep.java" maxConcurrent="20" isRemote="false" />\r
- <executor className="TestForkCancelableStep.java" maxConcurrent="1" isRemote="false" />\r
+ <executor className="TestForkCancelableStep.java" maxConcurrent="10" isRemote="false" />\r
<executor className="user.jobengine.server.steps.ArchiveListBuilderStep" maxConcurrent="1" isRemote="false" />\r
<executor className="user.jobengine.server.steps.ArchiveMaterialSubmitStep" maxConcurrent="1" isRemote="false" />\r
<executor className="user.jobengine.server.steps.BatchRetrieveForkStep" maxConcurrent="10" isRemote="false" />\r
<?xml version="1.0" encoding="UTF-8"?>\r
<jobtemplate multiInstance="true">\r
+ <declarations>\r
+ <parameters>\r
+ <parameter name="param" type="java.lang.Integer" />\r
+ </parameters>\r
+ </declarations>\r
<commands>\r
- <calljobstep remote="true" type="CancelableStep.java" weight="1" />\r
+ <calljobstep remote="true" type="CancelableStep.java" weight="1" >\r
+ <inputs>\r
+ <input>\r
+ <parameter name="param" />\r
+ </input>\r
+ </inputs>\r
+ </calljobstep>\r
</commands>\r
</jobtemplate>
\ No newline at end of file
<declarations>\r
<parameters>\r
<parameter name="sourceStoreName" type="java.lang.String" />\r
- <parameter name="targetStoreName" type="java.lang.String" />\r
- <parameter name="targetProtocol" type="java.lang.String"/>\r
<parameter name="template" type="java.lang.String"/>\r
<parameter name="expectedColorSpace" type="java.lang.String"/>\r
<parameter name="limit" type="java.lang.Integer" />\r
</parameters>\r
</declarations>\r
<commands>\r
- <calljobstep type="ForkByStatusFileStep.java" weight="1">\r
+ <calljobstep type="ForkDownloadStep.java" weight="1">\r
<inputs>\r
<input>\r
<parameter name="sourceStoreName" />\r
</input>\r
- <input>\r
- <parameter name="targetStoreName" />\r
- </input>\r
- <input>\r
- <parameter name="targetProtocol" />\r
- </input>\r
<input>\r
<parameter name="template" />\r
</input>\r
<declarations>\r
<parameters>\r
<parameter name="sourceStoreName" type="java.lang.String" />\r
- <parameter name="targetStoreName" type="java.lang.String" />\r
- <parameter name="targetProtocol" type="java.lang.String"/>\r
<parameter name="template" type="java.lang.String"/>\r
<parameter name="expectedColorSpace" type="java.lang.String"/>\r
<parameter name="limit" type="java.lang.Integer" />\r
</parameters>\r
</declarations>\r
<commands>\r
- <calljobstep type="ForkByStatusFileStep.java" weight="1">\r
+ <calljobstep type="ForkUploadStep.java" weight="1">\r
<inputs>\r
<input>\r
<parameter name="sourceStoreName" />\r
</input>\r
- <input>\r
- <parameter name="targetStoreName" />\r
- </input>\r
- <input>\r
- <parameter name="targetProtocol" />\r
- </input>\r
<input>\r
<parameter name="template" />\r
</input>\r
<declarations>\r
<parameters>\r
<parameter name="escortStoreName" type="java.lang.String"/>\r
+ <parameter name="lookupStoreNames" type="com.ibm.nosql.json.api.BasicDBList"/>\r
<parameter name="targetStoreName" type="java.lang.String"/>\r
<parameter name="targetProtocol" type="java.lang.String"/>\r
<parameter name="primaryEndPoint" type="java.lang.String"/>\r
<input>\r
<parameter name="escortStoreName" />\r
</input>\r
+ <input>\r
+ <parameter name="lookupStoreNames" />\r
+ </input>\r
<input>\r
<parameter name="targetStoreName" />\r
</input>\r
private ObjectMapper mapper = ServiceObjectMapper.getMapper();\r
\r
@StepEntry\r
- public Object[] execute() throws Exception {\r
+ public Object[] execute(int param) throws Exception {\r
\r
// DownloadableArchive a = new DownloadableArchive();\r
// Media media = getManager().createMedia("Generic", "Name", "description", "houseId");\r
// String prettyString = mapper.writeValueAsString(a);\r
// DownloadableArchive b = mapper.readValue(prettyString, DownloadableArchive.class);\r
// Media media2 = b.getMedia();\r
+\r
+ // getJobRuntime().setDescription(String.valueOf(param));\r
+\r
try {\r
for (int i = 0; i < count; i++) {\r
if (getJobRuntime().isWaitingCancel())\r
break;\r
- Thread.sleep(1000);\r
- setProgress((i + 1) * count);\r
+ Thread.sleep(500);\r
+ int progress = (i + 1) * 100 / count;\r
+ setProgress(progress);\r
// if (i == 5)\r
// throw new Exception("Test");\r
}\r
import user.commons.remotestore.FtpDirectoryLister;\r
\r
public class EscortFiles {\r
+ public static final String DOT_CATCHED = ".catched";\r
public static final String DOT_JSON = ".json";\r
private static final Logger logger = LogManager.getLogger();\r
private static final String EXTENDEDAGENCY = "ExtendedAgency";\r
return String.format(KILLDATE_FILENAME, fileName, composeKillDate(days));\r
}\r
\r
+ public static void createCatchedFile(Path escortFile) throws IOException {\r
+ Path catchedFilePath = Paths.get(escortFile.toString() + DOT_CATCHED);\r
+ Files.createFile(catchedFilePath);\r
+ }\r
+\r
+ public static void createFellow(String escortFile, String extension) throws IOException {\r
+ Files.copy(Paths.get(escortFile), Paths.get(escortFile + "." + extension));\r
+ }\r
+\r
public static void createMetadata(String filePath, String fileName, String metadata) throws IOException {\r
ensureUNCFolder(filePath, STATUSFOLDER);\r
String metadataFileName = fileName + DOT_JSON;\r
ensureUNCFolder(statusPath);\r
}\r
\r
+ public static boolean isCatchedFileExists(Path escortFile) {\r
+ Path catchedFilePath = Paths.get(escortFile.toString() + DOT_CATCHED);\r
+ return catchedFilePath.toFile().exists();\r
+ }\r
+\r
public static boolean isMetadataExists(String filePath, String fileName) throws IOException {\r
boolean result = false;\r
String metadataFileName = fileName + DOT_JSON;\r
return result;\r
}\r
\r
+ public static void remove(Path file) {\r
+ try {\r
+ file.toFile().delete();\r
+ } catch (Exception e) {\r
+ logger.error("Unable to delete {}", file.toAbsolutePath().toString());\r
+ }\r
+ }\r
+\r
+ public static void removeCatchedFile(Path escortFile) {\r
+ remove(Paths.get(escortFile.toString() + DOT_CATCHED));\r
+ }\r
+\r
public static void setNEXIOKillDate(int killDateDays, String targetFileName, String nexioAgency, StoreUri targetUri) throws Exception {\r
OutputStream outStream = null;\r
try {\r
targetUri.cleanUp();\r
}\r
}\r
-\r
- public static void createFellow(String escortFile, String extension) throws IOException {\r
- Files.copy(Paths.get(escortFile), Paths.get(escortFile + "." + extension));\r
- }\r
}\r
try {\r
Path filePath = Paths.get(sourceStoreUri.toString(true), fileName);\r
deleteSilently(filePath);\r
- if (escortFile != null) {\r
- Path escortFilePath = Paths.get(escortFile);\r
- deleteSilently(escortFilePath);\r
- }\r
+ deleteSilently(Paths.get(escortFile));\r
+ deleteSilently(Paths.get(escortFile + EscortFiles.DOT_CATCHED));\r
} catch (Exception e) {\r
logger.error(e.getMessage());\r
throw e;\r
public class FileValidatorStep extends JobStep {\r
private static final String COLORSPACE = "COLORSPACE";\r
private static final Logger logger = LogManager.getLogger();\r
+ private static final String testSimulate = System.getProperty("test.simulate");\r
\r
private void deleteSilently(Path file) {\r
try {\r
if (!filePath.toFile().exists())\r
throw new FileNotFoundException("File not exists: " + filePath.toString());\r
\r
+ if (getJobRuntime().isWaitingCancel()) {\r
+ deleteSilently(filePath);\r
+ deleteSilently(Paths.get(escortFile));\r
+ deleteSilently(Paths.get(escortFile + EscortFiles.DOT_CATCHED));\r
+ cancel();\r
+ return null;\r
+ }\r
+\r
if (expectedFrameNumber > 0 || StringUtils.isNotBlank(exceptedColorSpace))\r
validateMedia(filePath, expectedFrameNumber, exceptedColorSpace, escortFile);\r
\r
if (expectedSize > 0)\r
validateSize(filePath, expectedSize, escortFile);\r
\r
- logger.info(getMarker(), "{} passed validation", fileName);\r
+ //A metadata persister miatt torlunk mindet teszt modban\r
+ if (StringUtils.isNotBlank(testSimulate)) {\r
+ deleteSilently(Paths.get(escortFile));\r
+ deleteSilently(Paths.get(escortFile + EscortFiles.DOT_CATCHED));\r
+ logger.info(getSessionMarker(), "{} deleted to prevent real processing", escortFile);\r
+ }\r
+\r
+ logger.info(getSessionMarker(), "{} passed validation", fileName);\r
return null;\r
}\r
\r
long frames = mi.getFrames();\r
if (frames != expectedFrameNumber) {\r
deleteSilently(filePath);\r
- if (escortFile != null) {\r
- Path escortFilePath = Paths.get(escortFile);\r
- deleteSilently(escortFilePath);\r
- }\r
+ deleteSilently(Paths.get(escortFile));\r
+ deleteSilently(Paths.get(escortFile + EscortFiles.DOT_CATCHED));\r
throw new Exception("Length mismatch in " + filePath + ". Expected: " + expectedFrameNumber + ", found: " + frames);\r
}\r
}\r
+++ /dev/null
-package user.jobengine.server.steps;\r
-\r
-import java.io.IOException;\r
-import java.nio.file.DirectoryStream;\r
-import java.nio.file.Files;\r
-import java.nio.file.Path;\r
-import java.nio.file.Paths;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-\r
-import org.apache.logging.log4j.LogManager;\r
-import org.apache.logging.log4j.Logger;\r
-import org.apache.logging.log4j.message.Message;\r
-import org.apache.logging.log4j.message.ParameterizedMessage;\r
-\r
-import user.commons.DownloadableMedia;\r
-import user.commons.StoreUri;\r
-import user.commons.remotestore.RemoteStoreProtocol;\r
-import user.jobengine.server.IJobRuntime;\r
-\r
-public class ForkByStatusFileStep extends JobStep {\r
- private static final Logger logger = LogManager.getLogger();\r
-\r
- @StepEntry\r
- public Object[] execute(String tempStoreName, String targetStoreName, String targetProtocol, String template, String expectedColorSpace, int limit)\r
- throws Exception {\r
- DirectoryStream<Path> directoryStream = null;\r
- int count = limit;\r
- try {\r
- StoreUri tempStoreUri = getManager().getStoreUri(tempStoreName, RemoteStoreProtocol.LOCAL);\r
- StoreUri targetStoreUri = getManager().getStoreUri(targetStoreName, Enum.valueOf(RemoteStoreProtocol.class, targetProtocol));\r
-\r
- if (getJobRuntime().forkPrepare()) {\r
- Path path = Paths.get(tempStoreUri.toString(true), ".STATUS");\r
- directoryStream = Files.newDirectoryStream(path);\r
- if (directoryStream != null) {\r
- for (Path escortFile : directoryStream) {\r
-\r
- if (getJobRuntime().isWaitingCancel()) {\r
- cancel();\r
- break;\r
- }\r
-\r
- if (processPathItem(tempStoreUri, targetStoreUri, template, escortFile))\r
- count--;\r
-\r
- if (count == 0)\r
- break;\r
- }\r
- }\r
- if (count == limit)\r
- getJobRuntime().cancelForkPrepare();\r
- else\r
- getJobRuntime().forkWaitComplete();\r
- }\r
-\r
- setProgress(100);\r
- } catch (Exception e) {\r
- logger.error(getSessionMarker(), e.getMessage());\r
- throw e;\r
- } finally {\r
- if (directoryStream != null) {\r
- try {\r
- directoryStream.close();\r
- } catch (IOException e) {\r
- }\r
- }\r
- }\r
-\r
- return null;\r
- }\r
-\r
- private boolean processPathItem(StoreUri tempStoreUri, StoreUri targetStoreUri, String template, Path escortFile) throws IOException {\r
- if (escortFile.toFile().isDirectory())\r
- return false;\r
-\r
- //ami nem JSON azt nem kezeljuk\r
- if (!escortFile.getFileName().toString().toLowerCase().endsWith(EscortFiles.DOT_JSON))\r
- return false;\r
-\r
- //aminek van COLORSPACE kiterjesztésű\r
- Path colorspaceFile = Paths.get(escortFile.toString() + ".colorspace");\r
- if (colorspaceFile.toFile().exists())\r
- return false;\r
-\r
- String fileName = escortFile.getFileName().toString();\r
- //minimum 3 karakter: STORENAME.FILENAME.MXF.JSON\r
- long dotCount = fileName.chars().filter(ch -> ch == '.').count();\r
- if (dotCount < 3)\r
- return false;\r
-\r
- try {\r
- DownloadableMedia downloadable = EscortFiles.decode(escortFile);\r
- logger.info("Starting {}", template);\r
-\r
- StoreUri sourceStoreUri = getManager().getStoreUri(downloadable.getLong("storeUriId"));\r
-\r
- Map<String, Object> parameters = new HashMap<>();\r
- parameters.put("sourceStoreUri", sourceStoreUri);\r
- parameters.put("fileName", downloadable.getString("fileName"));\r
- parameters.put("tempStoreUri", tempStoreUri);\r
- parameters.put("targetStoreUri", targetStoreUri);\r
- parameters.put("expectedFrameNumber", downloadable.getLong("frames"));\r
- parameters.put("expectedSize", downloadable.getLong("size"));\r
- parameters.put("expectedColorSpace", downloadable.getString("colorSpace"));\r
- parameters.put("escortFile", escortFile.toAbsolutePath().toString());\r
-\r
- IJobRuntime child = getEngine().submit(getJobRuntime(), null, template, "Archiválás", parameters);\r
- if (child == null)\r
- throw new Exception("Submit error.");\r
-\r
- } catch (Exception e) {\r
- Message m = new ParameterizedMessage(e.getMessage());\r
- logger.error(getMarker(), m, e);\r
- logger.error(getSessionMarker(), m);\r
- return false;\r
- }\r
-\r
- return true;\r
- }\r
-}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.DirectoryStream;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.DownloadableMedia;\r
+import user.commons.JobStatus;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class ForkDownloadStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(String tempStoreName, String template, String expectedColorSpace, int limit) throws Exception {\r
+ DirectoryStream<Path> directoryStream = null;\r
+ int count = limit;\r
+ int allCount = 0;\r
+ int currentCount = 0;\r
+\r
+ try {\r
+ StoreUri tempStoreUri = getManager().getStoreUri(tempStoreName, RemoteStoreProtocol.LOCAL);\r
+ Path path = Paths.get(tempStoreUri.toString(true), ".STATUS");\r
+\r
+ List<Path> escortFiles = new ArrayList<>();\r
+ directoryStream = Files.newDirectoryStream(path);\r
+ for (Path escortFile : directoryStream) {\r
+ if (getJobRuntime().isWaitingCancel()) {\r
+ cancel();\r
+ return null;\r
+ }\r
+ escortFiles.add(escortFile);\r
+ }\r
+ allCount = escortFiles.size();\r
+ //a file neve az adasbakerules idopontjaval kezdodik\r
+ escortFiles.sort((p1, p2) -> {\r
+ if (p1.toFile().lastModified() == p2.toFile().lastModified())\r
+ return 0;\r
+ return p1.toFile().lastModified() > p2.toFile().lastModified() ? 1 : -1;\r
+ });\r
+\r
+ if (allCount > 0) {\r
+ for (Path escortFile : escortFiles) {\r
+ if (getJobRuntime().isWaitingCancel()) {\r
+ cancel();\r
+ break;\r
+ }\r
+\r
+ if (processPathItem(tempStoreUri, template, escortFile)) {\r
+ count--;\r
+ if (count == 0)\r
+ break;\r
+ }\r
+ currentCount++;\r
+ setProgress(currentCount * 100 / allCount);\r
+ }\r
+ }\r
+\r
+ setProgress(100);\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), e.getMessage());\r
+ throw e;\r
+ } finally {\r
+ if (directoryStream != null) {\r
+ try {\r
+ directoryStream.close();\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ private boolean processPathItem(StoreUri tempStoreUri, String template, Path escortFile) throws IOException {\r
+ if (escortFile.toFile().isDirectory())\r
+ return false;\r
+\r
+ //ami nem JSON azt nem kezeljuk\r
+ if (!escortFile.getFileName().toString().toLowerCase().endsWith(EscortFiles.DOT_JSON))\r
+ return false;\r
+\r
+ //aminek van COLORSPACE kiterjesztesu valtozata azt nem kezeljuk\r
+ // Path colorspaceFile = Paths.get(escortFile.toString() + ".colorspace");\r
+ // if (colorspaceFile.toFile().exists())\r
+ // return false;\r
+\r
+ if (EscortFiles.isCatchedFileExists(escortFile))\r
+ return false;\r
+\r
+ String fileName = escortFile.getFileName().toString();\r
+ //minimum 3 karakter: STORENAME.FILENAME.MXF.JSON\r
+ long dotCount = fileName.chars().filter(ch -> ch == '.').count();\r
+ if (dotCount < 3)\r
+ return false;\r
+\r
+ try {\r
+ DownloadableMedia downloadable = EscortFiles.decode(escortFile);\r
+ logger.info("Starting {}", template);\r
+\r
+ StoreUri sourceStoreUri = getManager().getStoreUri(downloadable.getLong("sourceStoreUriId"));\r
+ StoreUri targetStoreUri = getManager().getStoreUri(downloadable.getLong("targetStoreUriId"));\r
+ Map<String, Object> parameters = new HashMap<>();\r
+ parameters.put("sourceStoreUri", sourceStoreUri);\r
+ parameters.put("fileName", downloadable.getString("fileName"));\r
+ parameters.put("tempStoreUri", tempStoreUri);\r
+ parameters.put("targetStoreUri", targetStoreUri);\r
+ parameters.put("expectedFrameNumber", downloadable.getLong("frames"));\r
+ parameters.put("expectedSize", downloadable.getLong("size"));\r
+ parameters.put("expectedColorSpace", downloadable.getString("colorSpace"));\r
+ parameters.put("escortFile", escortFile.toAbsolutePath().toString());\r
+\r
+ //IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters\r
+ IJobRuntime child = getEngine().submit(null, e -> {\r
+ if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
+ EscortFiles.removeCatchedFile(escortFile);\r
+ }, template, "Archiválás", 0, IJobEngine.DEFAULT_OWNER, parameters);\r
+ if (child == null)\r
+ throw new Exception("Submit error.");\r
+\r
+ child.setRelated(downloadable.getString("title"));\r
+ EscortFiles.createCatchedFile(escortFile);\r
+\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), e.getMessage());\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.IOException;\r
+import java.nio.file.DirectoryStream;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.DownloadableMedia;\r
+import user.commons.JobStatus;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.IJobRuntime;\r
+\r
+public class ForkUploadStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+\r
+ @StepEntry\r
+ public Object[] execute(String tempStoreName, String template, String expectedColorSpace, int limit) throws Exception {\r
+ DirectoryStream<Path> directoryStream = null;\r
+ int count = limit;\r
+ int allCount = 0;\r
+ int currentCount = 0;\r
+\r
+ try {\r
+ StoreUri tempStoreUri = getManager().getStoreUri(tempStoreName, RemoteStoreProtocol.LOCAL);\r
+ Path path = Paths.get(tempStoreUri.toString(true), ".STATUS");\r
+\r
+ List<Path> escortFiles = new ArrayList<>();\r
+ directoryStream = Files.newDirectoryStream(path);\r
+ for (Path escortFile : directoryStream) {\r
+ if (getJobRuntime().isWaitingCancel()) {\r
+ cancel();\r
+ return null;\r
+ }\r
+ escortFiles.add(escortFile);\r
+ }\r
+ allCount = escortFiles.size();\r
+ //a file neve az adasbakerules idopontjaval kezdodik\r
+ escortFiles.sort((p1, p2) -> {\r
+ return p1.compareTo(p2);\r
+ });\r
+\r
+ if (allCount > 0) {\r
+ for (Path escortFile : escortFiles) {\r
+ if (getJobRuntime().isWaitingCancel()) {\r
+ cancel();\r
+ break;\r
+ }\r
+\r
+ if (processPathItem(tempStoreUri, template, escortFile)) {\r
+ count--;\r
+ if (count == 0)\r
+ break;\r
+ }\r
+ currentCount++;\r
+ setProgress(currentCount * 100 / allCount);\r
+ }\r
+ }\r
+\r
+ setProgress(100);\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), e.getMessage());\r
+ throw e;\r
+ } finally {\r
+ if (directoryStream != null) {\r
+ try {\r
+ directoryStream.close();\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ private boolean processPathItem(StoreUri tempStoreUri, String template, Path escortFile) throws IOException {\r
+ if (escortFile.toFile().isDirectory())\r
+ return false;\r
+\r
+ //ami nem JSON azt nem kezeljuk\r
+ if (!escortFile.getFileName().toString().toLowerCase().endsWith(EscortFiles.DOT_JSON))\r
+ return false;\r
+\r
+ //aminek van COLORSPACE kiterjesztésű\r
+ // Path colorspaceFile = Paths.get(escortFile.toString() + ".colorspace");\r
+ // if (colorspaceFile.toFile().exists())\r
+ // return false;\r
+\r
+ if (EscortFiles.isCatchedFileExists(escortFile))\r
+ return false;\r
+\r
+ String fileName = escortFile.getFileName().toString();\r
+ //minimum 3 karakter: STORENAME.FILENAME.MXF.JSON\r
+ long dotCount = fileName.chars().filter(ch -> ch == '.').count();\r
+ if (dotCount < 3)\r
+ return false;\r
+\r
+ try {\r
+ DownloadableMedia downloadable = EscortFiles.decode(escortFile);\r
+ logger.info(getSessionMarker(), "Starting {} for {}", template, fileName);\r
+\r
+ StoreUri sourceStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM);\r
+ StoreUri targetStoreUri = getManager().getStoreUri(downloadable.getLong("targetStoreUriId"));\r
+\r
+ Map<String, Object> parameters = new HashMap<>();\r
+ parameters.put("sourceStoreUri", sourceStoreUri);\r
+ parameters.put("fileName", downloadable.getString("fileName"));\r
+ parameters.put("tempStoreUri", tempStoreUri);\r
+ parameters.put("targetStoreUri", targetStoreUri);\r
+ parameters.put("expectedFrameNumber", downloadable.getLong("frames"));\r
+ parameters.put("expectedSize", downloadable.getLong("size"));\r
+ parameters.put("expectedColorSpace", downloadable.getString("colorSpace"));\r
+ parameters.put("escortFile", escortFile.toAbsolutePath().toString());\r
+\r
+ int priority = downloadable.containsKey("priority") ? downloadable.getInt("priority") : 0;\r
+ //IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters\r
+ IJobRuntime child = getEngine().submit(null, e -> {\r
+ if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
+ EscortFiles.removeCatchedFile(escortFile);\r
+ }, template, "Visszatöltés", priority, IJobEngine.DEFAULT_OWNER, parameters);\r
+ if (child == null)\r
+ throw new Exception("Submit error.");\r
+\r
+ child.setRelated(downloadable.getString("title"));\r
+ EscortFiles.createCatchedFile(escortFile);\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), e.getMessage());\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+}\r
\r
@StepEntry\r
public Object[] execute(String sourceStoreName, String protocol, String wildCard, String escortStoreName, int limit) throws Exception {\r
- StoreUri storeUri = null;\r
+ StoreUri sourceStoreUri = null;\r
int count = limit;\r
\r
try {\r
- storeUri = getManager().getStoreUri(sourceStoreName, Enum.valueOf(RemoteStoreProtocol.class, protocol));\r
+ sourceStoreUri = getManager().getStoreUri(sourceStoreName, Enum.valueOf(RemoteStoreProtocol.class, protocol));\r
StoreUri escortSoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL);\r
+ StoreUri targetStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM);\r
+\r
String outputPath = Paths.get(escortSoreUri.toString(true)).toString();\r
\r
//az FTP store nem tamogatja az asszinkron listazast\r
- List<RemoteFile> remoteFiles = storeUri.getRemoteFiles(wildCard);\r
+ List<RemoteFile> remoteFiles = sourceStoreUri.getRemoteFiles(wildCard);\r
for (RemoteFile remoteFile : remoteFiles) {\r
- if (processClip(sourceStoreName, remoteFile, storeUri.getId(), outputPath))\r
+ if (processClip(sourceStoreName, remoteFile, sourceStoreUri, targetStoreUri, outputPath))\r
count--;\r
\r
if (count == 0) {\r
} catch (Exception e) {\r
throw e;\r
} finally {\r
- if (storeUri != null)\r
- storeUri.cleanUp();\r
+ if (sourceStoreUri != null)\r
+ sourceStoreUri.cleanUp();\r
}\r
\r
return null;\r
}\r
\r
- private boolean processClip(String storeName, RemoteFile remoteFile, long storeUriId, String outputPath) {\r
+ private boolean processClip(String storeName, RemoteFile remoteFile, StoreUri sourceStoreUri, StoreUri targetStoreUri, String outputPath) {\r
boolean result = false;\r
String title = remoteFile.getName();\r
Timestamp modified = Timestamp.from(remoteFile.getModify().toInstant());\r
if (createEscort) {\r
long mediaId = media == null ? 0 : media.getId();\r
String fileName = title + DOT_MXF;\r
- DownloadableMedia archive = DownloadableMedia.create(title, fileName, modified, created, 0, size, storeUriId, mediaId);\r
+ DownloadableMedia archive = DownloadableMedia.create(title, fileName, modified, created, 0, size, sourceStoreUri.getId(), targetStoreUri.getId(),\r
+ mediaId);\r
String escortFileName = storeName + "." + remoteFile.getName();\r
try {\r
result = EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, archive.toPrettyString(""));\r
try {\r
escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL);\r
StoreUri targetStoreUri = getManager().getStoreUri(targetStoreName, Enum.valueOf(RemoteStoreProtocol.class, targetProtocol));\r
+ StoreUri sourceStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM);\r
List<HarrisRecord> records = null;\r
for (Object vicFile : vicFiles) {\r
+ if (getJobRuntime().isWaitingCancel()) {\r
+ cancel();\r
+ break;\r
+ }\r
+\r
Path vicFilePath = Paths.get(String.valueOf(vicFile));\r
logger.info("Processing {} (exists: {})", vicFilePath, vicFilePath.toFile().exists());\r
VICFileParser parser = new VICFileParser(vicFilePath, lineFormat, validTypeCodes);\r
+ List<HarrisRecord> currentRecords = parser.getRecords();\r
if (records == null)\r
- records = parser.getRecords();\r
- else\r
- records.addAll(parser.getRecords());\r
+ records = currentRecords;\r
+ else {\r
+ if (currentRecords != null)\r
+ records.addAll(currentRecords);\r
+ }\r
}\r
\r
- int i = 0;\r
- for (HarrisRecord record : records) {\r
- processRecord(record, targetStoreName, targetStoreUri, escortStoreUri);\r
- i++;\r
- int progress = i * 100 / records.size();\r
- setProgress(progress);\r
- }\r
+ if (records != null && !getJobRuntime().isWaitingCancel()) {\r
+ int i = 0;\r
+ for (HarrisRecord record : records) {\r
\r
+ if (getJobRuntime().isWaitingCancel()) {\r
+ cancel();\r
+ break;\r
+ }\r
+\r
+ processRecord(record, targetStoreName, sourceStoreUri, targetStoreUri, escortStoreUri);\r
+ i++;\r
+ int progress = i * 100 / records.size();\r
+ setProgress(progress);\r
+ }\r
+ }\r
+ setProgress(100);\r
} catch (Exception e) {\r
logger.error(getSessionMarker(), e.getMessage());\r
- logger.error(e.getMessage());\r
throw e;\r
} finally {\r
if (escortStoreUri != null)\r
return null;\r
}\r
\r
- private void processRecord(HarrisRecord record, String targetStoreName, StoreUri targetStoreUri, StoreUri escortStoreUri) {\r
+ private void processRecord(HarrisRecord record, String targetStoreName, StoreUri sourceStoreUri, StoreUri targetStoreUri, StoreUri escortStoreUri) {\r
Media media = getManager().getMedia(record.getFileName());\r
\r
String fileName = record.getFileName();\r
}\r
\r
DownloadableMedia downloadable = DownloadableMedia.create(media.getTitle(), fileName, media.getModified(), media.getCreated(), media.getLength(), 0L,\r
- targetStoreUri.getId(), media.getId());\r
+ sourceStoreUri.getId(), targetStoreUri.getId(), media.getId());\r
+ downloadable.put("priority", 100);\r
String escortFileName = targetStoreName + "." + downloadable.getString("fileName");\r
String outputPath = null;\r
try {\r
media.setItemId(item.getId());\r
media.setLength(downloadable.getLong("frames"));\r
media.setArchived(Timestamp.from(Instant.now()));\r
+ Timestamp modified = downloadable.getTimestamp("modified");\r
+ Timestamp created = downloadable.getTimestamp("created");\r
+ media.setModified(modified);\r
+ media.setCreated(created);\r
media.add();\r
mediaFile.setMediaId(media.getId());\r
mediaFile.add();\r
- }\r
+ } else\r
+ logger.error(getMarker(), "Status file does not exists {}", escortFilePath);\r
} catch (Exception e) {\r
- logger.error(e.getMessage());\r
+ logger.error(getSessionMarker(), e.getMessage());\r
throw e;\r
}\r
return null;\r
private static final String DOT_MXF = ".mxf";\r
private static final Logger logger = LogManager.getLogger();\r
\r
- private boolean check(Timestamp modified, Timestamp created, int duration, Media media) {\r
- boolean create = media == null;\r
- create |= create || !media.getModified().equals(modified);\r
- create |= create || !media.getCreated().equals(created);\r
- //a regi moziknal nincs hossz mentve\r
- create |= create || (media.getLength() > 0 && media.getLength() != duration);\r
- return create;\r
- }\r
-\r
@StepEntry\r
public Object[] execute(String sourceStoreName, String escortStoreName, int lastModifiedHours, int limit) throws Exception {\r
Controller controller = null;\r
\r
try {\r
StoreUri nexioStoreUri = getManager().getStoreUri(sourceStoreName, RemoteStoreProtocol.NEXIO);\r
- StoreUri downloadStoreUri = getManager().getStoreUri(sourceStoreName, RemoteStoreProtocol.FTP);\r
+ StoreUri sourceStoreUri = getManager().getStoreUri(sourceStoreName, RemoteStoreProtocol.FTP);\r
+ StoreUri targetStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM);\r
StoreUri escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL);\r
String outputPath = Paths.get(escortStoreUri.toString(true)).toString();\r
\r
+ logger.info(getMarker(), "Connecting mediabase {}", nexioStoreUri.toString());\r
if (nexioStoreUri.getPortNumber() == 0)\r
controller = new Controller(nexioStoreUri.getUri(), nexioStoreUri.getPortNumber());\r
else\r
Mediabase mediabase = controller.getMediabase();\r
\r
Iterator<Clip> clips = mediabase.getClips();\r
- processClips(sourceStoreName, downloadStoreUri.getId(), outputPath, limit, clips, lastModifiedHours);\r
+ logger.info(getMarker(), "Processing clips");\r
+ processClips(sourceStoreName, sourceStoreUri, targetStoreUri, outputPath, limit, clips, lastModifiedHours);\r
} catch (Exception e) {\r
logger.error(getSessionMarker(), e.getMessage());\r
throw e;\r
} finally {\r
+ setProgress(100);\r
if (controller != null)\r
controller.disconnect();\r
}\r
return null;\r
}\r
\r
- private void processClips(String storeName, long storeUriId, String outputPath, int limit, Iterator<Clip> clips, int lastModifiedHours)\r
- throws ClipNotFoundException, IOException, ProtocolException {\r
- int count = limit;\r
+ private boolean check(Timestamp modified, Timestamp created, int duration, Media media) {\r
+ boolean create = media == null;\r
+ if (!create) {\r
+ create |= !media.getModified().equals(modified);\r
+ create |= !media.getCreated().equals(created);\r
+ //a regi moziknal nincs hossz mentve, es csak arra lovunk aminel 2 framnel nagyobb a kulonbseg\r
+ create |= media.getLength() > 0 && Math.abs(media.getLength() - duration) > 2;\r
+ }\r
+ return create;\r
+ }\r
+\r
+ private void processClips(String storeName, StoreUri sourceStoreUri, StoreUri targetStoreUri, String outputPath, int limit, Iterator<Clip> clips,\r
+ int lastModifiedHours) throws ClipNotFoundException, IOException, ProtocolException {\r
+ int currentCount = 0;\r
while (clips.hasNext()) {\r
\r
if (getJobRuntime().isWaitingCancel()) {\r
//negativ ha a masodik az elso elott van\r
long modifiedHours = Duration.between(clipModified, Instant.now()).toHours();\r
if (modifiedHours > lastModifiedHours) {\r
- logger.info(getSessionMarker(), "Modification time is too cloose for {}");\r
+ logger.info(getMarker(), "Modification time is too cloose for {}", title);\r
continue;\r
}\r
mediaId = media.getId();\r
}\r
\r
String fileName = title + DOT_MXF;\r
- DownloadableMedia downloadable = DownloadableMedia.create(title, fileName, modified, created, frames, 0, storeUriId, mediaId);\r
+ DownloadableMedia downloadable = DownloadableMedia.create(title, fileName, modified, created, frames, 0, sourceStoreUri.getId(),\r
+ targetStoreUri.getId(), mediaId);\r
String escortFileName = storeName + "." + downloadable.getString("fileName");\r
if (EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, downloadable.toPrettyString(""))) {\r
- logger.info(getSessionMarker(), "Archive status file created for {}", fileName);\r
- count--;\r
+ logger.info(getMarker(), "Archive status file created for {}", fileName);\r
+ currentCount++;\r
}\r
}\r
\r
- //vegtelen : limit<=0\r
- if (count == 0) {\r
- logger.info("Limit reached: {}", limit);\r
+ if (limit > 0) {\r
+ int p = (currentCount / limit) * 100;\r
+ setProgress(p);\r
+ }\r
+\r
+ if (currentCount == limit) {\r
+ logger.info(getMarker(), "Limit reached: {}", limit);\r
break;\r
}\r
\r
+ // logger.info(getSessionMarker(), "{} {}", limit, currentCount);\r
}\r
}\r
\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.io.DataInputStream;\r
+import java.io.FileNotFoundException;\r
+import java.io.IOException;\r
+import java.io.StringReader;\r
+import java.net.URL;\r
+import java.nio.file.Files;\r
+import java.nio.file.Path;\r
+import java.nio.file.Paths;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Calendar;\r
+import java.util.Date;\r
+import java.util.LinkedHashSet;\r
+import java.util.List;\r
+import java.util.TreeMap;\r
+\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.http.Header;\r
+import org.apache.http.HttpEntity;\r
+import org.apache.http.HttpResponse;\r
+import org.apache.http.auth.AuthScope;\r
+import org.apache.http.auth.UsernamePasswordCredentials;\r
+import org.apache.http.client.methods.HttpPost;\r
+import org.apache.http.entity.StringEntity;\r
+import org.apache.http.impl.client.DefaultHttpClient;\r
+import org.apache.http.params.BasicHttpParams;\r
+import org.apache.http.params.HttpConnectionParams;\r
+import org.apache.http.params.HttpParams;\r
+import org.apache.http.protocol.HTTP;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.w3c.dom.Document;\r
+import org.w3c.dom.NamedNodeMap;\r
+import org.w3c.dom.Node;\r
+import org.w3c.dom.NodeList;\r
+import org.xml.sax.InputSource;\r
+\r
+public class PBQuery {\r
+ public class MMMedia {\r
+ String name;\r
+ String usage;\r
+ }\r
+\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final int CONNECTION_TIMEOUT = 1000;\r
+ private static final int SOCKET_TIMEOUT = 2000;\r
+ public static final String GETMEDIAUSAGEBYUTRANGE = "/getMediaUsageByUTRange";\r
+ public static final String GETCUSTOMVIEW = "/getCustomView";\r
+\r
+ public static final String SOAP_TEMPLATE_ROOT = System.getProperty("jobengine.soap.template.root", "/opt/mediacube/configuration/soap");\r
+\r
+ private static Document toDocument(String xml) {\r
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();\r
+ DocumentBuilder builder = null;\r
+ try {\r
+ builder = factory.newDocumentBuilder();\r
+ Document doc = builder.parse(new InputSource(new StringReader(xml)));\r
+ return doc;\r
+ } catch (Exception e) {\r
+ logger.error(e.getMessage());\r
+ }\r
+ return null;\r
+ }\r
+\r
+ private SimpleDateFormat sdf_range = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:'00'");\r
+ private String primaryEndPoint;\r
+ private String primaryUserName;\r
+ private String primaryPassword;\r
+ private String secondaryEndPoint;\r
+ private String secondaryUserName;\r
+\r
+ private String secondaryPassword;\r
+\r
+ private int rangeForwardHours;\r
+\r
+ private String getAttribute(Node node, String name) {\r
+ String result = null;\r
+ if (node != null && node.hasAttributes()) {\r
+ NamedNodeMap attributes = node.getAttributes();\r
+ if (attributes != null) {\r
+ Node mediaNameNode = attributes.getNamedItem(name);\r
+ if (mediaNameNode != null)\r
+ result = mediaNameNode.getNodeValue();\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public LinkedHashSet<MMMedia> getPossibelMissingMaterialNames(List<String> poolContent) throws Exception {\r
+ LinkedHashSet<MMMedia> result = querySortableMedias(poolContent);\r
+ LinkedHashSet<MMMedia> otherMedias = queryOtherMedias(poolContent);\r
+ result.addAll(otherMedias);\r
+ return result;\r
+\r
+ }\r
+\r
+ public void init(String primaryEndPoint, String primaryUserName, String primaryPassword, String secondaryEndPoint, String secondaryUserName,\r
+ String secondaryPassword, int rangeForwardHours) throws Exception {\r
+ this.primaryEndPoint = primaryEndPoint;\r
+ this.primaryUserName = primaryUserName;\r
+ this.primaryPassword = primaryPassword;\r
+ this.secondaryEndPoint = secondaryEndPoint;\r
+ this.secondaryUserName = secondaryUserName;\r
+ this.secondaryPassword = secondaryPassword;\r
+ this.rangeForwardHours = rangeForwardHours;\r
+ }\r
+\r
+ public String query(String endPoint, String action, String soap, String user, String pwd) throws Exception {\r
+\r
+ HttpParams httpParameters = new BasicHttpParams();\r
+ HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT);\r
+ HttpConnectionParams.setSoTimeout(httpParameters, SOCKET_TIMEOUT);\r
+ DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);\r
+ //http://10.170.100.61:18083\r
+\r
+ String result = null;\r
+ DataInputStream is = null;\r
+ try {\r
+ URL url = new URL(endPoint);\r
+ httpclient.getCredentialsProvider().setCredentials(new AuthScope(url.getHost(), url.getPort(), null, "Digest"),\r
+ new UsernamePasswordCredentials(user, pwd));\r
+\r
+ HttpPost httppost = new HttpPost(url.toURI());\r
+ httppost.setHeader("soapaction", action);\r
+ //Content-Type application/soap+xml; charset=utf-8; action="/getMediaUsageByUTRange"\r
+ httppost.setHeader("Content-Type", "text/xml; charset=utf-8");\r
+ HttpEntity entity = new StringEntity(soap.toString(), HTTP.UTF_8);\r
+ httppost.setEntity(entity);\r
+ logger.info("Executing call");\r
+ HttpResponse response = httpclient.execute(httppost);// calling server\r
+ HttpEntity r_entity = response.getEntity(); //get response\r
+ Header[] headers = response.getAllHeaders();\r
+ for (Header h : headers) {\r
+ logger.info("Reponse Header", h.getName() + ": " + h.getValue());\r
+ }\r
+ if (r_entity != null) {\r
+ byte[] bytes = new byte[(int) r_entity.getContentLength()];\r
+ if (r_entity.isStreaming()) {\r
+ is = new DataInputStream(r_entity.getContent());\r
+ is.readFully(bytes);\r
+ }\r
+ result = new String(bytes);\r
+ }\r
+ } catch (Exception e) {\r
+ logger.error("Exception While Connecting", "" + e.getMessage());\r
+ throw e;\r
+ } finally {\r
+ if (is != null) {\r
+ try {\r
+ is.close();\r
+ } catch (IOException e) {\r
+ }\r
+ }\r
+ if (httpclient != null) {\r
+ httpclient.getConnectionManager().shutdown();\r
+ }\r
+ }\r
+\r
+ return result;\r
+ }\r
+\r
+ public LinkedHashSet<MMMedia> queryOtherMedias(List<String> poolContent) throws Exception {\r
+ LinkedHashSet<MMMedia> result = new LinkedHashSet<>();\r
+ String xml = null;\r
+ String soap = null;\r
+ Path template = Paths.get(SOAP_TEMPLATE_ROOT, GETCUSTOMVIEW);\r
+\r
+ if (!template.toFile().exists())\r
+ throw new FileNotFoundException(template.toString());\r
+ try {\r
+ soap = new String(Files.readAllBytes(template));\r
+ xml = query(primaryEndPoint, GETCUSTOMVIEW, soap, primaryUserName, primaryPassword);\r
+ } catch (Exception e1) {\r
+ try {\r
+ xml = query(secondaryEndPoint, GETCUSTOMVIEW, soap, secondaryUserName, secondaryPassword);\r
+ } catch (Exception e2) {\r
+ }\r
+ }\r
+\r
+ if (StringUtils.isNotBlank(xml)) {\r
+\r
+ Document document = toDocument(xml);\r
+ NodeList mediaNodes = document.getElementsByTagName("media");\r
+\r
+ if (mediaNodes == null || mediaNodes.getLength() == 0)\r
+ return result;\r
+\r
+ TreeMap<String, String> usages = new TreeMap<>();\r
+\r
+ for (int i = 0; i < mediaNodes.getLength(); i++) {\r
+ Node mediaNode = mediaNodes.item(i);\r
+ String mediaName = getAttribute(mediaNode, "mediaName");\r
+ if (StringUtils.isBlank(mediaName)) {\r
+ logger.info("Missing mediaName");\r
+ continue;\r
+ }\r
+\r
+ if (poolContent.contains(mediaName))\r
+ continue;\r
+\r
+ String usageTime = getAttribute(mediaNode, "earliestUsageTime");\r
+ logger.info("{}, {}", mediaName, usageTime);\r
+ //a TreeMap lehetove teszi: nincs duplikatum + a korabbi musorok elore kerulnek\r
+ usages.put(usageTime + "_" + mediaName, mediaName);\r
+\r
+ }\r
+\r
+ for (String key : usages.keySet()) {\r
+ MMMedia media = new MMMedia();\r
+ media.name = usages.get(key);\r
+ media.usage = key.split("_")[0];\r
+ result.add(media);\r
+ }\r
+ logger.info("Document done, items {}", mediaNodes.getLength());\r
+ }\r
+ return result;\r
+ }\r
+\r
+ public LinkedHashSet<MMMedia> querySortableMedias(List<String> poolContent) throws Exception {\r
+ LinkedHashSet<MMMedia> result = new LinkedHashSet<>();\r
+ String xml = null;\r
+ String soap = null;\r
+\r
+ Path template = Paths.get(SOAP_TEMPLATE_ROOT, GETMEDIAUSAGEBYUTRANGE);\r
+ if (!template.toFile().exists())\r
+ throw new FileNotFoundException(template.toString());\r
+\r
+ try {\r
+ long now = System.currentTimeMillis();\r
+ Calendar cal = Calendar.getInstance();\r
+ cal.setTimeInMillis(now);\r
+ cal.add(Calendar.HOUR_OF_DAY, rangeForwardHours);\r
+\r
+ String fromDateStr = sdf_range.format(new Date(now));\r
+ String toDateStr = sdf_range.format(cal.getTime());\r
+\r
+ soap = new String(Files.readAllBytes(template));\r
+ soap = soap.replace("{start}", fromDateStr);\r
+ soap = soap.replace("{end}", toDateStr);\r
+\r
+ xml = query(primaryEndPoint, GETMEDIAUSAGEBYUTRANGE, soap, primaryUserName, primaryPassword);\r
+ } catch (Exception e1) {\r
+ try {\r
+ xml = query(secondaryEndPoint, GETMEDIAUSAGEBYUTRANGE, soap, secondaryUserName, secondaryPassword);\r
+ } catch (Exception e2) {\r
+ }\r
+ }\r
+\r
+ if (StringUtils.isNotBlank(xml)) {\r
+\r
+ Document document = toDocument(xml);\r
+ NodeList mediaNodes = document.getElementsByTagName("mediaUsage");\r
+\r
+ if (mediaNodes == null || mediaNodes.getLength() == 0)\r
+ return result;\r
+\r
+ TreeMap<String, String> usages = new TreeMap<>();\r
+\r
+ for (int i = 0; i < mediaNodes.getLength(); i++) {\r
+ Node mediaNode = mediaNodes.item(i);\r
+ String mediaName = getAttribute(mediaNode, "mediaName");\r
+ if (StringUtils.isBlank(mediaName)) {\r
+ logger.info("Missing mediaName");\r
+ continue;\r
+ }\r
+\r
+ if (poolContent.contains(mediaName))\r
+ continue;\r
+\r
+ Node usageChild = mediaNode.getFirstChild();\r
+ if (usageChild == null) {\r
+ logger.info("Skipping {}, no media usage defined", mediaName);\r
+ continue;\r
+ }\r
+\r
+ NodeList usageNodes = usageChild.getChildNodes();\r
+ if (usageNodes == null || usageNodes.getLength() == 0) {\r
+ logger.info("Skipping {}, no media usage defined", mediaName);\r
+ continue;\r
+ }\r
+\r
+ for (int j = 0; j < usageNodes.getLength(); j++) {\r
+ Node mediaUsageNode = usageNodes.item(j);\r
+ String usageTime = getAttribute(mediaUsageNode, "earliestUsageTime");\r
+ logger.info("{}, {}", mediaName, usageTime);\r
+ //a TreeMap lehetove teszi: nincs duplikatum + a korabbi musorok elore kerulnek\r
+ usages.put(usageTime + "_" + mediaName, mediaName);\r
+ }\r
+\r
+ }\r
+\r
+ for (String key : usages.keySet()) {\r
+ MMMedia media = new MMMedia();\r
+ media.name = usages.get(key);\r
+ media.usage = key.split("_")[0];\r
+ result.add(media);\r
+ }\r
+ logger.info("Document done, items {}", mediaNodes.getLength());\r
+\r
+ }\r
+ return result;\r
+ }\r
+\r
+}\r
--- /dev/null
+package user.jobengine.server.steps;\r
+\r
+import java.nio.file.Paths;\r
+import java.util.List;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import user.commons.DownloadableMedia;\r
+import user.commons.StoreUri;\r
+import user.commons.remotestore.RemoteStoreProtocol;\r
+import user.jobengine.db.ArchivedMedia;\r
+import user.jobengine.db.Media;\r
+\r
+public class RegisterUserRestoreStep extends JobStep {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String appendExtension = System.getProperty("missingmaterial.appendextension", ".mxf");\r
+\r
+ @StepEntry\r
+ public Object[] execute(String escortStoreName, String targetStoreName, List<ArchivedMedia> basket, String recipient) throws Exception {\r
+ StoreUri escortStoreUri = null;\r
+ try {\r
+ escortStoreUri = getManager().getStoreUri(escortStoreName, RemoteStoreProtocol.LOCAL);\r
+ StoreUri targetStoreUri = getManager().getStore(targetStoreName).getTargetStoreUri();\r
+ StoreUri sourceStoreUri = getManager().getStoreUri("TSM", RemoteStoreProtocol.TSM);\r
+ int processed = 0;\r
+ for (ArchivedMedia media : basket) {\r
+ processRecord(media, targetStoreName, sourceStoreUri, targetStoreUri, escortStoreUri, recipient);\r
+ processed++;\r
+ int progress = processed * 100 / basket.size();\r
+ setProgress(progress);\r
+ }\r
+ } catch (Exception e) {\r
+ logger.error(getSessionMarker(), e.getMessage());\r
+ throw e;\r
+ } finally {\r
+ if (escortStoreUri != null)\r
+ escortStoreUri.cleanUp();\r
+ }\r
+\r
+ return null;\r
+ }\r
+\r
+ private void processRecord(ArchivedMedia archivedMedia, String targetStoreName, StoreUri sourceStoreUri, StoreUri targetStoreUri, StoreUri escortStoreUri,\r
+ String recipient) {\r
+ Media media = archivedMedia.getMedia();\r
+\r
+ String fileName = media.getTitle();\r
+ if (StringUtils.isNotBlank(appendExtension))\r
+ fileName += appendExtension;\r
+\r
+ DownloadableMedia downloadable = DownloadableMedia.create(media.getTitle(), fileName, media.getModified(), media.getCreated(), media.getLength(), 0L,\r
+ sourceStoreUri.getId(), targetStoreUri.getId(), media.getId());\r
+ downloadable.put("recipient", recipient);\r
+ String escortFileName = targetStoreName + "." + downloadable.getString("fileName");\r
+ String outputPath = null;\r
+ try {\r
+ outputPath = Paths.get(escortStoreUri.toString(true)).toString();\r
+ if (EscortFiles.createMetadataIfNotExists(outputPath, escortFileName, downloadable.toPrettyString("")))\r
+ logger.info(getSessionMarker(), "Status file created {}", escortFileName);\r
+ else\r
+ logger.info(getSessionMarker(), "Status file already exists {}", escortFileName);\r
+ } catch (Exception e) {\r
+ logger.error("Can't create escort file {}", Paths.get(outputPath.toString(), escortFileName));\r
+ }\r
+\r
+ }\r
+\r
+}\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
\r
+import user.commons.IJob;\r
+import user.commons.JobStatus;\r
+import user.commons.ListUtils;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
\r
// private static final String CHILD_TEMPLATE = "fake-concurrent.xml";\r
private static final String CHILD_TEMPLATE = "cancelable.xml";\r
private static final Logger logger = LogManager.getLogger();\r
- int count = 2;\r
+ int count = 5;\r
\r
@StepEntry\r
public Object[] execute(IJobEngine jobEngine, IJobRuntime jobRuntime) throws Exception {\r
- if (jobRuntime.forkPrepare()) {\r
- for (int i = 0; i < count; i++) {\r
- //jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
- jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, null);\r
- }\r
+ //jobRuntime.forkPrepare();\r
+ for (int i = 0; i < count; i++) {\r
+ //jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, CHILD_TITLE, ListUtils.asMap("itemID", i));\r
+ // IJobRuntime runtime = jobEngine.submit(jobRuntime, null, CHILD_TEMPLATE, "JOB " + i, ListUtils.asMap("param", i));\r
+ IJobRuntime runtime = getEngine().submit(null, e -> {\r
+ if (e.getStatus().equals(JobStatus.CANCELED) || e.getStatus().equals(JobStatus.SUSPENDED))\r
+ logger.info("Cleanup occured because status is {} {}", e.getStatus(), ((IJob) e.getSource()).getId());\r
+ }, CHILD_TEMPLATE, "JOB " + i, 0, IJobEngine.DEFAULT_OWNER, ListUtils.asMap("param", i));\r
+\r
+ runtime.setRelated("TEST" + runtime.getId());\r
}\r
\r
- jobRuntime.forkWaitComplete();\r
+ // jobRuntime.forkWaitComplete();\r
logger.info("Done");\r
return null;\r
}\r
\r
public class TransferStep extends JobStep {\r
private static final Logger logger = LogManager.getLogger();\r
- private static final boolean symulateTransferToTSM = Boolean.parseBoolean(System.getProperty("test.simulate.transfer.tsm", "false"));\r
+ private static final boolean simulateTransferToTSM = Boolean.parseBoolean(System.getProperty("test.simulate.transfer.tsm", "false"));\r
\r
@StepEntry\r
public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception {\r
try {\r
String description = Paths.get(sourceStoreUri.toString(true), sourceFileName).toString();\r
getJobRuntime().setDescription(description);\r
+\r
+ //logger.info(getSessionMarker(), String.valueOf(isSimulateTSMWrite(sourceStoreUri, targetStoreUri)));\r
if (isSimulateTSMWrite(sourceStoreUri, targetStoreUri)) {\r
- logger.info(getSessionMarker(), "Skipping real TSM write of {} from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri);\r
+ logger.info(getMarker(), "Skipping real TSM write of {} from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri);\r
} else {\r
sourceStoreUri.addProgressListener(e -> setProgress(e.getProgress()));\r
sourceStoreUri.transferFrom(targetStoreUri, sourceFileName, targetFileName);\r
- logger.info(getSessionMarker(), "Transfer of {} completed from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri);\r
+ logger.info(getMarker(), "Transfer of {} completed from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri);\r
}\r
} catch (Exception e) {\r
logger.error(getSessionMarker(), "Error in transfer of {} when copying from {} to {}", sourceFileName, sourceStoreUri, targetStoreUri);\r
}\r
\r
private boolean isSimulateTSMWrite(StoreUri sourceStoreUri, StoreUri targetStoreUri) {\r
- return symulateTransferToTSM && (RemoteStoreProtocol.TSM.equals(targetStoreUri.getProtocol()));\r
+ return simulateTransferToTSM && (RemoteStoreProtocol.TSM.equals(targetStoreUri.getProtocol()));\r
}\r
}\r
+++ /dev/null
-package pb.wsclient;\r
-\r
-import java.net.URL;\r
-import java.util.List;\r
-import javax.xml.ws.BindingProvider;\r
-\r
-\r
-public class PBClientTest {\r
-\r
-\r
- //KONSTRUKTOR\r
- public PBClientTest() {\r
- try {\r
- \r
- URL wsdlURL = PBClientTest.class.getClassLoader().getResource("MarinaAPI.wsdl");\r
-\r
- PBSMarinaAPIService api = new PBSMarinaAPIService(wsdlURL);\r
- PBSMarinaAPI port = api.getPBSMarinaAPISOAPPort();\r
- \r
- BindingProvider bp = (BindingProvider)port;\r
- bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://10.170.100.5:18083");\r
-\r
- //Optional credentials\r
- bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "pbs");\r
- bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pbs");\r
-\r
- \r
- DateTimecodeRangeContainer rangec = new DateTimecodeRangeContainer();\r
- DateTimecodeRange range = new DateTimecodeRange();\r
- range.setStart("2019-03-26T10:00:00:00"); //now\r
- range.setEnd("2019-03-29T10:00:00:00"); //now + x hours\r
- rangec.setDateTimecodeRange(range); \r
-\r
- \r
- \r
- MediaUsageListContainer mulc = port.getMediaUsageByUTRange(rangec,false,true);\r
- MediaUsageList mul = mulc.getMediaUsageList();\r
- \r
- List<MediaUsage> mediaList = mul.getMediaUsage();\r
- java.lang.System.out.println("response ok: " + mediaList.size());\r
- for(MediaUsage mu : mediaList) {\r
- \r
- if(MediaType.VIDEO.equals(mu.getMediaType())) {\r
- java.lang.System.out.println(mu.getMediaName() + " ***********************");\r
- MediaUsage.MediaInstancesUsage muUsage = mu.getMediaInstancesUsage();\r
- List<MediaInstanceUsage> muUsageList = muUsage.getMediaInstanceUsage();\r
- for(MediaInstanceUsage usage : muUsageList) {\r
- java.lang.System.out.println(" LastUsageTime(): " + usage.getLastUsageTime() + ", EarliestUsageTime(): " + usage.getEarliestUsageTime());\r
- }\r
- }else {\r
- java.lang.System.out.println("Skip media type: " + mu.getMediaType() + " for: " + mu.getMediaName());\r
- }\r
- \r
- //MediaType muType = mu.getMediaType();\r
- }\r
- \r
- \r
- //\\10.170.100.10\media\r
- \r
- }catch(Exception exc) {\r
- exc.printStackTrace();\r
- }\r
- }\r
- \r
- \r
- \r
- \r
- public static void main(String[] args) {\r
- new PBClientTest();\r
-\r
- }\r
-\r
-}\r
\r
public class DownloadableMedia extends BasicDBObject {\r
\r
- public static DownloadableMedia create(String title, String fileName, Timestamp modified, Timestamp created, long frames, long size, long storeUriId,\r
- long mediaId) {\r
+ public static DownloadableMedia create(String title, String fileName, Timestamp modified, Timestamp created, long frames, long size, long sourceStoreUriId,\r
+ long targetStoreUriId, long mediaId) {\r
DownloadableMedia archive = new DownloadableMedia();\r
archive.put("title", title);\r
archive.put("fileName", fileName);\r
archive.put("created", created);\r
archive.put("frames", frames);\r
archive.put("size", size);\r
- archive.put("storeUriId", storeUriId);\r
+ archive.put("sourceStoreUriId", sourceStoreUriId);\r
+ archive.put("targetStoreUriId", targetStoreUriId);\r
archive.put("mediaId", mediaId);\r
return archive;\r
}\r
\r
String getOwner();\r
\r
+ Map<String, Object> getParameters();\r
+\r
long getParentJobId();\r
\r
int getPriority();\r
\r
int getProgress();\r
\r
+ String getRelated();\r
+\r
Timestamp getScheduledTime();\r
\r
JobStatus getStatus();\r
\r
void setProgress(int progress);\r
\r
+ void setRelated(String related);\r
+\r
void setScheduledTime(Timestamp scheduledTime);\r
\r
void setStatus(JobStatus status);\r
protected final static AtomicLong counter1 = new AtomicLong();\r
protected volatile int priority;\r
\r
- protected String name = null;\r
- protected String owner = null;\r
- protected volatile JobStatus status = null;\r
- protected volatile String description = null;\r
- protected String template = null;\r
- protected volatile Timestamp submitted = null;\r
- protected volatile Timestamp finished = null;\r
+ private Map<String, Object> parameters;\r
+ protected String name;\r
+ protected String owner;\r
+ private String related;\r
+ protected volatile JobStatus status;\r
+ protected volatile String description;\r
+ protected String template;\r
+ protected volatile Timestamp submitted;\r
+ protected volatile Timestamp finished;\r
protected volatile int progress;\r
private Timestamp scheduledTime;\r
private long parentJobId;\r
return owner;\r
}\r
\r
+ @Override\r
+ public Map<String, Object> getParameters() {\r
+ return parameters;\r
+ }\r
+\r
@Override\r
public long getParentJobId() {\r
return parentJobId;\r
return progress;\r
}\r
\r
+ @Override\r
+ public String getRelated() {\r
+ return related;\r
+ }\r
+\r
@Override\r
@XmlJavaTypeAdapter(TimestampAdapter.class)\r
public Timestamp getScheduledTime() {\r
\r
@Override\r
public void setParameters(Map<String, Object> parameters) {\r
+ this.parameters = parameters;\r
}\r
\r
@Override\r
this.progress = progress;\r
}\r
\r
+ @Override\r
+ public void setRelated(String related) {\r
+ this.related = related;\r
+ }\r
+\r
@Override\r
public void setScheduledTime(Timestamp scheduledTime) {\r
this.scheduledTime = scheduledTime;\r
public String toString() {\r
return String.format("## %d / %s / %s [%s] ##", getId(), getName(), getTemplate(), status);\r
}\r
+\r
}\r
public RemoteFile getRemoteFile(String fileName) throws Exception {
ensureLister();
- return lister.get(fileName);
+ RemoteFile remoteFile = lister.get(fileName);
+ return remoteFile;
}
public List<RemoteFile> getRemoteFiles() throws Exception {
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.");
private static final Logger logger = LogManager.getLogger();\r
private TSMBufferedClient client;\r
private TSMBackupFileObject backupObject;\r
- private String filespaceName;\r
- private String highLevelName;\r
private RemoteFile remoteFile;\r
\r
private boolean initialized;\r
\r
- public TSMInputStream(TSMBufferedClient client, String filespaceName, String highLevelName, RemoteFile remoteFile) {\r
+ public TSMInputStream(TSMBufferedClient client, RemoteFile remoteFile) {\r
this.client = client;\r
- this.filespaceName = filespaceName;\r
- this.highLevelName = highLevelName;\r
this.remoteFile = remoteFile;\r
}\r
\r
@Override\r
public void close() {\r
client.disconnect();\r
- logger.info("TSM lekapcsol�dott!");\r
+ logger.info("TSM disconnected");\r
}\r
\r
public void open() throws TSMException {\r
- backupObject = client.getActiveBackupFileObject(filespaceName, highLevelName, remoteFile.getName());\r
- logger.info("BackupObject created");\r
+ backupObject = (TSMBackupFileObject) remoteFile.getSourceObject();\r
}\r
\r
@Override\r
\r
public class TSMLister implements IDirectoryLister {\r
\r
- private static final String FSNAME = File.separator + System.getProperty("tsm.fsname", "JOBENGINE");\r
- private static final String HLNAME = File.separator + System.getProperty("tsm.hlname", "JOBENGINE");\r
+ private static final String NODENAME = System.getProperty("tsm.nodename", "JOBENGINE");\r
+ private static final String FSNAME = System.getProperty("tsm.fsname", "JOBENGINE");\r
+ private static final String HLNAME = System.getProperty("tsm.hlname", "JOBENGINE");\r
private static final Logger logger = LogManager.getLogger();\r
private TSMBufferedClient client;\r
\r
public TSMLister(StoreUri storeUri) throws Exception {\r
- client = new TSMBufferedClient();\r
- logger.info("TSMBufferedClient created!");\r
+ client = new TSMBufferedClient(NODENAME);\r
+ logger.info("TSMBufferedClient created");\r
client.connect(storeUri.getUserName(), storeUri.getPassword());\r
- logger.info("TSMBufferedClient connected!");\r
+ logger.info("TSMBufferedClient connected, parameters: {} {} {}, separator: {}", NODENAME, FSNAME, HLNAME, File.separator);\r
}\r
\r
@Override\r
@Override\r
public RemoteFile get(String fileName) throws Exception {\r
RemoteFile result = null;\r
- TSMBackupFileObject backupFileObject = client.getActiveBackupFileObject(FSNAME, HLNAME, File.separator + fileName);\r
- logger.info("TSMLister get");\r
+\r
+ String currentFileName = fileName;\r
+ logger.info("Getting {}, {}, {}", FSNAME, HLNAME, currentFileName);\r
+ TSMBackupFileObject backupFileObject = client.getActiveBackupFileObject(FSNAME, "\\", "\\" + currentFileName);\r
+\r
+ //probaljuk meg kiterjesztes nelkul is\r
+ if (backupFileObject == null && currentFileName.contains(".")) {\r
+ currentFileName = fileName.substring(0, fileName.lastIndexOf("."));\r
+ logger.info("Getting {}, {}, {}", FSNAME, HLNAME, currentFileName);\r
+ backupFileObject = client.getActiveBackupFileObject(FSNAME, "\\", "\\" + currentFileName);\r
+ }\r
+\r
if (backupFileObject != null) {\r
result = toRemoteFile(backupFileObject);\r
- logger.info("BackupFileObject: " + backupFileObject.getLowLevelName());\r
- } else\r
+ logger.info("Got object {}, {}, {}", FSNAME, HLNAME, currentFileName);\r
+ } else {\r
+ logger.info("Object not exists {}, {}, {}", FSNAME, HLNAME, currentFileName);\r
cleanUp();\r
+ }\r
return result;\r
}\r
\r
@Override\r
public InputStream getInputStream(RemoteFile remoteFile) throws Exception {\r
- TSMInputStream inputStream = new TSMInputStream(client, FSNAME, HLNAME, remoteFile);\r
+ TSMInputStream inputStream = new TSMInputStream(client, remoteFile);\r
logger.info("TSM InputStream created");\r
inputStream.open();\r
return inputStream;\r
RemoteFile result = new RemoteFile();\r
result.setName(file.getLowLevelName());\r
result.setSize(file.getSizeEstimate());\r
+ result.setSourceObject(file);\r
return result;\r
}\r
}\r
extends sqlj.runtime.ref.ResultSetIterImpl
implements sqlj.runtime.NamedIterator
{
+ private int fileSizeNdx;
private int houseIdNdx;
private int fileStructInfoNdx;
private int relativePathNdx;
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
relativePathNdx = findColumn("relativePath");
fileStructInfoNdx = findColumn("fileStructInfo");
houseIdNdx = findColumn("houseId");
+ fileSizeNdx = findColumn("fileSize");
}
public long id()
throws java.sql.SQLException
{
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 {
entity.setRelativePath(iterator.relativePath());
entity.setFileStructInfo(iterator.fileStructInfo());
entity.setHouseId(iterator.houseId());
+ entity.setFileSize(iterator.fileSize());
if (result == null)
result = new ArrayList<IEntityBase>();
@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 };
// ************************************************************
{
// ************************************************************
-/*@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 };
// ************************************************************
{
// ************************************************************
-/*@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 };
// ************************************************************
{
// ************************************************************
-/*@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 };
// ************************************************************
-/*@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 };
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:68^90*/
+/*@lineinfo:user-code*//*@lineinfo:69^90*/
}
@Override
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 };
// ************************************************************
{
__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
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:82^204*/
+/*@lineinfo:user-code*//*@lineinfo:84^226*/
}
@Override
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) };
// ************************************************************
{
__sJT_stmt.setString(4, relativePath);
__sJT_stmt.setString(5, fileStructInfo);
__sJT_stmt.setString(6, houseId);
+ __sJT_stmt.setLong(7, fileSize);
__sJT_execCtx.executeUpdate();
}
finally
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:95^194*/
+/*@lineinfo:user-code*//*@lineinfo:98^215*/
}
void addAll(DefaultContext context, IEntityBase entity) throws SQLException {
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 };
// ************************************************************
-/*@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 };
// ************************************************************
{
// ************************************************************
-/*@lineinfo:user-code*//*@lineinfo:122^145*/
+/*@lineinfo:user-code*//*@lineinfo:125^155*/
return iter;
}
--- /dev/null
+--
+-- 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')
+@
--- /dev/null
+--
+-- 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
+@
import sqlj.runtime.ref.DefaultContext;\r
import sqlj.runtime.ref.ResultSetIterImpl;\r
/**\r
- * Az entit�sok alap DAO oszt�lya.\r
+ * Az entitasok alap DAO osztalya.\r
*/\r
@SuppressWarnings("unused")\r
public abstract class EntityBaseDAO implements IEntityBaseDAO {\r
}\r
return result;\r
}\r
+\r
+ @Override\r
+ public List<IEntityBase> getAll(IDAOIterProvider provider) {\r
+ List<IEntityBase> result = null;\r
+ DefaultContext context = manager.getDbContext();\r
+ try {\r
+ result = getAll(context, provider);\r
+ } catch (Exception e) {\r
+ throw new ItemManagerException(e);\r
+ } finally {\r
+ manager.putDbContext(context);\r
+ }\r
+ return result;\r
+ }\r
\r
@Override\r
public IEntityBase get(IDAOIterProvider provider) {\r
return entity;\r
} \r
\r
+ public List<IEntityBase> getAll(DefaultContext context, IDAOIterProvider provider) {\r
+ manager.traceIn();\r
+ List<IEntityBase> result = null;\r
+ try {\r
+ ResultSetIterImpl iter = provider.get(context, this);\r
+ checkNull(iter, ResultSetIterImpl.class);\r
+ result = getList(context, iter, false, true);\r
+ } catch (Exception e) {\r
+ throw new ItemManagerException(e);\r
+ }\r
+ manager.traceOut();\r
+ return result;\r
+ }\r
+\r
public List<IEntityBase> getAll(DefaultContext context) {\r
manager.traceIn();\r
List<IEntityBase> result = null;\r
\r
List<IEntityBase> getAll(long id);\r
\r
+ List<IEntityBase> getAll(IDAOIterProvider provider);\r
+\r
void merge(IEntityBase entity);\r
\r
void modify(IEntityBase entity);\r
import user.commons.BaseType;\r
import user.commons.IEntityBase;\r
import user.commons.IEntityPersister;\r
+import user.commons.IJob;\r
import user.commons.Job;\r
import user.commons.StoreUri;\r
import user.commons.remotestore.RemoteStoreProtocol;\r
*/\r
List<ItemType> getItemTypes();\r
\r
+ List<IJob> getJobsHistory(String related);\r
+\r
/**\r
* Azonosító alapján elkér egy Verzió objektumot.\r
*\r
*/\r
Store getSystemStore(boolean lowres);\r
\r
+ List<Store> getTargetStores();\r
+\r
/**\r
* Ha a bemeneti paraméter alapján létezik ilyen felhasználó, akkor true-val tér vissza.\r
*\r
import user.commons.BaseType;\r
import user.commons.CalendarUtils;\r
import user.commons.IEntityBase;\r
+import user.commons.IJob;\r
import user.commons.Job;\r
import user.commons.ListUtils;\r
import user.commons.StoreUri;\r
return result;\r
}\r
\r
+ @SuppressWarnings("unchecked")\r
+ @Override\r
+ public List<IJob> getJobsHistory(String related) {\r
+ IEntityBaseDAO daoBase = getBaseDAO(Job.class);\r
+ return (List<IJob>) (List<?>) daoBase.getAll((context, dao) -> {\r
+ ResultSetIterImpl result = null;\r
+ try {\r
+ result = ((JobDAO) dao).selectByRelated(context, related);\r
+ } catch (SQLException e) {\r
+ logger.error(e.getMessage());\r
+ }\r
+ return result;\r
+ });\r
+ }\r
+\r
long getLastId(Statement st) throws SQLException {\r
traceIn();\r
long id = 0;\r
return result;\r
}\r
\r
+ @SuppressWarnings("unchecked")\r
+ @Override\r
+ public List<Store> getTargetStores() {\r
+ StoreDAO dao = (StoreDAO) getBaseDAO(Store.class);\r
+ List<Store> stores = (List<Store>) (List<?>) dao.getAll();\r
+ List<Store> result = new ArrayList<>();\r
+ for (Store store : stores) {\r
+ if (store.isSystem() || !store.hasTargetStoreUri())\r
+ continue;\r
+ result.add(store);\r
+ }\r
+ return result;\r
+ }\r
+\r
@Override\r
public boolean getUser(String userName, String password) {\r
IEntityBase entity = getUserInfo(userName, password);\r
entity.setFinished(iterator.finished());\r
entity.setTemplate(iterator.template());\r
entity.setScheduledTime(iterator.scheduledTime());\r
+ entity.setRelated(iterator.related());\r
if (result == null)\r
result = new ArrayList<IEntityBase>(); \r
result.add(entity);\r
@Override\r
protected ResultSetIterImpl selectByKey(DefaultContext context, long id) throws SQLException{\r
JobIter iter = null;\r
- #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME FROM JOB WHERE ID = :id };\r
+ #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED FROM JOB WHERE ID = :id };\r
return iter;\r
}\r
\r
@Override\r
protected ResultSetIterImpl selectAll(DefaultContext context) throws SQLException{\r
JobIter iter = null;\r
- #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME FROM JOB };\r
+ #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED FROM JOB };\r
+ return iter;\r
+ }\r
+\r
+ public ResultSetIterImpl selectByRelated(DefaultContext context, String related) throws SQLException{\r
+ JobIter iter = null;\r
+ #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED FROM JOB WHERE LOOKUP(RELATED, :related) > 0 };\r
return iter;\r
}\r
\r
Timestamp finished = obj.getFinished();\r
String template = obj.getTemplate();\r
Timestamp scheduledTime = obj.getScheduledTime();\r
- \r
- #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 };\r
+ String related = obj.getRelated();\r
+ \r
+ #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 };\r
}\r
\r
@Override\r
Timestamp finished = obj.getFinished();\r
String template = obj.getTemplate();\r
Timestamp scheduledTime = obj.getScheduledTime(); \r
+ String related = obj.getRelated();\r
\r
- #sql [context] { INSERT INTO JOB (NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME) \r
- VALUES (:name, :owner, :priority, :progress, :status, :description, :submitted, :finished, :template, :scheduledTime) };\r
+ #sql [context] { INSERT INTO JOB (NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED) \r
+ VALUES (:name, :owner, :priority, :progress, :status, :description, :submitted, :finished, :template, :scheduledTime, :related) };\r
} \r
\r
public List<IEntityBase> getAllIncomplete(String template) {\r
try {\r
JobIter iter = null;\r
//ResultSetIterImpl iter = null;\r
- #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME \r
+ #sql [context] iter = { SELECT ID, NAME, OWNER, PRIORITY, PROGRESS, STATUS, DESCRIPTION, SUBMITTED, FINISHED, TEMPLATE, SCHEDULEDTIME, RELATED \r
FROM JOB WHERE TEMPLATE = :template\r
AND STATUS IN ('EXECUTING', 'WAIT_EXECUTOR', 'WAIT_SUSPEND', 'RUNABLE')};\r
result = getList(context, iter, false);\r
\r
import java.sql.Timestamp;\r
\r
-#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);\r
+#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);\r
private String relativePath = null;
private Store store = null;
private long storeId = 0;
+ private long fileSize = 0;
private String houseId = null;
public String getFileStructInfo() {
this.storeId = id;
}
+ public long getFileSize() {
+ return fileSize;
+ }
+
+ public void setFileSize(long fileSize) {
+ this.fileSize = fileSize;
+ }
+
}
\ No newline at end of file
import java.util.ArrayList;\r
import java.util.List;\r
\r
-#sql iterator MediaFileIter(long id, long mediaId, long storeId, long fileTypeId, String relativePath, String fileStructInfo, String houseId);\r
+#sql iterator MediaFileIter(long id, long mediaId, long storeId, long fileTypeId, String relativePath, String fileStructInfo, String houseId, long fileSize);\r
\r
@SuppressWarnings("unused")\r
public class MediaFileDAO extends EntityBaseDAO {\r
entity.setRelativePath(iterator.relativePath());\r
entity.setFileStructInfo(iterator.fileStructInfo());\r
entity.setHouseId(iterator.houseId());\r
+ entity.setFileSize(iterator.fileSize());\r
\r
if (result == null)\r
result = new ArrayList<IEntityBase>(); \r
@Override\r
protected ResultSetIterImpl selectByKey(DefaultContext context, long id) throws SQLException{\r
MediaFileIter iter = null;\r
- #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE WHERE ID = :id };\r
+ #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE WHERE ID = :id };\r
return iter;\r
}\r
\r
@Override\r
protected ResultSetIterImpl selectByForeignKey(DefaultContext context, long id) throws SQLException{\r
MediaFileIter iter = null;\r
- #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE WHERE MEDIAID = :id };\r
+ #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE WHERE MEDIAID = :id };\r
return iter;\r
}\r
\r
@Override\r
protected ResultSetIterImpl selectAll(DefaultContext context) throws SQLException{\r
MediaFileIter iter = null;\r
- #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE };\r
+ #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE };\r
return iter;\r
}\r
\r
String relativePath = obj.getRelativePath();\r
String fileStructInfo = obj.getFileStructInfo();\r
String houseId = obj.getHouseId();\r
+ long fileSize = obj.getFileSize();\r
\r
- #sql [context] { UPDATE MEDIAFILE SET MEDIAID = :mediaId, STOREID = :storeId, FILETYPEID = :fileTypeId, RELATIVEPATH = :relativePath, FILESTRUCTINFO = :fileStructInfo, HOUSEID = :houseId WHERE ID = :id };\r
+ #sql [context] { UPDATE MEDIAFILE SET MEDIAID = :mediaId, STOREID = :storeId, FILETYPEID = :fileTypeId, RELATIVEPATH = :relativePath, FILESTRUCTINFO = :fileStructInfo, HOUSEID = :houseId, FILESIZE = :fileSize WHERE ID = :id };\r
}\r
\r
@Override\r
String relativePath = obj.getRelativePath();\r
String fileStructInfo = obj.getFileStructInfo();\r
String houseId = obj.getHouseId();\r
+ long fileSize = obj.getFileSize();\r
\r
- #sql [context] { INSERT INTO MEDIAFILE (MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID) VALUES (:mediaId, :storeId, :fileTypeId, :relativePath, :fileStructInfo, :houseId) };\r
+ #sql [context] { INSERT INTO MEDIAFILE (MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE) VALUES (:mediaId, :storeId, :fileTypeId, :relativePath, :fileStructInfo, :houseId, :fileSize) };\r
}\r
\r
void addAll(DefaultContext context, IEntityBase entity) throws SQLException {\r
\r
private MediaFileIter selectByHouseId(DefaultContext context, String houseId) throws SQLException{\r
MediaFileIter iter = null;\r
- #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID FROM MEDIAFILE WHERE HOUSEID = :houseId };\r
+ #sql [context] iter = { SELECT ID, MEDIAID, STOREID, FILETYPEID, RELATIVEPATH, FILESTRUCTINFO, HOUSEID, FILESIZE FROM MEDIAFILE WHERE HOUSEID = :houseId };\r
return iter;\r
}\r
\r
return this.storeUris;
}
+ public StoreUri getTargetStoreUri() {
+ StoreUri result = null;
+ List<StoreUri> uris = getStoreUris();
+ for (StoreUri uri : uris) {
+ if (uri.isTarget()) {
+ result = uri;
+ break;
+ }
+ }
+ return result;
+ }
+
public StoreUri getTargetStoreUri(RemoteStoreProtocol protocol) {
StoreUri result = null;
List<StoreUri> uris = getStoreUris();
return result;
}
+ public boolean hasTargetStoreUri() {
+ boolean result = false;
+ List<StoreUri> uris = getStoreUris();
+ for (StoreUri uri : uris) {
+ if (uri.isTarget()) {
+ result = true;
+ break;
+ }
+ }
+ return result;
+ }
+
public boolean isLowres() {
return isLowres;
}
public void setSystem(boolean isSystem) {
this.isSystem = isSystem;
}
+
}
\ No newline at end of file
--- /dev/null
+<zk>\r
+ <hbox self="@define(content)" vflex="1" hflex="1" align="center" pack="center">\r
+ <vlayout>\r
+ <window viewModel="@id('jlm') @init('user.jobengine.zk.model.PwdGenModel')" border="none" hflex="min">\r
+ <hbox align="center">\r
+ <button iconSclass="z-icon-minus-circle" />\r
+ <label style="font-size: 20px;" value="Nincs megfelelő jogosultsága!"/>\r
+ </hbox>\r
+ </window>\r
+ </vlayout>\r
+ </hbox>\r
+</zk>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<window id="wndRetrieveBatch" title="Visszatöltés (v2)" width="700px" border="normal" apply="org.zkoss.bind.BindComposer"\r
+ viewModel="@id('jlm') @init('user.jobengine.zk.model.AlternateRetrieveBatchSelectorModel')" onCancel="wndRetrieveBatch.detach()">\r
+ <grid>\r
+ <columns>\r
+ <column hflex="min" />\r
+ <column hflex="1" />\r
+ </columns>\r
+ <rows>\r
+ <row>\r
+ <label value="Értesítési cím:" />\r
+ <textbox value="@load(jlm.email) @save(jlm.email,before='execute')" width="100%" tabindex="2" forward="onOK=execute.onClick"\r
+ constraint="/.+@.+\.[a-z]+/: Kérem adjon meg egy email címet!" />\r
+ </row>\r
+ <row>\r
+ <label value="Visszatöltés helye:"></label>\r
+ <selectbox model="@load(jlm.stores)">\r
+ <template name="model">\r
+ ${each.name}\r
+ </template>\r
+ </selectbox>\r
+ </row>\r
+ <row>\r
+ <cell colspan="2">\r
+ <listbox ctrlKeys="#del" onCtrlKey="@command('remove')" height="400px" id="basketList" sizedByContent="false" model="@load(jlm.basketItems)"\r
+ multiple="true" checkmark="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style"\r
+ emptyMessage="Üres" selectedItems="@save(jlm.selectedItems)">\r
+ <listhead>\r
+ <listheader label="Azonosító" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Cím" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Filenév" hflex="1" align="left" sort="auto" />\r
+ </listhead>\r
+\r
+ <template name="model">\r
+ <listitem>\r
+ <listcell label="@load(each.media.id)" />\r
+ <listcell label="@load(each.media.title)" />\r
+ <listcell label="@load(each.media.mediaFileRealName)" />\r
+ </listitem>\r
+ </template>\r
+ </listbox>\r
+ </cell>\r
+ </row>\r
+ <row>\r
+ <cell colspan="2">\r
+ <toolbar vflex="min" style="font-size:8px">\r
+ <toolbarbutton id="remove" image="/img/ic_remove_shopping_cart_black_18dp.png" autodisable="self" \r
+ onClick="@command('remove')" disabled="@load((jlm.selectedItems eq null) or (jlm.selectedItems.size() eq 0))" />\r
+ </toolbar>\r
+ </cell>\r
+ </row>\r
+ </rows>\r
+ </grid>\r
+ <hbox width="100%" pack="center" align="center">\r
+ <button id="cancel" label="Mégsem" autodisable="execute,cancel" onClick="wndRetrieveBatch.detach()" />\r
+ <button id="execute" label="Végrehajtás" autodisable="execute,cancel" disabled="@load(jlm.disabled)" onClick="@command('execute')" />\r
+ </hbox>\r
+</window>\r
\r
<toolbar>\r
<spinner constraint="no empty,min 1 max 50" value="@bind(jlm.newPriority)" width="60px" disabled="@load(jlm.updatePriorityDisabled)" />\r
- <toolbarbutton label="Repriorizálás" iconSclass="z-icon-asterisk" onClick="@command('changeJobsPriority')" disabled="@load(jlm.updatePriorityDisabled)" autodisable="self"/>\r
- <toolbarbutton label="Feladat leállítása" iconSclass="z-icon-times-circle" onClick="@command('cancelJobs')" autodisable="self"/>\r
+ <toolbarbutton label="Repriorizálás" iconSclass="z-icon-asterisk" onClick="@command('changeJobsPriority')" disabled="@load(jlm.updatePriorityDisabled)" autodisable="self"/>\r
+ <toolbarbutton label="Feladat leállítása" iconSclass="z-icon-times-circle" onClick="@command('cancelSelectedJobs')" disabled="@load(jlm.updatePriorityDisabled)" autodisable="self"/>\r
<separator orient="vertical"/>\r
- <toolbarbutton label="Futtatás" iconSclass="z-icon-play" onClick="@command('executeJob')" autodisable="self"/>\r
- <toolbarbutton label="Összes letiltása" iconSclass="z-icon-ban" mode="toggle" checked="@bind(jlm.allExecutionDisabled)" autodisable="self"/>\r
- <toolbarbutton label="Időzítettek letiltása" iconSclass="z-icon-clock-o" mode="toggle" checked="@bind(jlm.scheduledExecutionDisabled)" autodisable="self"/>\r
+ <toolbarbutton label="Futtatás" iconSclass="z-icon-play" onClick="@command('executeJob')" disabled="${not sessionScope.userPrincipal.admin}" autodisable="self" />\r
+ <toolbarbutton label="Összes megszakítása" iconSclass="z-icon-stop" onClick="@command('cancelAllJobs')" disabled="${not sessionScope.userPrincipal.admin}" autodisable="self" />\r
+ \r
+ <toolbarbutton label="Összes letiltása" iconSclass="z-icon-ban" mode="toggle" checked="@bind(jlm.allExecutionDisabled)" disabled="${not sessionScope.userPrincipal.admin}" autodisable="self"/>\r
+ <toolbarbutton label="Időzítettek letiltása" iconSclass="z-icon-clock-o" mode="toggle" checked="@bind(jlm.scheduledExecutionDisabled)" disabled="${not sessionScope.userPrincipal.admin}" autodisable="self"/>\r
<separator orient="vertical"/>\r
<toolbarbutton label="Leállítás" iconSclass="z-icon-level-down" onClick="@command('shutdown')" disabled="@load(jlm.shutdownDisabled)" autodisable="self"/>\r
<toolbarbutton label="Elindítás" iconSclass="z-icon-level-up" onClick="@command('startup')" disabled="@load(jlm.startupDisabled)" autodisable="self"/>\r
<separator orient="vertical"/>\r
<toolbarbutton label="Takarítás" iconSclass="z-icon-eraser" onClick="@command('cleanupSuspended')" autodisable="self"/>\r
<separator orient="vertical"/>\r
+ <textbox value="@bind(jlm.searchText)" onOK="@command('searchRelated')" onCancel="@command('resetSearchRelated')"/>\r
<toolbarbutton label="NEXIO szinkronizálás" iconSclass="z-icon-renren" onClick="@command('restartNexio')" visible="${not sessionScope.nexioDisable}" autodisable="self"/>\r
</toolbar>\r
\r
<!-- <center> -->\r
<listbox id="lbJobList" sizedByContent="false" span="false" model="@load(jlm.jobList)" multiple="true" pagingPosition="top" mold="paging" autopaging="true"\r
vflex="true" checkmark="true" style="border: none; background: #e3e3e3 !important;" oddRowSclass="listbox-odd-style" sclass="listbox-normal-style"\r
- emptyMessage="Nincs futó folyamat" >\r
+ emptyMessage="Nincs futó folyamat" onSelect="@command('onSelect')" >\r
<listhead>\r
<listheader label="Id" hflex="min" align="left" sort="auto" />\r
<listheader label="ParentId" hflex="min" align="left" sort="auto" />\r
<listheader label="Kész" hflex="min" align="left" sort="auto" />\r
<listheader label="Név" hflex="min" align="left" sort="auto" />\r
<listheader label="Prioritás" hflex="min" align="left" sort="auto" />\r
- <listheader label="Állapot" hflex="min" align="left" sort="auto" />\r
+ <listheader label="Anyag" width="120px" align="left" sort="auto" />\r
+ <listheader label="Állapot" width="120px" align="left" sort="auto" />\r
<listheader label="Készültség" width="100px" align="left" sort="auto" />\r
<listheader label="Üzenet" hflex="max" align="left" sort="auto" />\r
<listheader label="Paraméterek" hflex="min" align="left" sort="auto" />\r
<listcell label="@load(each.finished)" />\r
<listcell label="@load(each.name)" />\r
<listcell label="@load(each.priority)" />\r
+ <listcell label="@load(each.related)" />\r
<listcell label="@load(each.status)" />\r
<listcell>\r
<progressmeter ca:data-animationspeed="-1" value="@load(each.progress)" width="100%" />\r
<div apply="org.zkoss.bind.BindComposer" viewModel="@id('lm') @init('user.jobengine.zk.model.MenuModel')">\r
<menubar id="menubar" hflex="max" sclass="redmenubar">\r
<menuitem sclass="whitemenu" label="Keresés" onClick="@command('navigate', action='/')" disabled="false" />\r
- <menuitem sclass="whitemenu" label="Folyamatok" onClick="@command('navigate', action='jobs')" disabled="${not sessionScope.userPrincipal.admin or sessionScope.userPrincipal.anonymous}" />\r
+ <menuitem sclass="whitemenu" label="Folyamatok" onClick="@command('navigate', action='jobs')" disabled="${not sessionScope.userPrincipal.submitter or sessionScope.userPrincipal.anonymous}" />\r
<menuitem sclass="whitemenu" label="Maestro" onClick="@command('navigate', action='maestro')" visible="${lm.maestroAvailable}" />\r
<menu sclass="whitemenu" label="Egyéb" >\r
<menupopup>\r
--- /dev/null
+<zk>\r
+ <script type="text/javascript">\r
+ <![CDATA[\r
+ function Copy2ClipBoard(value) {\r
+ console.log(value);\r
+ if (window.clipboardData)\r
+ window.clipboardData.setData("Text", value);\r
+ else \r
+ console.error("no clip");\r
+ }\r
+ ]]>\r
+ </script>\r
+ <hbox self="@define(content)" vflex="1" hflex="1" align="center" pack="center" spacing="20px">\r
+ <vlayout>\r
+ <window viewModel="@id('jlm') @init('user.jobengine.zk.model.PwdGenModel')" border="none" hflex="min">\r
+ <vbox hflex="min" align="center">\r
+ <grid hflex="min">\r
+ <columns>\r
+ <column hflex="min" align="right" />\r
+ <column />\r
+ </columns>\r
+ <rows>\r
+ <row>\r
+ Jelszó\r
+ <textbox value="@bind(jlm.pwd)" width="400px" forward="onOK=login.onClick" onCreate="self.focus()" />\r
+ </row>\r
+ <row>\r
+ Elkódolt jelszó\r
+ <label value="@bind(jlm.pwdMD5)" id="pwdMD5" width="400px"/>\r
+ </row>\r
+ </rows>\r
+ </grid>\r
+ <button id="login" label="Kódolás" onClick="@command('generate')"/>\r
+ </vbox>\r
+ </window>\r
+ </vlayout>\r
+ </hbox>\r
+</zk>
\ No newline at end of file
<listitem>\r
<listcell label="@load(each.media.id)" />\r
<listcell label="@load(each.media.title)" />\r
- <listcell label="@load(each.media.mediaFilesName)" />\r
+ <listcell label="@load(each.media.mediaFileRealName)" />\r
</listitem>\r
</template>\r
</listbox>\r
<label value="Azonosító:" />\r
<textbox value="@load(jlm.houseId) @save(jlm.houseId,before='execute')" width="100%" tabindex="1"\r
forward="onOK=execute.onClick"\r
- constraint="no empty: Kérem adjon meg egy TRAFFIC vagy egy OCTOPUS azonosítót!" />\r
+ constraint="no empty: Kérem adjon meg egy azonosítót!" />\r
</row>\r
<row>\r
<label value="Értesítési cím:" />\r
-version=2.6.0\r
+version=2.6.2\r
footer=2016-2020 © Copyright User Rendszerház Kft.\r
\r
login_info=Információ\r
public interface IJobEngine {
static final int QUEUE_POLL_INTERVAL_MS = 50;
+ static final String DEFAULT_OWNER = "MediaCube";
void addJobChangedEventListener(IJobChangedListener listener);
boolean isWorker();
+ void jobCleanup(IJobRuntime jobRuntime);
+
void keepAliveWorker(String remoteAddr);
void loadExecutors();
void storeJob(IJobRuntime runtime);
+ IJobRuntime submit(IJobRuntime parent, IJobStatusChangedListener statusListener, String template, String name, int priority, String owner,
+ Map<String, Object> parameters) throws JobEngineException;
+
IJobRuntime submit(IJobRuntime parent, IJobStatusChangedListener statusListener, String template, String name, Map<String, Object> parameters)
throws JobEngineException;
+ IJobRuntime submit(IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters) throws JobEngineException;
+
IJobRuntime submit(String template, String name, Map<String, Object> parameters) throws JobEngineException;
IJobRuntime submit(String template, String name, Map<String, Object> parameters, String owner) throws JobEngineException;
\r
Object getParameter(String name);\r
\r
- Map<String, Object> getParameters();\r
-\r
IEntityPersister getPersister();\r
\r
IProgram getProgram();\r
\r
void incrementProgress(int progress);\r
\r
+ boolean isCancelable();\r
+\r
boolean isRunable();\r
\r
boolean isService();\r
\r
void saveStatus();\r
\r
+ void setCancelable(boolean cancelable);\r
+\r
void setCurrentStep(String currentStep);\r
\r
@Override\r
@Override
public void executeGetParameterInstruction(IJobRuntime jobRuntime) {
- String name = (String) jobRuntime.popFromStack();
- Object value = jobRuntime.getParameter(name);
- jobRuntime.pushToStack(value);
+ try {
+ String name = (String) jobRuntime.popFromStack();
+ Object value = jobRuntime.getParameter(name);
+ jobRuntime.pushToStack(value);
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ jobRuntime.setDescription(e.getMessage());
+ suspendWaitExecutorJob(e, jobRuntime);
+ }
}
@Override
public void executeGetVariableInstruction(IJobRuntime jobRuntime) {
- String name = (String) jobRuntime.popFromStack();
- Object value = jobRuntime.getVariable(name);
- jobRuntime.pushToStack(value);
+ try {
+ String name = (String) jobRuntime.popFromStack();
+ Object value = jobRuntime.getVariable(name);
+ jobRuntime.pushToStack(value);
+ } catch (Exception e) {
+ logger.error(e.getMessage());
+ jobRuntime.setDescription(e.getMessage());
+ suspendWaitExecutorJob(e, jobRuntime);
+ }
}
@Override
return masterServerAddress.length() > 0;
}
- private void jobCleanup(IJobRuntime jobRuntime) {
+ @Override
+ public void jobCleanup(IJobRuntime jobRuntime) {
logger.info("Cleanup {}", jobRuntime.getId());
statusMachine.processAction(JobAction.FINISH, jobRuntime);
}
@Override
public void processCancelRequest(IJobMessage message) {
IJobRuntime jobRuntime = getJobById(message.getJobId());
+
+ if (jobRuntime == null) {
+ logger.warn("Job with id {} not exists!", message.getJobId());
+ return;
+ }
+
+ //a gyerekek miatt nem az!
+ if (!jobRuntime.isCancelable())
+ return;
+
// Ha a jobs tartalmazta ezt a job-ot, akkor kikerül belőle.
// if (jobs.containsKey(message.getJobId()))
// jobs.remove(message.getJobId());
public void processJobStepCompletedMessage(IJobMessage message) {
IJobRuntime jobRuntime = getJobById(message.getJobId());
+ if (jobRuntime == null) {
+ logger.warn("Job with id {} not exists!", message.getJobId());
+ return;
+ }
+
//TODO ez hibat okoz az archivalasnal, mert hamarabb eltavolitja a childUd-ket
// if (jobRuntime.getParentJobId() > 0)
}
@Override
- public IJobRuntime submit(IJobRuntime parent, IJobStatusChangedListener statusListener, String template, String name, Map<String, Object> parameters)
- throws JobEngineException {
+ public IJobRuntime submit(IJobRuntime parent, IJobStatusChangedListener statusListener, String template, String name, int priority, String owner,
+ Map<String, Object> parameters) throws JobEngineException {
IJobRuntime result = null;
IProgram program = getProgram(template);
if (program != null) {
result.setTemplate(template);
result.setName(name);
result.setParameters(parameters);
+ result.setPriority(priority);
result.setService(program.getTemplate().isService());
if (parent != null)
result.setParentJobId(parent.getId());
return result;
}
+ @Override
+ public IJobRuntime submit(IJobRuntime parent, IJobStatusChangedListener statusListener, String template, String name, Map<String, Object> parameters)
+ throws JobEngineException {
+ IJobRuntime result = null;
+ result = submit(parent, statusListener, template, name, 0, DEFAULT_OWNER, parameters);
+ return result;
+ }
+
+ @Override
+ public IJobRuntime submit(IJobRuntime parent, String template, String name, int priority, Map<String, Object> parameters) throws JobEngineException {
+ IJobRuntime result = null;
+ result = submit(parent, null, template, name, 0, DEFAULT_OWNER, parameters);
+ return result;
+ }
+
IJobRuntime submit(IProgram program, IJobStatusChangedListener listener) {
IJobRuntime jobRuntime = new JobRuntime(this, program);
jobRuntime.addEventListener(listener);
}
IJobRuntime result = null;
IProgram program = getProgram(template);
- if (program != null) {
- isRunnable(program);
- result = new JobRuntime(this, program);
- result.setPersister(itemManager);
- result.setTemplate(template);
- result.setName(name == null ? program.getTemplate().getName() : name);
- result.setParameters(parameters);
- result.setService(program.getTemplate().isService());
- submit(result);
- } else {
- logger.error("Unknown template: " + template);
- }
+ result = submit(null, null, template, name == null ? program.getTemplate().getName() : name, 0, DEFAULT_OWNER, parameters);
return result;
}
@Override
public IJobRuntime submit(String template, String name, Map<String, Object> parameters, String owner) throws JobEngineException {
IJobRuntime result = null;
- IProgram program = getProgram(template);
- if (program != null) {
- isRunnable(program);
- result = new JobRuntime(this, program);
- result.setPersister(itemManager);
- result.setOwner(owner);
- result.setTemplate(template);
- result.setName(name == null ? program.getTemplate().getName() : name);
- result.setParameters(parameters);
- result.setService(program.getTemplate().isService());
- submit(result);
- } else {
- logger.error("Unknown template: " + template);
- }
+ result = submit(null, null, template, name, 0, owner, parameters);
return result;
}
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Timestamp;
import javax.swing.event.EventListenerList;
import org.apache.commons.lang.ClassUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import user.commons.MediaCubeFinishMarker;
import user.commons.MediaCubeMarker;
import user.commons.cluster.ClusteredJob;
+import user.jobengine.db.ItemManager;
import user.jobengine.db.ItemManagerData.SignalType;
import user.jobengine.db.JobParameters;
import user.jobengine.server.instructions.CallJobStepInstruction;
*/
public class JobRuntime extends Job implements IJobRuntime {
private static final Logger logger = LogManager.getLogger();
+
+ @SuppressWarnings("unchecked")
+ public static Map<String, Object> loadParameters(long jobId) {
+ Map<String, Object> result = null;
+ ObjectInputStream in = null;
+ try {
+ JobParameters jobParameters = (JobParameters) ItemManager.getInstance().get(JobParameters.class, jobId);
+ if (jobParameters != null) {
+ ByteArrayInputStream byteIn = new ByteArrayInputStream(jobParameters.getData());
+ in = new ObjectInputStream(byteIn);
+ result = (Map<String, Object>) in.readObject();
+ }
+ } catch (Exception e) {
+ logger.error(e);
+ } finally {
+ try {
+ if (in != null)
+ in.close();
+ } catch (IOException e) {
+ }
+ }
+ return result;
+ }
+
private final IProgram program;
private Stack<Object> stack = null;
private Stack<Object> savedStack = null;
private int ip;
private final EventListenerList listeners = new EventListenerList();
private final Map<String, Object> variables;
- private Map<String, Object> parameters;
private JobStatus savedStatus;
private final IJobEngine jobEngine;
private double currentProgress;
private List<Long> childrenIDs;
private int spawnOrder;
+ private boolean cancelable = true;
+
public JobRuntime() {
variables = null;
jobEngine = null;
program = null;
- status = JobStatus.RUNABLE;
+ setStatus(JobStatus.RUNABLE);
}
public JobRuntime(ClusteredJob job, IJobEngine jobEngine, IJobStatusChangedListener listener) {
this.stack = new Stack<Object>();
this.status = JobStatus.RUNABLE;
this.variables = new HashMap<>(runtime.getVariables());
- this.parameters = new HashMap<>(runtime.getParameters());
+ super.setParameters(new HashMap<>(runtime.getParameters()));
this.persister = runtime.getPersister();
this.template = runtime.getTemplate();
}
this.status = runtime.getStatus();
this.ip = runtime.getIp();
this.variables = new HashMap<>(runtime.getVariables());
- this.parameters = new HashMap<>(runtime.getParameters());
+ super.setParameters(new HashMap<>(runtime.getParameters()));
this.persister = runtime.getPersister();
this.template = runtime.getTemplate();
this.weight = runtime.getWeight();
IJob job = toJob();
job.add();
setId(job.getId());
- if (parameters != null) {
- parametersToByteArray();
- }
+ if (getParameters() != null)
+ saveParameters();
+
}
@Override
if (spawnJobListener == null) {
logger.info("Preparing spawn");
childrenIDs = Collections.synchronizedList(new ArrayList<>());
-
+ cancelable = false;
spawnJobListener = event -> {
IJobRuntime child = event.getJob();
if (event.getSignalType().equals(SignalType.CREATE)) {
}
if (childrenIDs.contains(child.getId())) {
- logger.info("Child {} notification", child.getId());
+ //logger.info("Child {} notification", child.getId());
switch (event.getSignalType()) {
case UPDATE:
//TODO calculate progress
finished = job.getFinished();
setScheduledTime(job.getScheduledTime());
setParentJobId(job.getParentJobId());
- parametersFromByteArray();
+ setParameters(loadParameters(id));
}
@Override
try {
if (name == null)
throw new NullPointerException("Parameter name is null, can not get value!");
- if (!parameters.containsKey(name))
+ if (!getParameters().containsKey(name))
throw new RuntimeException("Parameter " + name + " missing!");
- result = parameters.get(name);
+ result = getParameters().get(name);
} catch (Exception e) {
logger.error(e);
//TODO test!
return result;
}
- @Override
- public Map<String, Object> getParameters() {
- return parameters;
- }
-
@Override
public IEntityPersister getPersister() {
return persister;
// }
}
+ @Override
+ public boolean isCancelable() {
+ return cancelable;
+ }
+
@Override
public boolean isRunable() {
return JobStatus.RUNABLE.equals(status);
signal(SignalType.UPDATE);
}
- @SuppressWarnings("unchecked")
- private void parametersFromByteArray() {
- try {
- JobParameters jobParameters = (JobParameters) persister.get(JobParameters.class, id);
- if (jobParameters != null) {
- ByteArrayInputStream byteIn = new ByteArrayInputStream(jobParameters.getData());
- ObjectInputStream in;
- in = new ObjectInputStream(byteIn);
- parameters = (Map<String, Object>) in.readObject();
- }
- } catch (Exception e) {
- logger.error(e);
- }
- }
-
- private void parametersToByteArray() {
- try {
- JobParameters jobParameters = new JobParameters();
- jobParameters.setPersister(persister);
- ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
- ObjectOutputStream out;
- out = new ObjectOutputStream(byteOut);
- out.writeObject(parameters);
- byte[] convertedData = byteOut.toByteArray();
- jobParameters.setId(getId());
- jobParameters.setData(convertedData);
- jobParameters.add();
- } catch (Exception e) {
- logger.catching(e);
- }
- }
-
@Override
public Object popFromStack() {
Object result = stack.pop();
stack = (Stack<Object>) savedStack.clone();
}
+ private void saveParameters() {
+ ObjectOutputStream out = null;
+ try {
+ JobParameters jobParameters = new JobParameters();
+ jobParameters.setPersister(persister);
+ ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+ out = new ObjectOutputStream(byteOut);
+ out.writeObject(getParameters());
+ byte[] convertedData = byteOut.toByteArray();
+ jobParameters.setId(getId());
+ jobParameters.setData(convertedData);
+ jobParameters.add();
+ } catch (Exception e) {
+ logger.catching(e);
+ } finally {
+ try {
+ if (out != null)
+ out.close();
+ } catch (IOException e) {
+ }
+ }
+ }
+
@Override
@SuppressWarnings("unchecked")
public void saveStack() {
}
@Override
- public void setCurrentStep(String currentStep) {
- this.currentStep = currentStep;
- }
-
- @Override
- public void setDescription(String description) {
- super.setDescription(description);
+ public void setCancelable(boolean cancelable) {
+ this.cancelable = cancelable;
}
/*
* */
@Override
- public void setId(long id) {
- super.setId(id);
- signal(SignalType.CREATE);
+ public void setCurrentStep(String currentStep) {
+ this.currentStep = currentStep;
}
@Override
- public void setParameters(Map<String, Object> parameters) {
- this.parameters = parameters;
+ public void setDescription(String description) {
+ super.setDescription(description);
+ }
+
+ @Override
+ public void setId(long id) {
+ super.setId(id);
+ signal(SignalType.CREATE);
}
@Override
}
}
+ @Override
+ public void setRelated(String related) {
+ if (!StringUtils.equals(super.getRelated(), related)) {
+ super.setRelated(related);
+ modify();
+ fireStatusChanged(new JobStatusChangedEvent(this, this.status));
+ }
+
+ }
+
@Override
public void setService(boolean isService) {
this.isService = isService;
job.setFinished(getFinished());
job.setScheduledTime(getScheduledTime());
job.setParentJobId(getParentJobId());
+ job.setRelated(getRelated());
return job;
}
package user.jobengine.server;
import java.net.URLClassLoader;
+import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
logger.error("Error in {}", jobRuntime);
Throwable t = e.getCause() == null ? e : e.getCause();
logger.catching(t);
- jobEngine.suspendExecutingJob(t, jobRuntime);
+ if (JobStatus.EXECUTING.equals(jobRuntime.getStatus()))
+ jobEngine.suspendExecutingJob(t, jobRuntime);
+ if (JobStatus.WAIT_EXECUTOR.equals(jobRuntime.getStatus()))
+ jobEngine.suspendWaitExecutorJob(t, jobRuntime);
} finally {
if (step != null) {
step.cleanup();
if (isGroovyStep()) {
GroovyClassLoader gcl = new GroovyClassLoader(parentLoader);
- Class myClass = gcl.parseClass(Paths.get(System.getProperty("jobengine.jobsteps.groovy.root", ""), stepUnitName).toFile());
+ Path stepRoot = Paths.get(System.getProperty("jobengine.jobsteps.groovy.root", ""));
+ gcl.addClasspath(stepRoot.toString());
+ Class myClass = gcl.parseClass(Paths.get(stepRoot.toString(), stepUnitName).toFile());
result = (IJobStep) myClass.newInstance();
} else
result = stepClass.newInstance();
import user.commons.JobStatus;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.IJobRuntime;\r
+import user.jobengine.server.messages.JobStepCompletedMessage;\r
\r
public class CancelWaitExecutorAction implements IJobStatusAction {\r
\r
@Override\r
public void processAction(IJobEngine jobEngine, IJobRuntime jobRuntime) {\r
- jobRuntime.setStatus(JobStatus.CANCELED);\r
+\r
+ //ezzel a koddal a listaban megmarad, igy lehet folytatni\r
+ jobRuntime.setStatus(JobStatus.WAIT_CANCEL);\r
jobRuntime.setDescription("Canceled by user");\r
jobRuntime.NotifyUpdate();\r
- jobRuntime.reset();\r
+ //jobRuntime.reset();\r
jobEngine.removeFromExecutorQueue(jobRuntime);\r
+ jobEngine.sendMessage(new JobStepCompletedMessage(jobRuntime.getId(), null));\r
+\r
}\r
}\r
StatusMachineAction machineAction = new StatusMachineAction(jobAction, jobRuntime.getStatus());\r
if (actions.containsKey(machineAction)) {\r
IJobStatusAction action = actions.get(machineAction);\r
- logger.debug("{} changes {} -> {}", jobRuntime.getId(), jobRuntime.getStatus(), jobAction);\r
+ logger.info("Applying action {} on status {} [{}]", jobAction, jobRuntime.getStatus(), jobRuntime.getId());\r
action.processAction(jobEngine, jobRuntime);\r
} else {\r
- logger.warn("No status processor registered for {} -> {}", jobAction, jobRuntime.getStatus());\r
+ logger.warn("No processor registered for action {} on status {}", jobAction, jobRuntime.getStatus());\r
}\r
\r
// throw new RuntimeException("missing action: " + jobAction + ", " +\r
import user.jobengine.server.IJobEngine;\r
\r
/**\r
- * Folyamat felébresztése rendszerüzenet.\r
+ * Folyamat fel�breszt�se rendszer�zenet.\r
*/\r
public class CancelRequest extends JobMessage {\r
\r
public CancelRequest(long jobId) {\r
super(jobId);\r
}\r
- \r
+\r
@Override\r
public void process(IJobEngine jobEngine) {\r
jobEngine.processCancelRequest(this);\r
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.AfterCompose;\r
+import org.zkoss.bind.annotation.Command;\r
+import org.zkoss.bind.annotation.ContextParam;\r
+import org.zkoss.bind.annotation.ContextType;\r
+import org.zkoss.bind.annotation.Init;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.zk.ui.Component;\r
+import org.zkoss.zk.ui.select.Selectors;\r
+import org.zkoss.zk.ui.select.annotation.Wire;\r
+import org.zkoss.zul.ListModelList;\r
+import org.zkoss.zul.Messagebox;\r
+import org.zkoss.zul.Window;\r
+\r
+import user.jobengine.db.ArchivedMedia;\r
+import user.jobengine.db.ItemManager;\r
+import user.jobengine.db.Store;\r
+import user.jobengine.server.IJobEngine;\r
+import user.jobengine.server.JobEngine;\r
+import user.jobengine.server.scheduler.ScheduledJob;\r
+import user.jobengine.zk.util.SessionUtil;\r
+\r
+public class AlternateRetrieveBatchSelectorModel extends BaseModel {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private static final String TARGETSTORENAME = "targetStoreName";\r
+ private static final String BASKET = "basket";\r
+ private static final String RECIPIENT = "recipient";\r
+ private static final String RESTORE = "Visszatöltés";\r
+\r
+ private static final String JOBTEMPLATE = "register-user-restore.xml";\r
+\r
+ private ListModelList<Store> stores = new ListModelList<>();\r
+\r
+ private List<ArchivedMedia> selectedItems;\r
+\r
+ private boolean disabled;\r
+ @Wire()\r
+ private Window wndRetrieveBatch;\r
+\r
+ private String houseId;\r
+ private String email;\r
+ private MenuModel menuModel;\r
+\r
+ @AfterCompose\r
+ public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
+ menuModel = (MenuModel) SessionUtil.getAttribute(SessionUtil.MENUMODEL);\r
+ Selectors.wireComponents(view, this, false);\r
+ }\r
+\r
+ @Command\r
+ public void close() {\r
+ wndRetrieveBatch.detach();\r
+ }\r
+\r
+ @Command\r
+ @NotifyChange("basketItems")\r
+ public void execute() {\r
+ try {\r
+ if (stores.getSelection().isEmpty())\r
+ throw new Exception("A cél megadása kötelező.");\r
+\r
+ if (StringUtils.isBlank(email))\r
+ throw new Exception("Az értesítési cím megadása kötelező.");\r
+\r
+ IJobEngine jobEngine = JobEngine.getInstance();\r
+ ScheduledJob scheduledJob = jobEngine.getScheduledJob(JOBTEMPLATE);\r
+ if (scheduledJob == null)\r
+ throw new Exception("A sablon nem található: " + JOBTEMPLATE);\r
+\r
+ //String escortStoreName, String targetStoreName, List<ArchivedMedia> basket, String recipient\r
+ Map<String, Object> parameters = scheduledJob.getJobParameters();\r
+ parameters.put(TARGETSTORENAME, stores.getSelection().iterator().next().getName());\r
+ parameters.put(RECIPIENT, email);\r
+ parameters.put(BASKET, new ArrayList<ArchivedMedia>(getBasketItems()));\r
+ jobEngine.submit(JOBTEMPLATE, RESTORE, parameters);\r
+\r
+ menuModel.clearBasket();\r
+ wndRetrieveBatch.detach();\r
+ } catch (Exception e) {\r
+ Messagebox.show(e.getMessage());\r
+ logger.catching(e);\r
+ }\r
+\r
+ }\r
+\r
+ public List<ArchivedMedia> getBasketItems() {\r
+ setDisabled(menuModel.getBasketItems() == null || menuModel.getBasketItems().size() == 0);\r
+ return menuModel.getBasketItems();\r
+ }\r
+\r
+ public String getEmail() {\r
+ return email;\r
+ }\r
+\r
+ public String getHouseId() {\r
+ return houseId;\r
+ }\r
+\r
+ public List<ArchivedMedia> getSelectedItems() {\r
+ return selectedItems;\r
+ }\r
+\r
+ public ListModelList<Store> getStores() {\r
+ return stores;\r
+ }\r
+\r
+ @Init\r
+ public void init() {\r
+ setEmail(SessionUtil.getUserPrincipal().getEmail());\r
+ List<Store> targetStores = ItemManager.getInstance().getTargetStores();\r
+ if (targetStores != null)\r
+ getStores().addAll(targetStores);\r
+ }\r
+\r
+ public boolean isDisabled() {\r
+ return disabled;\r
+ }\r
+\r
+ @Command\r
+ @NotifyChange({ "basketItems", "selectedItems" })\r
+ public void remove() {\r
+ menuModel.removeBasketItems(selectedItems);\r
+ }\r
+\r
+ public void setDisabled(boolean disabled) {\r
+ this.disabled = disabled;\r
+ }\r
+\r
+ public void setEmail(String email) {\r
+ this.email = email;\r
+ }\r
+\r
+ public void setHouseId(String houseId) {\r
+ this.houseId = houseId;\r
+ }\r
+\r
+ public void setSelectedItems(List<ArchivedMedia> selectedItems) {\r
+ this.selectedItems = selectedItems;\r
+ }\r
+\r
+ public void setStores(ListModelList<Store> stores) {\r
+ this.stores = stores;\r
+ }\r
+\r
+}
\ No newline at end of file
private static final Logger logger = LogManager.getLogger();\r
private String page;\r
private Map<String, Object> pathMap = ListUtils.asMap("/", "searchitems", "jobs", "joblist", "missingmaterials", "missingmaterials", "newshistory",\r
- "newshistory", "statistics", "statistics", "maestro", "maestro");\r
+ "newshistory", "statistics", "statistics", "maestro", "maestro", "pwdgen", "pwdgen");\r
\r
@AfterCompose\r
public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
package user.jobengine.zk.model;\r
\r
+import static java.util.stream.Collectors.toList;\r
+\r
+import java.util.HashSet;\r
+import java.util.List;\r
import java.util.Map;\r
+import java.util.Set;\r
\r
+import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
import org.zkoss.bind.annotation.BindingParam;\r
import org.zkoss.bind.annotation.Command;\r
import org.zkoss.bind.annotation.Init;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
import org.zkoss.zk.ui.Executions;\r
import org.zkoss.zk.ui.event.Event;\r
import org.zkoss.zk.ui.event.EventListener;\r
import org.zkoss.zul.Messagebox;\r
import org.zkoss.zul.Window;\r
\r
+import user.commons.IJob;\r
import user.commons.ListUtils;\r
import user.commons.nexio.INexioAPI;\r
import user.commons.nexio.NexioDispatcher;\r
import user.jobengine.server.IJobRuntime;\r
import user.jobengine.server.JobChangedEvent;\r
import user.jobengine.server.JobEngine;\r
+import user.jobengine.server.JobRuntime;\r
import user.jobengine.server.messages.CancelRequest;\r
import user.jobengine.zk.util.SessionUtil;\r
\r
public class JobListModel extends AsyncBaseModel implements IJobChangedListener {\r
private static final Logger logger = LogManager.getLogger();\r
- private ListModelList<IJobRuntime> jobList = new ListModelList<IJobRuntime>();\r
+ private ListModelList<IJob> jobList = new ListModelList<IJob>();\r
private IJobEngine jobEngine = null;\r
private int newPriority = 1;\r
private boolean shutdownDisabled;\r
private boolean startupDisabled;\r
private boolean allExecutionDisabled;\r
private boolean scheduledExecutionDisabled;\r
+ private String searchText;\r
\r
@Command\r
- public void cancelJobs() {\r
- if (this.jobList.getSelection() != null) {\r
- for (IJobRuntime jobRuntime : this.jobList.getSelection()) {\r
- jobEngine.sendMessage(new CancelRequest(jobRuntime.getId()));\r
+ public void cancelAllJobs() {\r
+ EventListener<Event> confirmedEvent = evt -> {\r
+ if (evt.getName().equals("onCancel"))\r
+ return;\r
+ try {\r
+ for (IJob job : jobList) {\r
+ if (job instanceof IJobRuntime)\r
+ jobEngine.sendMessage(new CancelRequest(job.getId()));\r
+ }\r
+ } catch (Exception e) {\r
+ Messagebox.show(e.getMessage());\r
+ }\r
+ };\r
+\r
+ Messagebox.show("Biztosan megszakítod az összes folyamat futását?", "Kérdés", Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION, confirmedEvent);\r
+ }\r
+\r
+ @Command\r
+ public void cancelSelectedJobs() {\r
+ if (jobList.getSelection() != null) {\r
+ for (IJob job : jobList.getSelection()) {\r
+ if (job instanceof IJobRuntime)\r
+ jobEngine.sendMessage(new CancelRequest(job.getId()));\r
}\r
}\r
}\r
\r
@Command\r
public void changeJobsPriority() {\r
- if (this.jobList.getSelection() != null) {\r
- for (IJobRuntime jobRuntime : this.jobList.getSelection()) {\r
- jobRuntime.setPriority(newPriority);\r
- jobEngine.applyPriorityChange(jobRuntime);\r
+\r
+ HashSet<IJob> jobs = new HashSet<>(jobList.getSelection());\r
+ for (IJob job : jobs) {\r
+ if (job instanceof IJobRuntime) {\r
+ job.setPriority(newPriority);\r
+ jobEngine.applyPriorityChange((IJobRuntime) job);\r
+ jobList.removeFromSelection(job);\r
}\r
}\r
+\r
}\r
\r
@Command\r
public void cleanupSuspended() {\r
jobEngine.removeSuspended();\r
initializeList();\r
+\r
}\r
\r
private int compare(IJobRuntime o1, IJobRuntime o2) {\r
window.doModal();\r
}\r
\r
- public ListModelList<IJobRuntime> getJobList() {\r
+ public ListModelList<IJob> getJobList() {\r
return jobList;\r
}\r
\r
return newPriority;\r
}\r
\r
+ public String getSearchText() {\r
+ return searchText;\r
+ }\r
+\r
@Init\r
public void init() {\r
try {\r
jobList.clear();\r
Map<Long, IJobRuntime> jobMap = jobEngine.getJobs();\r
jobList.addAll(jobMap.values());\r
+\r
//Collections.sort(jobList, (o1, o2) -> compare(o1, o2));\r
}\r
\r
}\r
\r
public boolean isUpdatePriorityDisabled() {\r
- if (this.jobList.getSelection() != null) {\r
- if (this.jobList.getSelection().size() > 0) {\r
- return false;\r
- }\r
- }\r
- return true;\r
+ return jobList.getSelection().size() == 0;\r
}\r
\r
@Override\r
private void onJobDeleted(IJobRuntime job) {\r
// selectedJobs.remove(job);\r
// NotifyChange("selectedJobs");\r
+ boolean notifyAfter = jobList.getSelection().contains(job);\r
jobList.removeFromSelection(job);\r
jobList.remove(job);\r
+ if (notifyAfter)\r
+ onSelect();\r
+\r
notifyChange("jobList");\r
}\r
\r
jobList.notifyChange(job);\r
}\r
\r
+ @Command\r
+ public void onSelect() {\r
+ logger.info("Selection changed!");\r
+ notifyChange("updatePriorityDisabled");\r
+ }\r
+\r
+ // @Command\r
+ // public void restart() {\r
+ // startupDisabled = true;\r
+ // try {\r
+ // jobEngine.startup();\r
+ // } catch (Exception e) {\r
+ // }\r
+ // shutdownDisabled = false;\r
+ // initializeList();\r
+ // }\r
+\r
private void onShutdown() {\r
setShutdownDisabled(true);\r
\r
t.start();\r
}\r
\r
- // @Command\r
- // public void restart() {\r
- // startupDisabled = true;\r
- // try {\r
- // jobEngine.startup();\r
- // } catch (Exception e) {\r
- // }\r
- // shutdownDisabled = false;\r
- // initializeList();\r
- // }\r
+ @Command\r
+ @NotifyChange("searchText")\r
+ public void resetSearchRelated() {\r
+ logger.info("Reset search");\r
+ setSearchText("");\r
+ initializeList();\r
+ }\r
\r
@Command\r
public void restartNexio() {\r
\r
}\r
\r
+ @Command\r
+ public void searchRelated() {\r
+\r
+ if (StringUtils.isBlank(searchText)) {\r
+ resetSearchRelated();\r
+ return;\r
+ }\r
+\r
+ initializeList();\r
+\r
+ String formattedSearchText = StringUtils.trim(searchText).toLowerCase();\r
+\r
+ logger.info("Search {}", searchText);\r
+ String trimmedSearchText = StringUtils.trim(searchText);\r
+ if (trimmedSearchText.length() < 5) {\r
+ Messagebox.show("Minimum 4 karakter begépelése szükséges a kereséshez.", "Figyelmeztetés", Messagebox.OK, Messagebox.INFORMATION);\r
+ return;\r
+ }\r
+\r
+ //kereses a futo folyamatok kozott\r
+ List<IJob> filteredList = jobList.stream().filter(j -> {\r
+ return j.getRelated() != null && j.getRelated().toLowerCase().contains(formattedSearchText);\r
+ }).collect(toList());\r
+\r
+ //ha nincs futo folyamat, akkor historybol\r
+ if (filteredList.size() == 0)\r
+ filteredList = jobEngine.getItemManager().getJobsHistory(formattedSearchText);\r
+\r
+ if (filteredList == null || filteredList.size() == 0) {\r
+ Messagebox.show("Nincs találat.", "Figyelmeztetés", Messagebox.OK, Messagebox.INFORMATION);\r
+ return;\r
+ }\r
+\r
+ //delete selection\r
+ Set<IJob> selectedItems = jobList.getSelection();\r
+ for (IJob item : selectedItems)\r
+ jobList.removeFromSelection(item);\r
+\r
+ //add\r
+ jobList.clear();\r
+ jobList.addAll(filteredList);\r
+ }\r
+\r
public void setAllExecutionDisabled(boolean allExecutionDisabled) {\r
this.allExecutionDisabled = allExecutionDisabled;\r
jobEngine.setAllExecutionDisabled(allExecutionDisabled);\r
}\r
\r
- public void setJobList(ListModelList<IJobRuntime> jobList) {\r
+ public void setJobList(ListModelList<IJob> jobList) {\r
this.jobList = jobList;\r
}\r
\r
jobEngine.setScheduledExecutionDisabled(scheduledExecutionDisabled);\r
}\r
\r
+ public void setSearchText(String searchText) {\r
+ if (!searchText.equals(this.searchText)) {\r
+ this.searchText = searchText;\r
+ }\r
+ }\r
+\r
public void setShutdownDisabled(boolean shutdownDisabled) {\r
- this.shutdownDisabled = shutdownDisabled;\r
+ this.shutdownDisabled = shutdownDisabled || !SessionUtil.getUserPrincipal().isAdmin();\r
notifyChange("shutdownDisabled");\r
}\r
\r
public void setStartupDisabled(boolean startupDisabled) {\r
- this.startupDisabled = startupDisabled;\r
+ this.startupDisabled = startupDisabled || !SessionUtil.getUserPrincipal().isAdmin();\r
notifyChange("startupDisabled");\r
}\r
\r
@Command\r
- public void showParameters(@BindingParam("item") IJobRuntime jobRuntime) {\r
+ public void showParameters(@BindingParam("item") IJob job) {\r
String template = "/pages/jobparameters.zul";\r
- Window window = (Window) Executions.createComponents(template, null, ListUtils.asMap("jobRuntime", jobRuntime));\r
+\r
+ if (job.getParameters() == null)\r
+ job.setParameters(JobRuntime.loadParameters(job.getId()));\r
+\r
+ Window window = (Window) Executions.createComponents(template, null, ListUtils.asMap("job", job));\r
window.doModal();\r
}\r
\r
import org.zkoss.zk.ui.select.annotation.Wire;\r
import org.zkoss.zul.Window;\r
\r
-import user.jobengine.server.IJobRuntime;\r
+import user.commons.IJob;\r
\r
public class JobParametersModel extends BaseModel {\r
\r
@Wire("#resultWin")\r
private Window resultWin;\r
- private IJobRuntime selectedJob;\r
+ private IJob selectedJob;\r
\r
@AfterCompose\r
public void afterCompose(@ContextParam(ContextType.VIEW) Component view) {\r
resultWin.detach();\r
}\r
\r
- public IJobRuntime getSelectedJob() {\r
+ public IJob getSelectedJob() {\r
return selectedJob;\r
}\r
\r
@Init\r
public void init() {\r
- this.selectedJob = (IJobRuntime) Executions.getCurrent().getArg().get("jobRuntime");\r
+ this.selectedJob = (IJob) Executions.getCurrent().getArg().get("job");\r
}\r
\r
- public void setSelectedJob(IJobRuntime selectedJob) {\r
+ public void setSelectedJob(IJob selectedJob) {\r
this.selectedJob = selectedJob;\r
}\r
\r
public class MenuModel extends BaseModel {\r
private static final Logger logger = LogManager.getLogger();\r
private static final String PAGES_RETRIEVEBATCHSELECTOR_ZUL = "/pages/retrievebatchselector.zul";\r
+ private static final String PAGES_ALTERNATE_RETRIEVEBATCHSELECTOR_ZUL = "/pages/alternate_retrievebatchselector.zul";\r
private String basketMenuLabel = "(0)";\r
private List<ArchivedMedia> basketItems = new ArrayList<>();\r
@Wire\r
\r
@Command\r
public void showBasket() {\r
+ boolean useAlternate = System.getProperty("gui.jobs.alternate.selector", "false").equals("true");\r
+ String zul = useAlternate ? PAGES_ALTERNATE_RETRIEVEBATCHSELECTOR_ZUL : PAGES_RETRIEVEBATCHSELECTOR_ZUL;\r
Map<String, Object> arguments = new HashMap<String, Object>();\r
arguments.put("selectedItems", basketItems);\r
- Window window = (Window) Executions.createComponents(PAGES_RETRIEVEBATCHSELECTOR_ZUL, null, arguments);\r
+ Window window = (Window) Executions.createComponents(zul, null, arguments);\r
window.doModal();\r
}\r
\r
--- /dev/null
+package user.jobengine.zk.model;\r
+\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+import org.zkoss.bind.annotation.Command;\r
+import org.zkoss.bind.annotation.NotifyChange;\r
+import org.zkoss.zk.ui.util.Clients;\r
+\r
+import user.jobengine.zk.util.SessionUtil;\r
+\r
+public class PwdGenModel extends BaseModel {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private String pwd;\r
+ private String pwdMD5;\r
+\r
+ @Command\r
+ @NotifyChange("pwdMD5")\r
+ public void generate() {\r
+ setPwdMD5("");\r
+ setPwdMD5(SessionUtil.encodeMD5(pwd));\r
+ }\r
+\r
+ public String getPwd() {\r
+ return pwd;\r
+ }\r
+\r
+ public String getPwdMD5() {\r
+ return pwdMD5;\r
+ }\r
+\r
+ public void setPwd(String pwd) {\r
+ this.pwd = pwd;\r
+ }\r
+\r
+ public void setPwdMD5(String pwdMD5) {\r
+ this.pwdMD5 = pwdMD5;\r
+ Clients.evalJavaScript("Copy2ClipBoard('" + getPwdMD5() + "')");\r
+ }\r
+\r
+}
\ No newline at end of file
import org.zkoss.zul.Window;\r
\r
import user.jobengine.db.ArchivedMedia;\r
-import user.jobengine.db.Media;\r
import user.jobengine.server.IJobEngine;\r
import user.jobengine.server.JobEngine;\r
import user.jobengine.server.scheduler.ScheduledJob;\r
wndRetrieveBatch.detach();\r
}\r
\r
- //////////TEST CODE KESOBB TOROLNI ++++++++++++++++\r
- private ArchivedMedia createFakeArchivedMedia(int c) {\r
- ArchivedMedia ret = new ArchivedMedia();\r
- Media media = new Media();\r
- media.setId(c);\r
- media.setTitle("title_" + c);\r
- media.setMediaFilesName("mediaFilesName_" + c);\r
- ret.setMedia(media);\r
- return ret;\r
- }\r
-\r
@Command\r
@NotifyChange("basketItems")\r
public void execute() {\r
\r
}\r
\r
+ @Command\r
+ public void setPageSize(@BindingParam("source") Menuitem source) {\r
+ if (source.isChecked())\r
+ return;\r
+ int pageSize = Integer.parseInt(source.getValue());\r
+ setSettingsPageSize(pageSize);\r
+ itemsGrid.setPageSize(pageSize);\r
+ itemsGrid.setActivePage(0);\r
+ SessionUtil.putUserPageSize(pageSize);\r
+ }\r
+\r
private void clearAllFilters() {\r
for (String filter : typeFilters.keySet()) {\r
typeFilters.get(filter).setChecked(false);\r
if (!SessionUtil.isAuthenticated())\r
SessionUtil.redirect("/pages/login.zul");\r
\r
- if (!SessionUtil.isAdmin())\r
+ if (!(SessionUtil.isAdmin() || SessionUtil.isSubmitter()))\r
SessionUtil.redirect("/pages/access-denied.zul");\r
}\r
\r
if (StringUtils.isBlank(password) || password.length() < 3)\r
return false;\r
\r
- return (account.equals(user.getUser()) && password.equals(user.getPassword()));\r
+ return (account.equals(user.getUser()) && isPasswordMatch(password, user));\r
}\r
\r
public UserPrincipal getUserPrincipal() {\r
return groupMembers.contains(account);\r
}\r
\r
+ private boolean isPasswordMatch(String password, MediaCubeAccount user) {\r
+ String encodedPwd = SessionUtil.encodeMD5(password);\r
+ return encodedPwd.equals(user.getPassword());\r
+ }\r
+\r
}\r
\r
import java.io.FileInputStream;\r
import java.io.InputStream;\r
+import java.security.MessageDigest;\r
import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.Collections;\r
\r
import javax.servlet.http.HttpServletRequest;\r
import javax.servlet.http.HttpSession;\r
+import javax.xml.bind.DatatypeConverter;\r
\r
+import org.apache.commons.lang.StringUtils;\r
import org.apache.logging.log4j.LogManager;\r
import org.apache.logging.log4j.Logger;\r
import org.zkoss.zk.ui.Executions;\r
logger.info(request.getQueryString());\r
}\r
\r
+ public static String encodeMD5(String text) {\r
+ String result = null;\r
+ if (StringUtils.isNotBlank(text)) {\r
+ MessageDigest md = null;\r
+ try {\r
+ md = MessageDigest.getInstance("MD5");\r
+ md.update(text.getBytes());\r
+ byte[] digest = md.digest();\r
+ result = DatatypeConverter.printHexBinary(digest).toUpperCase();\r
+\r
+ } catch (Exception e) {\r
+ logger.error(e.getMessage());\r
+ }\r
+ }\r
+ return result;\r
+ }\r
+\r
static public Object getAttribute(String name) {\r
// HttpSession session = (HttpSession)\r
// (Executions.getCurrent()).getDesktop().getSession().getNativeSession();\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry exported="true" kind="lib" path="libs/"/>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>\r
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
+ <classpathentry kind="src" path="src"/>\r
+ <classpathentry kind="output" path="bin"/>\r
+</classpath>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+ <name>user.peablebeach.api</name>\r
+ <comment></comment>\r
+ <projects>\r
+ </projects>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.eclipse.pde.ManifestBuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.eclipse.pde.SchemaBuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.pde.PluginNature</nature>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+eclipse.preferences.version=1\r
+encoding/<project>=UTF-8\r
--- /dev/null
+eclipse.preferences.version=1\r
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8\r
+org.eclipse.jdt.core.compiler.compliance=1.8\r
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error\r
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error\r
+org.eclipse.jdt.core.compiler.source=1.8\r
--- /dev/null
+activeProfiles=\r
+eclipse.preferences.version=1\r
+resolveWorkspaceProjects=true\r
+version=1\r
--- /dev/null
+eclipse.preferences.version=1\r
+pluginProject.equinox=false\r
+pluginProject.extensions=false\r
+resolve.requirebundle=false\r
--- /dev/null
+eclipse.preferences.version=1\r
+org.jboss.ide.eclipse.as.core.singledeployable.deployableList=\r
--- /dev/null
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: peablebeach-api
+Bundle-SymbolicName: user.peablebeach.api
+Bundle-Version: 1.0.0
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: org.apache.commons.lang;version="2.6.0",
+ org.apache.logging.log4j;version="2.8.2"
+Bundle-ClassPath: libs/,
+ .
+Export-Package: hu.user.peablebeach.api
+Require-Bundle: org.apache.httpcomponents.httpcore,
+ org.apache.httpcomponents.httpclient
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<launchConfiguration type="org.eclipse.m2e.Maven2LaunchConfigurationType">\r
+<booleanAttribute key="M2_DEBUG_OUTPUT" value="false"/>\r
+<stringAttribute key="M2_GOALS" value="clean install"/>\r
+<booleanAttribute key="M2_NON_RECURSIVE" value="false"/>\r
+<booleanAttribute key="M2_OFFLINE" value="false"/>\r
+<stringAttribute key="M2_PROFILES" value=""/>\r
+<listAttribute key="M2_PROPERTIES"/>\r
+<stringAttribute key="M2_RUNTIME" value="EMBEDDED"/>\r
+<booleanAttribute key="M2_SKIP_TESTS" value="true"/>\r
+<intAttribute key="M2_THREADS" value="1"/>\r
+<booleanAttribute key="M2_UPDATE_SNAPSHOTS" value="false"/>\r
+<stringAttribute key="M2_USER_SETTINGS" value=""/>\r
+<booleanAttribute key="M2_WORKSPACE_RESOLUTION" value="false"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk"/>\r
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc:/user.peablebeach.api}"/>\r
+</launchConfiguration>\r
--- /dev/null
+source.. = src/\r
+output.. = bin/\r
+bin.includes = META-INF/,\\r
+ .\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<project\r
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"\r
+ xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
+ <parent>\r
+ <relativePath>../-modules</relativePath>\r
+ <groupId>user.jobengine</groupId>\r
+ <artifactId>MediaCube</artifactId>\r
+ <version>1.0.0</version>\r
+ </parent>\r
+ <modelVersion>4.0.0</modelVersion>\r
+ <artifactId>user.peablebeach.api</artifactId>\r
+ <packaging>eclipse-plugin</packaging>\r
+ <version>1.0.0</version>\r
+</project>
\ No newline at end of file
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+*****************************************************************\r
+# $Logfile: /Marina_1_1_0/source/xml/API/MarinaAPI.wsdl $\r
+# $Revision: 35 $\r
+# $Date: 2014-09-17 16:09:31+01:00 $\r
+# $Author: sarah.wright $ \r
+***************************************************************** \r
+-->\r
+<!-- edited with XMLSpy v2010 rel. 2 (http://www.altova.com) by Pebble Beach Systems Ltd (Pebble Beach Systems Ltd) -->\r
+<wsdl:definitions xmlns:pbs="http://www.pebble.tv/MarinaAPI" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://www.pebble.tv/MarinaAPI">\r
+ <wsdl:types>\r
+ <xsi:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.pebble.tv/MarinaAPI" elementFormDefault="unqualified" attributeFormDefault="unqualified">\r
+ <xsi:import schemaLocation="include/MarinaTypes.xsd"/>\r
+ <xsi:element name="lastModifiedDateTimeRangeContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'lastModifiedDateTimeRange'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="lastModifiedDateTimeRange" type="lastModifiedDateTimeRange"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:simpleType name="eventIdType">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The event id type can only be one of the valid listed types used in retrieval of events.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:minLength value="1"/>\r
+ <xsi:maxLength value="32"/>\r
+ <xsi:enumeration value="SERVER_UID"/>\r
+ <xsi:enumeration value="POSITION"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ <xsi:simpleType name="eventIdPositionEnum">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Valid position enums that can be used in an event id for event retrieval.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:enumeration value="FIRST"/>\r
+ <xsi:enumeration value="LAST"/>\r
+ <xsi:enumeration value="FOCUS"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ <xsi:simpleType name="eventIdValue" final="union">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The event id value can either be a specific UID or position enum.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:union memberTypes="pbs:eventIdPositionEnum xsi:integer"/>\r
+ </xsi:simpleType>\r
+ <xsi:simpleType name="PlaylistEventXMLConfigurableFields">\r
+ <xsi:annotation>\r
+ <xsi:documentation>One or more of the configurable fields can be set.and are used to retrieve extra config information</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:enumeration value="ESTIMATED_START_TIME"/>\r
+ <xsi:enumeration value="SCHEDULED_START_TIME"/>\r
+ <xsi:enumeration value="START_TIME_STATE"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ <xsi:simpleType name="configType">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Specifies the component to retrieve the extra config from</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:enumeration value="PLAYLIST_EVENT_XML"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ <xsi:complexType name="eventId">\r
+ <xsi:attribute name="type" type="pbs:eventIdType" use="required"/>\r
+ <xsi:attribute name="value" type="pbs:eventIdValue" use="required"/>\r
+ </xsi:complexType>\r
+ <xsi:element name="configRequestListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container that encapsulates the request to "get config" message to send to API</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="configRequestList">\r
+ <xsi:complexType>\r
+ <xsi:all>\r
+ <xsi:element name="configType" type="pbs:configType"/>\r
+ </xsi:all>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="config">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container encapsulating the request to set config and response to the "getConfig" </xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:all>\r
+ <xsi:element name="playListEventXML">\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="enabledFields">\r
+ <xsi:complexType>\r
+ <xsi:choice maxOccurs="unbounded">\r
+ <xsi:element name="field" type="pbs:PlaylistEventXMLConfigurableFields" maxOccurs="unbounded"/>\r
+ </xsi:choice>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:all>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaMetadataContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'media'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="configContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'config'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:all>\r
+ <xsi:element ref="pbs:config"/>\r
+ </xsi:all>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaUsageListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'mediaUsageList'</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="mediaUsageList" type="mediaUsageList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="deleteMediaInstanceContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'deleteMedia'</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="deleteMedia" type="deleteMedia"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaKeyContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'media'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaUsageMediaKeyContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'media'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="deleteMediaInstanceKeyContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'media'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="dateTimecodeRangeContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'dateTimecodeRange'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="dateTimecodeRange" type="dateTimecodeRange"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="jobStateDateTimecodeRangeContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'dateTimecodeRange'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="dateTimecodeRange" type="dateTimecodeRange"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="scheduledJobStateDateTimecodeRangeContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'dateTimecodeRange'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="dateTimecodeRange" type="dateTimecodeRange"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaUsageContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'mediaUsage'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="mediaUsage" type="mediaUsage"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaInstanceKeyContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'MediaInstance'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media">\r
+ <xsi:complexType>\r
+ <xsi:all>\r
+ <xsi:element name="mediaInstance" type="mediaInstance"/>\r
+ </xsi:all>\r
+ <xsi:attribute name="mediaName" type="xsi:string"></xsi:attribute>\r
+ <xsi:attribute name="mediaType" type="xsi:string"></xsi:attribute>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="bAvailableMedia" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Used to return information on available media.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="bUnavailableMedia" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Used to return information on unavailable media.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nHeartbeatId" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Heartbeat id used to track heartbeat responses.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="strListName" type="xsi:string">\r
+ <xsi:annotation>\r
+ <xsi:documentation>String used to hold list name for list query commands. Can also be a channel name from which the active list will be used.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventCount" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event count of queried lists or number of events to return.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventCountDeleted" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event count of queried lists or number of events to return.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventCountNonQueried" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event count of queried lists or number of events to return.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventCountNoAuxXml" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event count of queried events with no aux xml to return.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="eventContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'playlistPrimaryEvent'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="event" type="playlistPrimaryEvent"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="nEventPosition" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Position of the event to query.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventKey" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Key of the event to query.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="eventListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container for an event list.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="eventList" type="playlistPrimaryEventList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="jobContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'job'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="job" type="job"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="scheduledJobContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'scheduled job'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="job" type="scheduledJob"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="nJobId" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Id of an automation job.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nScheduledJobId" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Id of a scheduled automation job.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="bMoreEventsAvailable" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Flag used to indicate there are more events after the last event in an event list returned by a call that returns multiple events.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="eventId" type="pbs:eventId">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event id used to retrieve events.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nextEventId" type="pbs:eventId">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Next event id returned by command.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="eventIdList">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of event ids.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventId" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="eventIdListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for an event id list.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventIdList" minOccurs="0"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="eventIdListContainerDeleted">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container for an event id list for events that have been deleted.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventIdList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="eventIdListContainerNonQueried">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container for an event id list for events that have not been queried.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventIdList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="bIncludeChildEvents" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>For events that return event XML set this flag to true for child events to be returned.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="componentTagContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'componentTag'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="componentTag" type="componentTag"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="bIncludeUnhostedComponents" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>For events that return component information set this flag to true to include active objects that aren't hosted.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="componentListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to complex type 'componentList'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="componentList" type="componentList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="eventUpdateType">\r
+ <xsi:annotation>\r
+ <xsi:documentation>An enumeration of different update types performed on an event.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:simpleType>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:minLength value="1"/>\r
+ <xsi:maxLength value="32"/>\r
+ <xsi:enumeration value="Insert"/>\r
+ <xsi:enumeration value="Update"/>\r
+ <xsi:enumeration value="Delete"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ </xsi:element>\r
+ <xsi:element name="getContiguousListEventsOutput">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Object containing all parameters returned by the getContiguousListEvents method.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:nEventCount">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the event list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:eventListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of events returned using the passed in query parameters.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:bMoreEventsAvailable">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A flag to indicate whether there are more events available after the last event returned in the event list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nextEventId" minOccurs="0">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The event id key for the next event in the list after the last event contained in the event list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getNonContiguousListEventsOutput">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Object containing all parameters returned by the getNonContiguousListEvents method.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of events returned using the passed in query parameters.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nEventCount">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the event list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:eventIdListContainerDeleted">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of event id's for events that have been deleted from the list of events to query.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nEventCountDeleted">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the deleted events event id list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:eventIdListContainerNonQueried">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of event id's for events that were not queried this will always be a subset of the list of event id's passed in to query.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nEventCountNonQueried">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the non-queried events event id list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getListEventChangesOutput">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Object containing all parameters returned by the getListEventChanges method.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventIdListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of event id's for events that have changed and meet the filters provided.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nEventCount">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the returned event id list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getListEventChangesAuxXMLOutput">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Object containing all parameters returned by the getListEventChangesAuxXML method.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventListContainer"/>\r
+ <xsi:element ref="pbs:nEventCount"/>\r
+ <xsi:element ref="pbs:eventIdListContainer"/>\r
+ <xsi:element ref="pbs:nEventCountNoAuxXml"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="bIncludeEmptyAuxXmlEvents" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>When set to true we return back to the caller a list of all events that contained no aux xml.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="mediaListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a list of media items.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element minOccurs="1" name="mediaList" maxOccurs="1" type="mediaList"/>\r
+ <xsi:element type="moreResults" minOccurs="1" maxOccurs="1" name="moreResults"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="jobListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a list of jobs.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element minOccurs="1" name="jobList" maxOccurs="1" type="jobList"/>\r
+ <xsi:element type="moreResults" minOccurs="1" maxOccurs="1" name="moreResults"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="scheduledJobListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a list of scheduled jobs.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element minOccurs="1" name="jobList" maxOccurs="1" type="scheduledJobList"/>\r
+ <xsi:element type="moreResults" minOccurs="1" maxOccurs="1" name="moreResults"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getJobsForMediaRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a media item relating to jobs.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getScheduledJobsForMediaRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a media item relating to scheduled jobs.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element> \r
+ <xsi:element name="getJobRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for the get job request.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="job" type="job"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getScheduledJobRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for the get scheduled job request.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="job" type="scheduledJob"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getCustomViewRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for the get Custom View request.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="marinaCustomAPI">\r
+ <xsi:complexType>\r
+ <xsi:attribute name="view" type="xsi:string" use="required"></xsi:attribute>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getCustomViewResponseContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Contains a list of media from the get Custom View request.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element minOccurs="1" name="mediaList" maxOccurs="1" type="mediaList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:schema>\r
+ </wsdl:types>\r
+ <wsdl:message name="insertUpdateMediaMetadataRequest">\r
+ <wsdl:part name="metadata" element="pbs:mediaMetadataContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateMediaMetadataResponse"/>\r
+ <wsdl:message name="getMediaMetadataRequest">\r
+ <wsdl:part name="mediaKey" element="pbs:mediaKeyContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaMetadataResponse">\r
+ <wsdl:part name="metadata" element="pbs:mediaMetadataContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaInstanceMetadataRequest">\r
+ <wsdl:part name="mediaKey" element="pbs:mediaInstanceKeyContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaInstanceMetadataResponse">\r
+ <wsdl:part name="metadata" element="pbs:mediaMetadataContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaMetadataChangedRequest">\r
+ <wsdl:part name="range" element="pbs:lastModifiedDateTimeRangeContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaMetadataChangedResponse">\r
+ <wsdl:part name="metadata" element="pbs:mediaListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaUsageRequest">\r
+ <wsdl:part name="mediaKey" element="pbs:mediaUsageMediaKeyContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaUsageResponse">\r
+ <wsdl:part name="mediaUsage" element="pbs:mediaUsageContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaUsageByUTRangeRequest">\r
+ <wsdl:part name="range" element="pbs:dateTimecodeRangeContainer"/>\r
+ <wsdl:part name="availableMedia" element="pbs:bAvailableMedia"/>\r
+ <wsdl:part name="unavailableMedia" element="pbs:bUnavailableMedia"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaUsageByUTRangeResponse">\r
+ <wsdl:part name="mediaUsageList" element="pbs:mediaUsageListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteMediaInstanceRequest">\r
+ <wsdl:part name="mediaKey" element="pbs:deleteMediaInstanceKeyContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteMediaInstanceResponse">\r
+ <wsdl:part name="deleteMediaInstanceContainer" element="pbs:deleteMediaInstanceContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="heartbeatRequest">\r
+ <wsdl:part name="Id" element="pbs:nHeartbeatId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="heartbeatResponse">\r
+ <wsdl:part name="Id" element="pbs:nHeartbeatId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="listGetEventCountRequest">\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="listGetEventCountResponse">\r
+ <wsdl:part name="eventCount" element="pbs:nEventCount"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventRequest">\r
+ <wsdl:part name="eventKey" element="pbs:eventId"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ <wsdl:part name="includeChildEvents" element="pbs:bIncludeChildEvents"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventResponse">\r
+ <wsdl:part name="queriedPlaylistPrimaryEvent" element="pbs:eventContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getContiguousListEventsRequest">\r
+ <wsdl:part name="eventCount" element="pbs:nEventCount"/>\r
+ <wsdl:part name="eventKey" element="pbs:eventId"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ <wsdl:part name="includeChildEvents" element="pbs:bIncludeChildEvents"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getContiguousListEventsResponse">\r
+ <wsdl:part name="getContiguousListEventsOutput" element="pbs:getContiguousListEventsOutput"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventChangesRequest">\r
+ <wsdl:part name="eventTypeFilter" element="pbs:eventUpdateType"/>\r
+ <wsdl:part name="range" element="pbs:dateTimecodeRangeContainer"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventChangesResponse">\r
+ <wsdl:part name="getListEventChangesOutput" element="pbs:getListEventChangesOutput"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateJobRequest">\r
+ <wsdl:part name="job" element="pbs:jobContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateJobResponse">\r
+ <wsdl:part name="jobId" element="pbs:nJobId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateScheduledJobRequest">\r
+ <wsdl:part name="job" element="pbs:scheduledJobContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateScheduledJobResponse">\r
+ <wsdl:part name="jobId" element="pbs:nScheduledJobId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteJobRequest">\r
+ <wsdl:part name="jobId" element="pbs:nJobId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteJobResponse"/>\r
+ <wsdl:message name="deleteScheduledJobRequest">\r
+ <wsdl:part name="jobId" element="pbs:nScheduledJobId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteScheduledJobResponse"/>\r
+ <wsdl:message name="getComponentListResponse">\r
+ <wsdl:part name="componentList" element="pbs:componentListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getComponentListRequest">\r
+ <wsdl:part name="componentTag" element="pbs:componentTagContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getNonContiguousListEventsRequest">\r
+ <wsdl:part name="eventIdList" element="pbs:eventIdListContainer"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ <wsdl:part name="includeChildEvents" element="pbs:bIncludeChildEvents"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getNonContiguousListEventsResponse">\r
+ <wsdl:part name="getNonContiguousListEventsOutput" element="pbs:getNonContiguousListEventsOutput"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventChangesAuxXMLRequest">\r
+ <wsdl:part name="includeEmptyAuxXmlEvents" element="pbs:bIncludeEmptyAuxXmlEvents"/>\r
+ <wsdl:part name="eventIdList" element="pbs:eventIdListContainer"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventChangesAuxXMLResponse">\r
+ <wsdl:part name="getListEventChangesAuxXMLOutput" element="pbs:getListEventChangesAuxXMLOutput"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="setConfigurationRequest">\r
+ <wsdl:part name="setConfig" element="pbs:configContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="setConfigurationResponse"/>\r
+ <wsdl:message name="getConfigurationRequest">\r
+ <wsdl:part name="Config" element="pbs:configRequestListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getConfigurationResponse">\r
+ <wsdl:part name="config" element="pbs:configContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobStateChangesRequest">\r
+ <wsdl:part name="range" element="pbs:jobStateDateTimecodeRangeContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobStateChangesResponse">\r
+ <wsdl:part name="jobList" element="pbs:jobListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobStateChangesRequest">\r
+ <wsdl:part name="range" element="pbs:scheduledJobStateDateTimecodeRangeContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobStateChangesResponse">\r
+ <wsdl:part name="jobList" element="pbs:scheduledJobListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobsForMediaRequest">\r
+ <wsdl:part name="media" element="pbs:getJobsForMediaRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobsForMediaResponse">\r
+ <wsdl:part name="jobListContainer" element="pbs:jobListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobsForMediaRequest">\r
+ <wsdl:part name="media" element="pbs:getScheduledJobsForMediaRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobsForMediaResponse">\r
+ <wsdl:part name="scheduledJobListContainer" element="pbs:scheduledJobListContainer"/>\r
+ </wsdl:message> \r
+ <wsdl:message name="getJobRequest">\r
+ <wsdl:part name="job" element="pbs:getJobRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobResponse">\r
+ <wsdl:part name="job" element="pbs:jobContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobRequest">\r
+ <wsdl:part name="job" element="pbs:getScheduledJobRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobResponse">\r
+ <wsdl:part name="job" element="pbs:scheduledJobContainer"/>\r
+ </wsdl:message> \r
+ <wsdl:message name="getCustomViewRequest">\r
+ <wsdl:part name="marinaCustomAPI" element="pbs:getCustomViewRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getCustomViewResponse">\r
+ <wsdl:part name="mediaList" element="pbs:getCustomViewResponseContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:portType name="PBSMarinaAPI">\r
+ <wsdl:operation name="insertUpdateMediaMetadata">\r
+ <wsdl:documentation>Inserts or updates media and/or media instance metadata in the marina database.</wsdl:documentation>\r
+ <wsdl:input message="pbs:insertUpdateMediaMetadataRequest"/>\r
+ <wsdl:output message="pbs:insertUpdateMediaMetadataResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaMetadata">\r
+ <wsdl:documentation>Returns metadata for the specified media/media instances. See definition of pbs:media. \r
+The media key must be specified and optionally media instance keys (mediaSets). \r
+If no media instances are requested, metadata for all instances are returned.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getMediaMetadataRequest"/>\r
+ <wsdl:output message="pbs:getMediaMetadataResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaUsage">\r
+ <wsdl:documentation>Returns playout usage of the specified media. \r
+The media key must be specified and optionally media instance keys (media sets). \r
+If no instances are specified the usage of all instances of that media are returned.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getMediaUsageRequest"/>\r
+ <wsdl:output message="pbs:getMediaUsageResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaUsageByUTRange">\r
+ <wsdl:documentation>Returns the playout usage for all media within a specified timecode range.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getMediaUsageByUTRangeRequest"/>\r
+ <wsdl:output message="pbs:getMediaUsageByUTRangeResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="heartbeat">\r
+ <wsdl:documentation>The heartbeat ID is client generated and is echoed back to the caller by the PBS API.</wsdl:documentation>\r
+ <wsdl:input message="pbs:heartbeatRequest"/>\r
+ <wsdl:output message="pbs:heartbeatResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventCount">\r
+ <wsdl:input message="pbs:listGetEventCountRequest"/>\r
+ <wsdl:output message="pbs:listGetEventCountResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEvent">\r
+ <wsdl:documentation>Returns the 'event' event with the queried event id and list.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getListEventRequest"/>\r
+ <wsdl:output message="pbs:getListEventResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getContiguousListEvents">\r
+ <wsdl:documentation>Returns the 'playlistPrimaryEvent' event with an event id of 'eventKey' including the \r
+next 'nEventCount' events in an 'eventList'.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getContiguousListEventsRequest"/>\r
+ <wsdl:output message="pbs:getContiguousListEventsResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getNonContiguousListEvents">\r
+ <wsdl:documentation>Returns a list of events specified in 'eventIdList'.\r
+Deleted/missing events are returned in the 'deletedEvents' eventIdList.\r
+If more events are queried than the maximum configured amount then non-queried \r
+events are returned in the 'nonQueriedEvents' eventIdList getNonContiguousListEvents\r
+can then be called again passing in the list. When this list is empty all events were \r
+queried.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getNonContiguousListEventsRequest"/>\r
+ <wsdl:output message="pbs:getNonContiguousListEventsResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventChanges">\r
+ <wsdl:documentation>Returns a list of event ids for all events that have changed in the specified list \r
+between the specified dates/times filtered by an event type.\r
+Note: It is possible this method will return more events than is supported by\r
+getNonContiguousListEvents.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getListEventChangesRequest"/>\r
+ <wsdl:output message="pbs:getListEventChangesResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getComponentList">\r
+ <wsdl:documentation>Returns a list of components that meet the filter requirements.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getComponentListRequest"/>\r
+ <wsdl:output message="pbs:getComponentListResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="insertUpdateJob">\r
+ <wsdl:documentation>Returns the job id of the created/updated job on success.\r
+Note: You must send the job uid on an update.</wsdl:documentation>\r
+ <wsdl:input message="pbs:insertUpdateJobRequest"/>\r
+ <wsdl:output message="pbs:insertUpdateJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="insertUpdateScheduledJob">\r
+ <wsdl:documentation>\r
+ Returns the job id of the created/updated scheduled job on success.\r
+ Note: You must send the job uid on an update.\r
+ </wsdl:documentation>\r
+ <wsdl:input message="pbs:insertUpdateScheduledJobRequest"/>\r
+ <wsdl:output message="pbs:insertUpdateScheduledJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteJob">\r
+ <wsdl:documentation>Delete a job using the id returned by 'insertUpdateJob'.</wsdl:documentation>\r
+ <wsdl:input message="pbs:deleteJobRequest"/>\r
+ <wsdl:output message="pbs:deleteJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteScheduledJob">\r
+ <wsdl:documentation>Delete a job using the id returned by 'insertUpdateJob'.</wsdl:documentation>\r
+ <wsdl:input message="pbs:deleteScheduledJobRequest"/>\r
+ <wsdl:output message="pbs:deleteScheduledJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteMediaInstance">\r
+ <wsdl:documentation>Delete a media instance (or multiple media instances). \r
+The media key must be specified and optionally media instance keys (media sets). \r
+If no instances are specified, all instances of that media will be deleted from all the media sets.</wsdl:documentation>\r
+ <wsdl:input message="pbs:deleteMediaInstanceRequest"/>\r
+ <wsdl:output message="pbs:deleteMediaInstanceResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventChangesAuxXML">\r
+ <wsdl:documentation>Return the updated jobs database auxillary XML. At the moment this is just used for\r
+returning reconcile keys for a given list of deleted event UIDs. Events with no aux \r
+xml stored for them can be returned by setting the include empty aux xml events flag\r
+and will be returned in an event id list.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getListEventChangesAuxXMLRequest"/>\r
+ <wsdl:output message="pbs:getListEventChangesAuxXMLResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="setConfiguration">\r
+ <wsdl:input message="pbs:setConfigurationRequest"/>\r
+ <wsdl:output message="pbs:setConfigurationResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getConfiguration">\r
+ <wsdl:input message="pbs:getConfigurationRequest"/>\r
+ <wsdl:output message="pbs:getConfigurationResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaMetadataChanged">\r
+ <wsdl:input message="pbs:getMediaMetadataChangedRequest"/>\r
+ <wsdl:output message="pbs:getMediaMetadataChangedResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJobStateChanges">\r
+ <wsdl:documentation>Returns a job list of all jobs whose state has changed between the dates/times.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getJobStateChangesRequest"/>\r
+ <wsdl:output message="pbs:getJobStateChangesResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJobStateChanges">\r
+ <wsdl:documentation>Returns a job list of all scheduled jobs whose state has changed between the dates/times.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getScheduledJobStateChangesRequest"/>\r
+ <wsdl:output message="pbs:getScheduledJobStateChangesResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJobsForMedia">\r
+ <wsdl:documentation>Returns a list of all the automation jobs and their current state relating to the media.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getJobsForMediaRequest"/>\r
+ <wsdl:output message="pbs:getJobsForMediaResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJobsForMedia">\r
+ <wsdl:documentation>Returns a list of all the scheduled jobs and their current state relating to the media.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getScheduledJobsForMediaRequest"/>\r
+ <wsdl:output message="pbs:getScheduledJobsForMediaResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJob">\r
+ <wsdl:documentation>Returns the job with the queried job id and type.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getJobRequest"/>\r
+ <wsdl:output message="pbs:getJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJob">\r
+ <wsdl:documentation>Returns the scheduled job with the queried job id and type.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getScheduledJobRequest"/>\r
+ <wsdl:output message="pbs:getScheduledJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaInstanceMetadata">\r
+ <wsdl:documentation>Returns metadata for the specified media instance. See definition of pbs:mediaInstance. \r
+The media key must be specified and optionally media instance keys (mediaSets). \r
+If no media instances are requested, metadata for all instances are returned.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getMediaInstanceMetadataRequest"/>\r
+ <wsdl:output message="pbs:getMediaInstanceMetadataResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getCustomView">\r
+ <wsdl:documentation>Returns a medialist of rows returned by the specified custom view</wsdl:documentation>\r
+ <wsdl:input message="pbs:getCustomViewRequest"/>\r
+ <wsdl:output message="pbs:getCustomViewResponse"/>\r
+ </wsdl:operation>\r
+ </wsdl:portType>\r
+ <wsdl:binding name="PBSMarinaAPIBindingSOAP" type="pbs:PBSMarinaAPI">\r
+ <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>\r
+ <wsdl:operation name="insertUpdateMediaMetadata">\r
+ <soap12:operation soapAction="/insertUpdateMediaMetadata" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaMetadata">\r
+ <soap12:operation soapAction="/getMediaMetadata" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaUsage">\r
+ <soap12:operation soapAction="/getMediaUsage" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaUsageByUTRange">\r
+ <soap12:operation soapAction="/getMediaUsageByUTRange" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteMediaInstance">\r
+ <soap12:operation soapAction="/deleteMediaInstance" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="heartbeat">\r
+ <soap12:operation soapAction="/heartbeat" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventCount">\r
+ <soap12:operation soapAction="/getListEventCount" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEvent">\r
+ <soap12:operation soapAction="/getListEvent" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getContiguousListEvents">\r
+ <soap12:operation soapAction="/getContiguousListEvents" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getNonContiguousListEvents">\r
+ <soap12:operation soapAction="/getNonContiguousListEvents" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventChanges">\r
+ <soap12:operation soapAction="/getListEventChanges" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getComponentList">\r
+ <soap12:operation soapAction="/getComponentList" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="insertUpdateJob">\r
+ <soap12:operation soapAction="/insertUpdateJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="insertUpdateScheduledJob">\r
+ <soap12:operation soapAction="/insertUpdateScheduledJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteJob">\r
+ <soap12:operation soapAction="/deleteJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteScheduledJob">\r
+ <soap12:operation soapAction="/deleteScheduledJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventChangesAuxXML">\r
+ <soap12:operation soapAction="/getListEventChangesAuxXML" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="setConfiguration">\r
+ <soap12:operation soapAction="/setConfiguration" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getConfiguration">\r
+ <soap12:operation soapAction="/getConfiguration" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaMetadataChanged">\r
+ <soap12:operation soapAction="/getMediaMetadataChanged" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJobStateChanges">\r
+ <soap12:operation soapAction="/getJobStateChanges" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJobStateChanges">\r
+ <soap12:operation soapAction="/getScheduledJobStateChanges" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJobsForMedia">\r
+ <soap12:operation soapAction="/getJobsForMedia" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJobsForMedia">\r
+ <soap12:operation soapAction="/getScheduledJobsForMedia" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJob">\r
+ <soap12:operation soapAction="/getJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJob">\r
+ <soap12:operation soapAction="/getScheduledJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaInstanceMetadata">\r
+ <soap12:operation soapAction="/getMediaInstanceMetadata" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getCustomView">\r
+ <soap12:operation soapAction="/getCustomView" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ </wsdl:binding>\r
+ <wsdl:service name="PBSMarinaAPIService">\r
+ <wsdl:port name="PBSMarinaAPISOAPPort" binding="pbs:PBSMarinaAPIBindingSOAP">\r
+ <soap12:address location="http://127.0.0.1:18083"/>\r
+ </wsdl:port>\r
+ </wsdl:service>\r
+</wsdl:definitions>\r
+<!--\r
+*****************************************************************\r
+# $History: /Marina_1_1_0/source/xml/API/MarinaAPI.wsdl $\r
+# \r
+# ****************** Version 35 ****************** \r
+# User: sarah.wright Date: 2014-09-17 Time: 16:09:31+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Added new API function called getMediaInstanceMetadata \r
+# \r
+# ****************** Version 34 ****************** \r
+# User: Edward.Thurman Date: 2014-07-18 Time: 17:38:19+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# getJobForMedia and getScheduledJobForMedia commands added to retrieve jobs \r
+# of a particular media name and type, and getJob and getScheduledJob \r
+# commands added to retrieve the queried job details. \r
+# \r
+# ****************** Version 33 ****************** \r
+# User: Edward.Thurman Date: 2014-06-20 Time: 15:53:23+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Removed a duplicate message definition that was causing the wsdl to fail \r
+# validation. \r
+# \r
+# ****************** Version 32 ****************** \r
+# User: ignazio.castrogiovanni Date: 2014-03-29 Time: 09:33:13+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# XML changes for the inserUpdateScheduledJob API \r
+# \r
+# ****************** Version 31 ****************** \r
+# User: Edward.Thurman Date: 2014-03-27 Time: 17:25:56+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Added state change notifications for automated and scheduled jobs, in \r
+# addition to the API getters for such state changes. \r
+# \r
+# ****************** Version 30 ****************** \r
+# User: jose.valencia Date: 2013-11-21 Time: 15:31:42+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Added a new deleteMediaInstance operation. \r
+# \r
+# ****************** Version 29 ****************** \r
+# User: michael.cullen Date: 2013-10-17 Time: 17:00:47+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# MAR-6685 - getMediaMetadataChanged fixes \r
+# \r
+# ****************** Version 28 ****************** \r
+# User: jacopo.vezzosi Date: 2013-07-03 Time: 09:24:25+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Additional command getMediaMetadataChanged supported in the API for \r
+# MediaGenix. \r
+# \r
+# ****************** Version 26 ****************** \r
+# User: james.mbowa Date: 2012-08-23 Time: 16:16:06+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Added two new function getConfiguration and setConfiguration. bug No. 12712 \r
+# \r
+# ****************** Version 25 ****************** \r
+# User: phil.lee Date: 2012-05-25 Time: 11:01:49+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Changed an event UID from an xs:int to an xs:integer to allow for a 64 bit \r
+# number. \r
+# \r
+# ****************** Version 24 ****************** \r
+# User: phil.lee Date: 2011-11-03 Time: 15:48:22+00:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Added new getListEventChangesAuxXML function. \r
+# \r
+# ****************** Version 23 ****************** \r
+# User: phil.lee Date: 2011-06-27 Time: 10:02:38+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated the following schema types getContiguousListEventsOutput, \r
+# getNonContiguousListEventsOutput and getListEventChangesOutput to bring \r
+# in-line with the API responses. All return types should now validate \r
+# against the schema types. \r
+# \r
+# ****************** Version 22 ****************** \r
+# User: peter.brown Date: 2011-06-20 Time: 16:18:12+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# fixed urn#: soap actions for getNonContiguouseveents and deleteJob commands \r
+# \r
+# ****************** Version 21 ****************** \r
+# User: phil.lee Date: 2011-06-20 Time: 15:10:42+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Renamed parameter 1 on the method getContiguousListEvents from \r
+# getContiguousListEventsInput to eventCount. \r
+# \r
+# ****************** Version 20 ****************** \r
+# User: phil.lee Date: 2011-06-17 Time: 13:06:15+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated so that input parameters are not longer stored in one type. Added a \r
+# new type nextEventId to prevent any confusion. \r
+# \r
+# ****************** Version 19 ****************** \r
+# User: phil.lee Date: 2011-06-10 Time: 14:55:32+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated after changes to make API work with VS .NET. \r
+# \r
+# ****************** Version 18 ****************** \r
+# User: phil.lee Date: 2011-06-09 Time: 11:38:03+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated to use SOAP v1.2. \r
+# \r
+# ****************** Version 17 ****************** \r
+# User: phil.lee Date: 2011-05-23 Time: 11:02:39+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Renamed Holder to Container. \r
+# \r
+# ****************** Version 16 ****************** \r
+# User: phil.lee Date: 2011-05-19 Time: 16:15:29+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Update getNonContiguousListEvents method so that the return parameters were \r
+# unique types in order to get gSoap code to compile. \r
+# \r
+# ****************** Version 15 ****************** \r
+# User: phil.lee Date: 2011-05-18 Time: 10:21:34+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# First pass of the Marina API upgrade. Still to be finished \r
+# getNonContiguousListEvents, getListEventChanges, insertUpdateJob and \r
+# deleteJob. There is some configuration options, currently hardcoded, to be \r
+# added as well. \r
+# \r
+# ****************** Version 14 ****************** \r
+# User: phil.lee Date: 2010-10-21 Time: 10:12:30+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated to put all messages and types in a 'pbs' namespace. \r
+# \r
+# ****************** Version 13 ****************** \r
+# User: peter.brown Date: 2010-09-16 Time: 10:34:34+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 12 ****************** \r
+# User: peter.brown Date: 2010-09-14 Time: 16:03:26+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# simple reformatted some of the annotations so the diagrams look prettier \r
+# when auto generated. \r
+# \r
+# ****************** Version 11 ****************** \r
+# User: phil.lee Date: 2010-09-13 Time: 16:48:16+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 10 ****************** \r
+# User: phil.lee Date: 2010-09-13 Time: 16:06:18+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Added new Heartbeat method to WSDL file. \r
+# \r
+# ****************** Version 9 ****************** \r
+# User: phil.lee Date: 2010-05-19 Time: 15:50:43+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 8 ****************** \r
+# User: phil.lee Date: 2010-05-19 Time: 12:25:55+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 7 ****************** \r
+# User: phil.lee Date: 2010-05-12 Time: 17:13:44+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 6 ****************** \r
+# User: phil.lee Date: 2010-04-19 Time: 16:53:46+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 4 ****************** \r
+# User: paul.hatcher Date: 2010-03-22 Time: 18:36:54+00:00 \r
+# Updated in: /Marina/source/xml/API \r
+*****************************************************************\r
+-->\r
--- /dev/null
+set JAVA_HOME=c:\programs\java\jdk\r
+set PATH=c:\programs\java\jdk\bin;%PATH%\r
+:c:\programs\apache-cxf-3.2.7\bin\wsdl2java -b jaxb.xml -p pb.wsclient -keep MarinaAPI.wsdl\r
+c:\programs\apache-cxf-3.2.7\bin\wsdl2java -p pb.wsclient -b jaxb.xml -client -exsh false -dns true -dex true -verbose -keep MarinaAPI.wsdl\r
--- /dev/null
+package hu.user.peablebeach.api;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
+import java.util.List;\r
+\r
+import pb.wsclient.MediaInstanceUsage;\r
+import pb.wsclient.MediaUsage;\r
+import pb.wsclient.MediaUsage.MediaInstancesUsage;\r
+\r
+class MediaUsageComparator<T> implements Comparator<MediaUsage> {\r
+\r
+ //Compares its two arguments for order.\r
+ @Override\r
+ public int compare(MediaUsage mu1, MediaUsage mu2) {\r
+ String mu1FirstTime = getEarliestUsageTime(mu1);\r
+ String mu2FirstTime = getEarliestUsageTime(mu2);\r
+ return mu1FirstTime.compareTo(mu2FirstTime);\r
+ }\r
+\r
+ //Indicates whether some other object is "equal to" this comparator.\r
+ @Override\r
+ public boolean equals(Object obj) {\r
+ return false;\r
+ }\r
+\r
+ private String getEarliestUsageTime(MediaUsage mu) {\r
+ MediaInstancesUsage muUsage = mu.getMediaInstancesUsage();\r
+ List<MediaInstanceUsage> muUsageList = muUsage.getMediaInstanceUsage();\r
+ List<String> sortedEarliest = new ArrayList<String>();\r
+ for (MediaInstanceUsage usage : muUsageList) {\r
+ sortedEarliest.add(usage.getEarliestUsageTime());\r
+ }\r
+ Collections.sort(sortedEarliest);\r
+ if (sortedEarliest.size() > 0) {\r
+ return sortedEarliest.get(0);\r
+ } else {\r
+ return null;\r
+ }\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+package hu.user.peablebeach.api;\r
+\r
+//import pb.wsclient;\r
+import java.net.URL;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Calendar;\r
+import java.util.Collections;\r
+import java.util.Date;\r
+import java.util.LinkedHashSet;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import javax.xml.ws.BindingProvider;\r
+\r
+import org.apache.commons.lang.StringUtils;\r
+import org.apache.logging.log4j.LogManager;\r
+import org.apache.logging.log4j.Logger;\r
+\r
+import pb.wsclient.DateTimecodeRange;\r
+import pb.wsclient.DateTimecodeRangeContainer;\r
+import pb.wsclient.GetCustomViewRequestContainer;\r
+import pb.wsclient.GetCustomViewResponseContainer;\r
+import pb.wsclient.Media;\r
+import pb.wsclient.MediaList;\r
+import pb.wsclient.MediaType;\r
+import pb.wsclient.MediaUsage;\r
+import pb.wsclient.MediaUsageList;\r
+import pb.wsclient.MediaUsageListContainer;\r
+import pb.wsclient.PBSMarinaAPI;\r
+import pb.wsclient.PBSMarinaAPIService;\r
+\r
+/**\r
+ * PebbleBeach missing material source. Soap ws hivasokkal kerdezi le a hianyzo allomanyokat.\r
+ */\r
+public class PBMissingMaterialSrc {\r
+ private static final Logger logger = LogManager.getLogger();\r
+ private SimpleDateFormat sdf_range = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:'00'");\r
+ private URL wsdlURL = null;\r
+ private PBSMarinaAPI primaryMarinaAPI = null;\r
+ private PBSMarinaAPI secondaryMarinaAPI = null;\r
+ private int rangeForwardHours = 24;\r
+\r
+ private PBSMarinaAPI createPBMarinaAPI(String endPointUrl, URL wsdlURL, String soapUserId, String soapUserPassword) throws Exception {\r
+ PBSMarinaAPIService api = new PBSMarinaAPIService(wsdlURL);\r
+ PBSMarinaAPI bpsPort = api.getPBSMarinaAPISOAPPort();\r
+ BindingProvider bindingProvider = (BindingProvider) bpsPort;\r
+\r
+ Map<String, Object> context = bindingProvider.getRequestContext();\r
+ context.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endPointUrl);\r
+\r
+ if (StringUtils.isNotBlank(soapUserId) && StringUtils.isNotBlank(soapUserPassword)) {\r
+ context.put(BindingProvider.USERNAME_PROPERTY, soapUserId); //pbs\r
+ context.put(BindingProvider.PASSWORD_PROPERTY, soapUserPassword); //pbs\r
+ }\r
+ return bpsPort;\r
+ }\r
+\r
+ /***\r
+ * A PeableBeach altal lehetseges missing material statuszu mediak nevei, amik nincsenek a BeachPool-ban\r
+ *\r
+ * @param poolContent\r
+ * Egyszintu BeachPool lista\r
+ * @throws Exception\r
+ */\r
+ public LinkedHashSet<String> getPossibelMissingMaterialNames(List<String> poolContent) throws Exception {\r
+ //get sortable\r
+ List<MediaUsage> sortedMediaUsages = querySortableMedias();\r
+ //sort by earliestusagetime\r
+ Collections.sort(sortedMediaUsages, new MediaUsageComparator<MediaUsage>());\r
+ //normalize\r
+ LinkedHashSet<String> result = normalizeName(sortedMediaUsages);\r
+ //collect more\r
+ LinkedHashSet<String> otherMedias = queryOtherMedias(result);\r
+ result.addAll(otherMedias);\r
+ //get only realy missing\r
+ if (poolContent != null)\r
+ result.removeAll(poolContent);\r
+ return result;\r
+\r
+ }\r
+\r
+ public void init(String primaryEndPoint, String primaryUserName, String primaryPassword, String secondaryEndPoint, String secondaryUserName,\r
+ String secondaryPassword, int rangeForwardHours) throws Exception {\r
+ this.wsdlURL = this.getClass().getClassLoader().getResource("MarinaAPI.wsdl");\r
+ this.primaryMarinaAPI = createPBMarinaAPI(primaryEndPoint, this.wsdlURL, primaryUserName, primaryPassword);\r
+ if (StringUtils.isNotBlank(secondaryEndPoint))\r
+ this.secondaryMarinaAPI = createPBMarinaAPI(secondaryEndPoint, this.wsdlURL, secondaryUserName, secondaryPassword);\r
+\r
+ this.rangeForwardHours = rangeForwardHours;\r
+ }\r
+\r
+ /***\r
+ * A nem ures media neveket kisbetusse konvertalja\r
+ *\r
+ * @param mediaUsages\r
+ * @return\r
+ */\r
+ private LinkedHashSet<String> normalizeName(List<MediaUsage> mediaUsages) {\r
+ LinkedHashSet<String> result = new LinkedHashSet<String>();\r
+ for (MediaUsage mediaUsage : mediaUsages) {\r
+ String name = normalizeName(mediaUsage.getMediaName());\r
+ if (StringUtils.isNotBlank(name))\r
+ result.add(name);\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private String normalizeName(String mediaName) {\r
+ String result = null;\r
+ if (StringUtils.isNotBlank(mediaName)) {\r
+ result = mediaName.trim().toLowerCase();\r
+ }\r
+ return result;\r
+ }\r
+\r
+ private LinkedHashSet<String> queryOtherMedias(LinkedHashSet<String> missingMediaFileNames) throws Exception {\r
+\r
+ LinkedHashSet<String> ret = new LinkedHashSet<String>();\r
+\r
+ //SOAP Request\r
+ GetCustomViewRequestContainer cvReqContainer = new GetCustomViewRequestContainer();\r
+ GetCustomViewRequestContainer.MarinaCustomAPI customApi = new GetCustomViewRequestContainer.MarinaCustomAPI();\r
+ cvReqContainer.setMarinaCustomAPI(customApi);\r
+ customApi.setView("cxvMissingMediaPlaylistCache"); //config +++++\r
+\r
+ GetCustomViewResponseContainer cvContainer = null;\r
+ try {\r
+ //call ws\r
+ cvContainer = primaryMarinaAPI.getCustomView(cvReqContainer);\r
+ } catch (Exception e) {\r
+ logger.error("", e);\r
+ if (secondaryMarinaAPI != null) {\r
+ cvContainer = secondaryMarinaAPI.getCustomView(cvReqContainer);\r
+ }\r
+ }\r
+\r
+ //remove existing media files from list\r
+ if (cvContainer != null) {\r
+ MediaList mediaList = cvContainer.getMediaList();\r
+ if (mediaList != null) {\r
+ for (Media media : mediaList.getMedia()) {\r
+ //CI12345 -> ci12345.mxf\r
+ String mediaName = media.getMediaName();\r
+\r
+ if (StringUtils.isNotBlank(mediaName)) {\r
+ mediaName = normalizeName(mediaName);\r
+ if (!missingMediaFileNames.contains(mediaName)) {\r
+ ret.add(mediaName);\r
+ }\r
+ } else {\r
+ logger.error("PBMissingMaterialSrc.getCustomViewMediaList empty filename: " + media.getMediaName());\r
+ }\r
+\r
+ }\r
+ }\r
+ }\r
+ return ret;\r
+ }\r
+\r
+ private List<MediaUsage> querySortableMedias() throws Exception {\r
+ List<MediaUsage> result = new ArrayList<MediaUsage>();\r
+\r
+ DateTimecodeRangeContainer rangec = new DateTimecodeRangeContainer();\r
+ DateTimecodeRange range = new DateTimecodeRange();\r
+\r
+ long now = System.currentTimeMillis();\r
+ Calendar cal = Calendar.getInstance();\r
+ cal.setTimeInMillis(now);\r
+ cal.add(Calendar.HOUR_OF_DAY, this.rangeForwardHours); //24\r
+\r
+ String fromDateStr = sdf_range.format(new Date(now));\r
+ String toDateStr = sdf_range.format(cal.getTime());\r
+\r
+ //1. SOAP query missing media list\r
+\r
+ range.setStart(fromDateStr); //now "2019-03-26T10:00:00:00"\r
+ range.setEnd(toDateStr); //now + x hours "2019-03-29T10:00:00:00"\r
+ rangec.setDateTimecodeRange(range);\r
+\r
+ MediaUsageListContainer mulc = null;\r
+ try {\r
+ mulc = primaryMarinaAPI.getMediaUsageByUTRange(rangec, false, true);\r
+ } catch (Exception e) {\r
+ logger.error("", e);\r
+ if (secondaryMarinaAPI != null) {\r
+ mulc = secondaryMarinaAPI.getMediaUsageByUTRange(rangec, false, true);\r
+ }\r
+ }\r
+\r
+ MediaUsageList mul = mulc.getMediaUsageList();\r
+\r
+ List<MediaUsage> mediaList = mul.getMediaUsage();\r
+ for (MediaUsage mu : mediaList) {\r
+ if (MediaType.VIDEO.equals(mu.getMediaType()))\r
+ result.add(mu);\r
+ }\r
+ return result;\r
+ }\r
+\r
+}\r
--- /dev/null
+set JAVA_HOME=c:\programs\java\jdk\r
+set JAXWS_HOME=c:\Programs\jaxws-ri\r
+set PATH=c:\programs\java\jdk\bin;%PATH%\r
+wsimport -verbose -b jaxb.xml -p pb.wsclient -keep -extension MarinaAPI.wsdl\r
+:c:\Programs\jaxws-ri\bin\wsimport.bat -verbose -b jaxb.xml -p pb1.wsclient -keep -extension MarinaAPI.wsdl\r
--- /dev/null
+<jaxb:bindings\r
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="1.0">\r
+ <jaxb:bindings schemaLocation="include/MarinaTypes.xsd">\r
+ <jaxb:bindings node="//xs:complexType[@name='audio']/xs:sequence/xs:element[@name='tracks']/xs:complexType">\r
+ <jaxb:factoryMethod name="Audio_Tracks"/>\r
+ </jaxb:bindings>\r
+ </jaxb:bindings>\r
+</jaxb:bindings>\r
+\r
+<!--\r
+<jaxb:bindings\r
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0">\r
+ <jaxb:bindings schemaLocation="include/MarinaTypes.xsd">\r
+ <jaxb:bindings node="//xs:complexType[@name='audio']/xs:sequence/xs:element[@name='tracks']/xs:complexType">\r
+ <jaxb:factoryMethod name="Audio_Tracks"/>\r
+ </jaxb:bindings>\r
+ </jaxb:bindings>\r
+</jaxb:bindings>\r
+\r
+\r
+<jaxws:bindings\r
+ schemaLocation="MarinaAPI.xsd"\r
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"\r
+ xmlns="http://java.sun.com/xml/ns/jaxws"\r
+ xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">\r
+ <enableWrapperStyle>true</enableWrapperStyle>\r
+ <jaxws:bindings schemaLocation="include/MarinaTypes.xsd">\r
+ <jaxws:bindings node="//xs:complexType[@name='audio']/xs:sequence/xs:element[@name='tracks']/xs:complexType">\r
+ <jaxws:factoryMethod name="Audio_Tracks"/>\r
+ </jaxws:bindings>\r
+ </jaxws:bindings>\r
+</jaxws:bindings>\r
+-->
\ No newline at end of file
* <element name="properties" type="{}mediaProperties" minOccurs="0"/>\r
* <element name="mediaInstances" type="{}mediaInstanceList" minOccurs="0"/>\r
* </sequence>\r
- * <attGroup ref="{}mediaBaseAttributes"/>\r
* <attGroup ref="{}mediaKey"/>\r
+ * <attGroup ref="{}mediaBaseAttributes"/>\r
* </restriction>\r
* </complexContent>\r
* </complexType>\r
protected Media.AuxXML auxXML;\r
protected MediaProperties properties;\r
protected MediaInstanceList mediaInstances;\r
+ @XmlAttribute(name = "mediaName", required = true)\r
+ protected String mediaName;\r
+ @XmlAttribute(name = "mediaType", required = true)\r
+ protected MediaType mediaType;\r
@XmlAttribute(name = "title")\r
protected String title;\r
@XmlAttribute(name = "origSOM")\r
protected String lastEventPlayTime;\r
@XmlAttribute(name = "notes")\r
protected String notes;\r
- @XmlAttribute(name = "mediaName", required = true)\r
- protected String mediaName;\r
- @XmlAttribute(name = "mediaType", required = true)\r
- protected MediaType mediaType;\r
\r
/**\r
* Gets the value of the auxXML property.\r
this.mediaInstances = value;\r
}\r
\r
+ /**\r
+ * Gets the value of the mediaName property.\r
+ * \r
+ * @return\r
+ * possible object is\r
+ * {@link String }\r
+ * \r
+ */\r
+ public String getMediaName() {\r
+ return mediaName;\r
+ }\r
+\r
+ /**\r
+ * Sets the value of the mediaName property.\r
+ * \r
+ * @param value\r
+ * allowed object is\r
+ * {@link String }\r
+ * \r
+ */\r
+ public void setMediaName(String value) {\r
+ this.mediaName = value;\r
+ }\r
+\r
+ /**\r
+ * Gets the value of the mediaType property.\r
+ * \r
+ * @return\r
+ * possible object is\r
+ * {@link MediaType }\r
+ * \r
+ */\r
+ public MediaType getMediaType() {\r
+ return mediaType;\r
+ }\r
+\r
+ /**\r
+ * Sets the value of the mediaType property.\r
+ * \r
+ * @param value\r
+ * allowed object is\r
+ * {@link MediaType }\r
+ * \r
+ */\r
+ public void setMediaType(MediaType value) {\r
+ this.mediaType = value;\r
+ }\r
+\r
/**\r
* Gets the value of the title property.\r
* \r
this.notes = value;\r
}\r
\r
- /**\r
- * Gets the value of the mediaName property.\r
- * \r
- * @return\r
- * possible object is\r
- * {@link String }\r
- * \r
- */\r
- public String getMediaName() {\r
- return mediaName;\r
- }\r
-\r
- /**\r
- * Sets the value of the mediaName property.\r
- * \r
- * @param value\r
- * allowed object is\r
- * {@link String }\r
- * \r
- */\r
- public void setMediaName(String value) {\r
- this.mediaName = value;\r
- }\r
-\r
- /**\r
- * Gets the value of the mediaType property.\r
- * \r
- * @return\r
- * possible object is\r
- * {@link MediaType }\r
- * \r
- */\r
- public MediaType getMediaType() {\r
- return mediaType;\r
- }\r
-\r
- /**\r
- * Sets the value of the mediaType property.\r
- * \r
- * @param value\r
- * allowed object is\r
- * {@link MediaType }\r
- * \r
- */\r
- public void setMediaType(MediaType value) {\r
- this.mediaType = value;\r
- }\r
-\r
\r
/**\r
* <p>Java class for anonymous complex type.\r
\r
/**\r
* This class was generated by Apache CXF 3.2.7\r
- * 2019-03-22T10:49:54.043+01:00\r
+ * 2020-06-30T17:06:19.553+02:00\r
* Generated source version: 3.2.7\r
*\r
*/\r
\r
/**\r
* This class was generated by Apache CXF 3.2.7\r
- * 2019-03-22T10:49:54.094+01:00\r
+ * 2020-06-30T17:06:19.566+02:00\r
* Generated source version: 3.2.7\r
*\r
*/\r
--- /dev/null
+Manifest-Version: 1.0\r
+Bundle-SymbolicName: user.peablebeach.api\r
+Export-Package: hu.user.peablebeach.api\r
+Bundle-Name: peablebeach-api\r
+Bundle-Version: 1.0.0\r
+Bundle-ClassPath: libs/,.\r
+Require-Bundle: org.apache.httpcomponents.httpcore,org.apache.httpcomp\r
+ onents.httpclient\r
+Bundle-ManifestVersion: 2\r
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8\r
+Import-Package: org.apache.commons.lang;version="2.6.0",org.apache.log\r
+ ging.log4j;version="2.8.2"\r
+\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<!--\r
+*****************************************************************\r
+# $Logfile: /Marina_1_1_0/source/xml/API/MarinaAPI.wsdl $\r
+# $Revision: 35 $\r
+# $Date: 2014-09-17 16:09:31+01:00 $\r
+# $Author: sarah.wright $ \r
+***************************************************************** \r
+-->\r
+<!-- edited with XMLSpy v2010 rel. 2 (http://www.altova.com) by Pebble Beach Systems Ltd (Pebble Beach Systems Ltd) -->\r
+<wsdl:definitions xmlns:pbs="http://www.pebble.tv/MarinaAPI" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://www.pebble.tv/MarinaAPI">\r
+ <wsdl:types>\r
+ <xsi:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.pebble.tv/MarinaAPI" elementFormDefault="unqualified" attributeFormDefault="unqualified">\r
+ <xsi:import schemaLocation="include/MarinaTypes.xsd"/>\r
+ <xsi:element name="lastModifiedDateTimeRangeContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'lastModifiedDateTimeRange'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="lastModifiedDateTimeRange" type="lastModifiedDateTimeRange"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:simpleType name="eventIdType">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The event id type can only be one of the valid listed types used in retrieval of events.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:minLength value="1"/>\r
+ <xsi:maxLength value="32"/>\r
+ <xsi:enumeration value="SERVER_UID"/>\r
+ <xsi:enumeration value="POSITION"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ <xsi:simpleType name="eventIdPositionEnum">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Valid position enums that can be used in an event id for event retrieval.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:enumeration value="FIRST"/>\r
+ <xsi:enumeration value="LAST"/>\r
+ <xsi:enumeration value="FOCUS"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ <xsi:simpleType name="eventIdValue" final="union">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The event id value can either be a specific UID or position enum.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:union memberTypes="pbs:eventIdPositionEnum xsi:integer"/>\r
+ </xsi:simpleType>\r
+ <xsi:simpleType name="PlaylistEventXMLConfigurableFields">\r
+ <xsi:annotation>\r
+ <xsi:documentation>One or more of the configurable fields can be set.and are used to retrieve extra config information</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:enumeration value="ESTIMATED_START_TIME"/>\r
+ <xsi:enumeration value="SCHEDULED_START_TIME"/>\r
+ <xsi:enumeration value="START_TIME_STATE"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ <xsi:simpleType name="configType">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Specifies the component to retrieve the extra config from</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:enumeration value="PLAYLIST_EVENT_XML"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ <xsi:complexType name="eventId">\r
+ <xsi:attribute name="type" type="pbs:eventIdType" use="required"/>\r
+ <xsi:attribute name="value" type="pbs:eventIdValue" use="required"/>\r
+ </xsi:complexType>\r
+ <xsi:element name="configRequestListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container that encapsulates the request to "get config" message to send to API</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="configRequestList">\r
+ <xsi:complexType>\r
+ <xsi:all>\r
+ <xsi:element name="configType" type="pbs:configType"/>\r
+ </xsi:all>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="config">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container encapsulating the request to set config and response to the "getConfig" </xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:all>\r
+ <xsi:element name="playListEventXML">\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="enabledFields">\r
+ <xsi:complexType>\r
+ <xsi:choice maxOccurs="unbounded">\r
+ <xsi:element name="field" type="pbs:PlaylistEventXMLConfigurableFields" maxOccurs="unbounded"/>\r
+ </xsi:choice>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:all>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaMetadataContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'media'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="configContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'config'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:all>\r
+ <xsi:element ref="pbs:config"/>\r
+ </xsi:all>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaUsageListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'mediaUsageList'</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="mediaUsageList" type="mediaUsageList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="deleteMediaInstanceContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'deleteMedia'</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="deleteMedia" type="deleteMedia"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaKeyContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'media'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaUsageMediaKeyContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'media'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="deleteMediaInstanceKeyContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'media'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="dateTimecodeRangeContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'dateTimecodeRange'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="dateTimecodeRange" type="dateTimecodeRange"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="jobStateDateTimecodeRangeContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'dateTimecodeRange'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="dateTimecodeRange" type="dateTimecodeRange"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="scheduledJobStateDateTimecodeRangeContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'dateTimecodeRange'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="dateTimecodeRange" type="dateTimecodeRange"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaUsageContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'mediaUsage'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="mediaUsage" type="mediaUsage"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="mediaInstanceKeyContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'MediaInstance'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media">\r
+ <xsi:complexType>\r
+ <xsi:all>\r
+ <xsi:element name="mediaInstance" type="mediaInstance"/>\r
+ </xsi:all>\r
+ <xsi:attribute name="mediaName" type="xsi:string"></xsi:attribute>\r
+ <xsi:attribute name="mediaType" type="xsi:string"></xsi:attribute>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="bAvailableMedia" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Used to return information on available media.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="bUnavailableMedia" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Used to return information on unavailable media.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nHeartbeatId" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Heartbeat id used to track heartbeat responses.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="strListName" type="xsi:string">\r
+ <xsi:annotation>\r
+ <xsi:documentation>String used to hold list name for list query commands. Can also be a channel name from which the active list will be used.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventCount" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event count of queried lists or number of events to return.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventCountDeleted" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event count of queried lists or number of events to return.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventCountNonQueried" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event count of queried lists or number of events to return.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventCountNoAuxXml" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event count of queried events with no aux xml to return.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="eventContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'playlistPrimaryEvent'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="event" type="playlistPrimaryEvent"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="nEventPosition" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Position of the event to query.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nEventKey" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Key of the event to query.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="eventListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container for an event list.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="eventList" type="playlistPrimaryEventList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="jobContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'job'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="job" type="job"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="scheduledJobContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'scheduled job'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="job" type="scheduledJob"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="nJobId" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Id of an automation job.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nScheduledJobId" type="xsi:int">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Id of a scheduled automation job.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="bMoreEventsAvailable" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Flag used to indicate there are more events after the last event in an event list returned by a call that returns multiple events.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="eventId" type="pbs:eventId">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Event id used to retrieve events.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="nextEventId" type="pbs:eventId">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Next event id returned by command.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="eventIdList">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of event ids.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventId" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="eventIdListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for an event id list.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventIdList" minOccurs="0"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="eventIdListContainerDeleted">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container for an event id list for events that have been deleted.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventIdList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="eventIdListContainerNonQueried">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container for an event id list for events that have not been queried.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventIdList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="bIncludeChildEvents" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>For events that return event XML set this flag to true for child events to be returned.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="componentTagContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to type 'componentTag'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="componentTag" type="componentTag"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="bIncludeUnhostedComponents" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>For events that return component information set this flag to true to include active objects that aren't hosted.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="componentListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Conforms to complex type 'componentList'.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="componentList" type="componentList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="eventUpdateType">\r
+ <xsi:annotation>\r
+ <xsi:documentation>An enumeration of different update types performed on an event.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:simpleType>\r
+ <xsi:restriction base="xsi:string">\r
+ <xsi:minLength value="1"/>\r
+ <xsi:maxLength value="32"/>\r
+ <xsi:enumeration value="Insert"/>\r
+ <xsi:enumeration value="Update"/>\r
+ <xsi:enumeration value="Delete"/>\r
+ </xsi:restriction>\r
+ </xsi:simpleType>\r
+ </xsi:element>\r
+ <xsi:element name="getContiguousListEventsOutput">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Object containing all parameters returned by the getContiguousListEvents method.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:nEventCount">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the event list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:eventListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of events returned using the passed in query parameters.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:bMoreEventsAvailable">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A flag to indicate whether there are more events available after the last event returned in the event list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nextEventId" minOccurs="0">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The event id key for the next event in the list after the last event contained in the event list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getNonContiguousListEventsOutput">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Object containing all parameters returned by the getNonContiguousListEvents method.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of events returned using the passed in query parameters.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nEventCount">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the event list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:eventIdListContainerDeleted">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of event id's for events that have been deleted from the list of events to query.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nEventCountDeleted">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the deleted events event id list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:eventIdListContainerNonQueried">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of event id's for events that were not queried this will always be a subset of the list of event id's passed in to query.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nEventCountNonQueried">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the non-queried events event id list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getListEventChangesOutput">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Object containing all parameters returned by the getListEventChanges method.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventIdListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>A list of event id's for events that have changed and meet the filters provided.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element ref="pbs:nEventCount">\r
+ <xsi:annotation>\r
+ <xsi:documentation>The number of events contained in the returned event id list container.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getListEventChangesAuxXMLOutput">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Object containing all parameters returned by the getListEventChangesAuxXML method.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element ref="pbs:eventListContainer"/>\r
+ <xsi:element ref="pbs:nEventCount"/>\r
+ <xsi:element ref="pbs:eventIdListContainer"/>\r
+ <xsi:element ref="pbs:nEventCountNoAuxXml"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="bIncludeEmptyAuxXmlEvents" type="xsi:boolean">\r
+ <xsi:annotation>\r
+ <xsi:documentation>When set to true we return back to the caller a list of all events that contained no aux xml.</xsi:documentation>\r
+ </xsi:annotation>\r
+ </xsi:element>\r
+ <xsi:element name="mediaListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a list of media items.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element minOccurs="1" name="mediaList" maxOccurs="1" type="mediaList"/>\r
+ <xsi:element type="moreResults" minOccurs="1" maxOccurs="1" name="moreResults"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="jobListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a list of jobs.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element minOccurs="1" name="jobList" maxOccurs="1" type="jobList"/>\r
+ <xsi:element type="moreResults" minOccurs="1" maxOccurs="1" name="moreResults"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="scheduledJobListContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a list of scheduled jobs.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element minOccurs="1" name="jobList" maxOccurs="1" type="scheduledJobList"/>\r
+ <xsi:element type="moreResults" minOccurs="1" maxOccurs="1" name="moreResults"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getJobsForMediaRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a media item relating to jobs.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getScheduledJobsForMediaRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for a media item relating to scheduled jobs.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="media" type="media"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element> \r
+ <xsi:element name="getJobRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for the get job request.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="job" type="job"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getScheduledJobRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for the get scheduled job request.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="job" type="scheduledJob"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getCustomViewRequestContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Container element for the get Custom View request.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element name="marinaCustomAPI">\r
+ <xsi:complexType>\r
+ <xsi:attribute name="view" type="xsi:string" use="required"></xsi:attribute>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ <xsi:element name="getCustomViewResponseContainer">\r
+ <xsi:annotation>\r
+ <xsi:documentation>Contains a list of media from the get Custom View request.</xsi:documentation>\r
+ </xsi:annotation>\r
+ <xsi:complexType>\r
+ <xsi:sequence>\r
+ <xsi:element minOccurs="1" name="mediaList" maxOccurs="1" type="mediaList"/>\r
+ </xsi:sequence>\r
+ </xsi:complexType>\r
+ </xsi:element>\r
+ </xsi:schema>\r
+ </wsdl:types>\r
+ <wsdl:message name="insertUpdateMediaMetadataRequest">\r
+ <wsdl:part name="metadata" element="pbs:mediaMetadataContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateMediaMetadataResponse"/>\r
+ <wsdl:message name="getMediaMetadataRequest">\r
+ <wsdl:part name="mediaKey" element="pbs:mediaKeyContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaMetadataResponse">\r
+ <wsdl:part name="metadata" element="pbs:mediaMetadataContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaInstanceMetadataRequest">\r
+ <wsdl:part name="mediaKey" element="pbs:mediaInstanceKeyContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaInstanceMetadataResponse">\r
+ <wsdl:part name="metadata" element="pbs:mediaMetadataContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaMetadataChangedRequest">\r
+ <wsdl:part name="range" element="pbs:lastModifiedDateTimeRangeContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaMetadataChangedResponse">\r
+ <wsdl:part name="metadata" element="pbs:mediaListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaUsageRequest">\r
+ <wsdl:part name="mediaKey" element="pbs:mediaUsageMediaKeyContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaUsageResponse">\r
+ <wsdl:part name="mediaUsage" element="pbs:mediaUsageContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaUsageByUTRangeRequest">\r
+ <wsdl:part name="range" element="pbs:dateTimecodeRangeContainer"/>\r
+ <wsdl:part name="availableMedia" element="pbs:bAvailableMedia"/>\r
+ <wsdl:part name="unavailableMedia" element="pbs:bUnavailableMedia"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getMediaUsageByUTRangeResponse">\r
+ <wsdl:part name="mediaUsageList" element="pbs:mediaUsageListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteMediaInstanceRequest">\r
+ <wsdl:part name="mediaKey" element="pbs:deleteMediaInstanceKeyContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteMediaInstanceResponse">\r
+ <wsdl:part name="deleteMediaInstanceContainer" element="pbs:deleteMediaInstanceContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="heartbeatRequest">\r
+ <wsdl:part name="Id" element="pbs:nHeartbeatId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="heartbeatResponse">\r
+ <wsdl:part name="Id" element="pbs:nHeartbeatId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="listGetEventCountRequest">\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="listGetEventCountResponse">\r
+ <wsdl:part name="eventCount" element="pbs:nEventCount"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventRequest">\r
+ <wsdl:part name="eventKey" element="pbs:eventId"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ <wsdl:part name="includeChildEvents" element="pbs:bIncludeChildEvents"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventResponse">\r
+ <wsdl:part name="queriedPlaylistPrimaryEvent" element="pbs:eventContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getContiguousListEventsRequest">\r
+ <wsdl:part name="eventCount" element="pbs:nEventCount"/>\r
+ <wsdl:part name="eventKey" element="pbs:eventId"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ <wsdl:part name="includeChildEvents" element="pbs:bIncludeChildEvents"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getContiguousListEventsResponse">\r
+ <wsdl:part name="getContiguousListEventsOutput" element="pbs:getContiguousListEventsOutput"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventChangesRequest">\r
+ <wsdl:part name="eventTypeFilter" element="pbs:eventUpdateType"/>\r
+ <wsdl:part name="range" element="pbs:dateTimecodeRangeContainer"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventChangesResponse">\r
+ <wsdl:part name="getListEventChangesOutput" element="pbs:getListEventChangesOutput"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateJobRequest">\r
+ <wsdl:part name="job" element="pbs:jobContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateJobResponse">\r
+ <wsdl:part name="jobId" element="pbs:nJobId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateScheduledJobRequest">\r
+ <wsdl:part name="job" element="pbs:scheduledJobContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="insertUpdateScheduledJobResponse">\r
+ <wsdl:part name="jobId" element="pbs:nScheduledJobId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteJobRequest">\r
+ <wsdl:part name="jobId" element="pbs:nJobId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteJobResponse"/>\r
+ <wsdl:message name="deleteScheduledJobRequest">\r
+ <wsdl:part name="jobId" element="pbs:nScheduledJobId"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="deleteScheduledJobResponse"/>\r
+ <wsdl:message name="getComponentListResponse">\r
+ <wsdl:part name="componentList" element="pbs:componentListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getComponentListRequest">\r
+ <wsdl:part name="componentTag" element="pbs:componentTagContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getNonContiguousListEventsRequest">\r
+ <wsdl:part name="eventIdList" element="pbs:eventIdListContainer"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ <wsdl:part name="includeChildEvents" element="pbs:bIncludeChildEvents"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getNonContiguousListEventsResponse">\r
+ <wsdl:part name="getNonContiguousListEventsOutput" element="pbs:getNonContiguousListEventsOutput"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventChangesAuxXMLRequest">\r
+ <wsdl:part name="includeEmptyAuxXmlEvents" element="pbs:bIncludeEmptyAuxXmlEvents"/>\r
+ <wsdl:part name="eventIdList" element="pbs:eventIdListContainer"/>\r
+ <wsdl:part name="listName" element="pbs:strListName"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getListEventChangesAuxXMLResponse">\r
+ <wsdl:part name="getListEventChangesAuxXMLOutput" element="pbs:getListEventChangesAuxXMLOutput"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="setConfigurationRequest">\r
+ <wsdl:part name="setConfig" element="pbs:configContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="setConfigurationResponse"/>\r
+ <wsdl:message name="getConfigurationRequest">\r
+ <wsdl:part name="Config" element="pbs:configRequestListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getConfigurationResponse">\r
+ <wsdl:part name="config" element="pbs:configContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobStateChangesRequest">\r
+ <wsdl:part name="range" element="pbs:jobStateDateTimecodeRangeContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobStateChangesResponse">\r
+ <wsdl:part name="jobList" element="pbs:jobListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobStateChangesRequest">\r
+ <wsdl:part name="range" element="pbs:scheduledJobStateDateTimecodeRangeContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobStateChangesResponse">\r
+ <wsdl:part name="jobList" element="pbs:scheduledJobListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobsForMediaRequest">\r
+ <wsdl:part name="media" element="pbs:getJobsForMediaRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobsForMediaResponse">\r
+ <wsdl:part name="jobListContainer" element="pbs:jobListContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobsForMediaRequest">\r
+ <wsdl:part name="media" element="pbs:getScheduledJobsForMediaRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobsForMediaResponse">\r
+ <wsdl:part name="scheduledJobListContainer" element="pbs:scheduledJobListContainer"/>\r
+ </wsdl:message> \r
+ <wsdl:message name="getJobRequest">\r
+ <wsdl:part name="job" element="pbs:getJobRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getJobResponse">\r
+ <wsdl:part name="job" element="pbs:jobContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobRequest">\r
+ <wsdl:part name="job" element="pbs:getScheduledJobRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getScheduledJobResponse">\r
+ <wsdl:part name="job" element="pbs:scheduledJobContainer"/>\r
+ </wsdl:message> \r
+ <wsdl:message name="getCustomViewRequest">\r
+ <wsdl:part name="marinaCustomAPI" element="pbs:getCustomViewRequestContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:message name="getCustomViewResponse">\r
+ <wsdl:part name="mediaList" element="pbs:getCustomViewResponseContainer"/>\r
+ </wsdl:message>\r
+ <wsdl:portType name="PBSMarinaAPI">\r
+ <wsdl:operation name="insertUpdateMediaMetadata">\r
+ <wsdl:documentation>Inserts or updates media and/or media instance metadata in the marina database.</wsdl:documentation>\r
+ <wsdl:input message="pbs:insertUpdateMediaMetadataRequest"/>\r
+ <wsdl:output message="pbs:insertUpdateMediaMetadataResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaMetadata">\r
+ <wsdl:documentation>Returns metadata for the specified media/media instances. See definition of pbs:media. \r
+The media key must be specified and optionally media instance keys (mediaSets). \r
+If no media instances are requested, metadata for all instances are returned.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getMediaMetadataRequest"/>\r
+ <wsdl:output message="pbs:getMediaMetadataResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaUsage">\r
+ <wsdl:documentation>Returns playout usage of the specified media. \r
+The media key must be specified and optionally media instance keys (media sets). \r
+If no instances are specified the usage of all instances of that media are returned.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getMediaUsageRequest"/>\r
+ <wsdl:output message="pbs:getMediaUsageResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaUsageByUTRange">\r
+ <wsdl:documentation>Returns the playout usage for all media within a specified timecode range.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getMediaUsageByUTRangeRequest"/>\r
+ <wsdl:output message="pbs:getMediaUsageByUTRangeResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="heartbeat">\r
+ <wsdl:documentation>The heartbeat ID is client generated and is echoed back to the caller by the PBS API.</wsdl:documentation>\r
+ <wsdl:input message="pbs:heartbeatRequest"/>\r
+ <wsdl:output message="pbs:heartbeatResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventCount">\r
+ <wsdl:input message="pbs:listGetEventCountRequest"/>\r
+ <wsdl:output message="pbs:listGetEventCountResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEvent">\r
+ <wsdl:documentation>Returns the 'event' event with the queried event id and list.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getListEventRequest"/>\r
+ <wsdl:output message="pbs:getListEventResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getContiguousListEvents">\r
+ <wsdl:documentation>Returns the 'playlistPrimaryEvent' event with an event id of 'eventKey' including the \r
+next 'nEventCount' events in an 'eventList'.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getContiguousListEventsRequest"/>\r
+ <wsdl:output message="pbs:getContiguousListEventsResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getNonContiguousListEvents">\r
+ <wsdl:documentation>Returns a list of events specified in 'eventIdList'.\r
+Deleted/missing events are returned in the 'deletedEvents' eventIdList.\r
+If more events are queried than the maximum configured amount then non-queried \r
+events are returned in the 'nonQueriedEvents' eventIdList getNonContiguousListEvents\r
+can then be called again passing in the list. When this list is empty all events were \r
+queried.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getNonContiguousListEventsRequest"/>\r
+ <wsdl:output message="pbs:getNonContiguousListEventsResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventChanges">\r
+ <wsdl:documentation>Returns a list of event ids for all events that have changed in the specified list \r
+between the specified dates/times filtered by an event type.\r
+Note: It is possible this method will return more events than is supported by\r
+getNonContiguousListEvents.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getListEventChangesRequest"/>\r
+ <wsdl:output message="pbs:getListEventChangesResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getComponentList">\r
+ <wsdl:documentation>Returns a list of components that meet the filter requirements.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getComponentListRequest"/>\r
+ <wsdl:output message="pbs:getComponentListResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="insertUpdateJob">\r
+ <wsdl:documentation>Returns the job id of the created/updated job on success.\r
+Note: You must send the job uid on an update.</wsdl:documentation>\r
+ <wsdl:input message="pbs:insertUpdateJobRequest"/>\r
+ <wsdl:output message="pbs:insertUpdateJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="insertUpdateScheduledJob">\r
+ <wsdl:documentation>\r
+ Returns the job id of the created/updated scheduled job on success.\r
+ Note: You must send the job uid on an update.\r
+ </wsdl:documentation>\r
+ <wsdl:input message="pbs:insertUpdateScheduledJobRequest"/>\r
+ <wsdl:output message="pbs:insertUpdateScheduledJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteJob">\r
+ <wsdl:documentation>Delete a job using the id returned by 'insertUpdateJob'.</wsdl:documentation>\r
+ <wsdl:input message="pbs:deleteJobRequest"/>\r
+ <wsdl:output message="pbs:deleteJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteScheduledJob">\r
+ <wsdl:documentation>Delete a job using the id returned by 'insertUpdateJob'.</wsdl:documentation>\r
+ <wsdl:input message="pbs:deleteScheduledJobRequest"/>\r
+ <wsdl:output message="pbs:deleteScheduledJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteMediaInstance">\r
+ <wsdl:documentation>Delete a media instance (or multiple media instances). \r
+The media key must be specified and optionally media instance keys (media sets). \r
+If no instances are specified, all instances of that media will be deleted from all the media sets.</wsdl:documentation>\r
+ <wsdl:input message="pbs:deleteMediaInstanceRequest"/>\r
+ <wsdl:output message="pbs:deleteMediaInstanceResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventChangesAuxXML">\r
+ <wsdl:documentation>Return the updated jobs database auxillary XML. At the moment this is just used for\r
+returning reconcile keys for a given list of deleted event UIDs. Events with no aux \r
+xml stored for them can be returned by setting the include empty aux xml events flag\r
+and will be returned in an event id list.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getListEventChangesAuxXMLRequest"/>\r
+ <wsdl:output message="pbs:getListEventChangesAuxXMLResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="setConfiguration">\r
+ <wsdl:input message="pbs:setConfigurationRequest"/>\r
+ <wsdl:output message="pbs:setConfigurationResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getConfiguration">\r
+ <wsdl:input message="pbs:getConfigurationRequest"/>\r
+ <wsdl:output message="pbs:getConfigurationResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaMetadataChanged">\r
+ <wsdl:input message="pbs:getMediaMetadataChangedRequest"/>\r
+ <wsdl:output message="pbs:getMediaMetadataChangedResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJobStateChanges">\r
+ <wsdl:documentation>Returns a job list of all jobs whose state has changed between the dates/times.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getJobStateChangesRequest"/>\r
+ <wsdl:output message="pbs:getJobStateChangesResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJobStateChanges">\r
+ <wsdl:documentation>Returns a job list of all scheduled jobs whose state has changed between the dates/times.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getScheduledJobStateChangesRequest"/>\r
+ <wsdl:output message="pbs:getScheduledJobStateChangesResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJobsForMedia">\r
+ <wsdl:documentation>Returns a list of all the automation jobs and their current state relating to the media.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getJobsForMediaRequest"/>\r
+ <wsdl:output message="pbs:getJobsForMediaResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJobsForMedia">\r
+ <wsdl:documentation>Returns a list of all the scheduled jobs and their current state relating to the media.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getScheduledJobsForMediaRequest"/>\r
+ <wsdl:output message="pbs:getScheduledJobsForMediaResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJob">\r
+ <wsdl:documentation>Returns the job with the queried job id and type.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getJobRequest"/>\r
+ <wsdl:output message="pbs:getJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJob">\r
+ <wsdl:documentation>Returns the scheduled job with the queried job id and type.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getScheduledJobRequest"/>\r
+ <wsdl:output message="pbs:getScheduledJobResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaInstanceMetadata">\r
+ <wsdl:documentation>Returns metadata for the specified media instance. See definition of pbs:mediaInstance. \r
+The media key must be specified and optionally media instance keys (mediaSets). \r
+If no media instances are requested, metadata for all instances are returned.</wsdl:documentation>\r
+ <wsdl:input message="pbs:getMediaInstanceMetadataRequest"/>\r
+ <wsdl:output message="pbs:getMediaInstanceMetadataResponse"/>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getCustomView">\r
+ <wsdl:documentation>Returns a medialist of rows returned by the specified custom view</wsdl:documentation>\r
+ <wsdl:input message="pbs:getCustomViewRequest"/>\r
+ <wsdl:output message="pbs:getCustomViewResponse"/>\r
+ </wsdl:operation>\r
+ </wsdl:portType>\r
+ <wsdl:binding name="PBSMarinaAPIBindingSOAP" type="pbs:PBSMarinaAPI">\r
+ <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>\r
+ <wsdl:operation name="insertUpdateMediaMetadata">\r
+ <soap12:operation soapAction="/insertUpdateMediaMetadata" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaMetadata">\r
+ <soap12:operation soapAction="/getMediaMetadata" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaUsage">\r
+ <soap12:operation soapAction="/getMediaUsage" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaUsageByUTRange">\r
+ <soap12:operation soapAction="/getMediaUsageByUTRange" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteMediaInstance">\r
+ <soap12:operation soapAction="/deleteMediaInstance" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="heartbeat">\r
+ <soap12:operation soapAction="/heartbeat" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventCount">\r
+ <soap12:operation soapAction="/getListEventCount" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEvent">\r
+ <soap12:operation soapAction="/getListEvent" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getContiguousListEvents">\r
+ <soap12:operation soapAction="/getContiguousListEvents" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getNonContiguousListEvents">\r
+ <soap12:operation soapAction="/getNonContiguousListEvents" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventChanges">\r
+ <soap12:operation soapAction="/getListEventChanges" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getComponentList">\r
+ <soap12:operation soapAction="/getComponentList" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="insertUpdateJob">\r
+ <soap12:operation soapAction="/insertUpdateJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="insertUpdateScheduledJob">\r
+ <soap12:operation soapAction="/insertUpdateScheduledJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteJob">\r
+ <soap12:operation soapAction="/deleteJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="deleteScheduledJob">\r
+ <soap12:operation soapAction="/deleteScheduledJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getListEventChangesAuxXML">\r
+ <soap12:operation soapAction="/getListEventChangesAuxXML" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="setConfiguration">\r
+ <soap12:operation soapAction="/setConfiguration" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getConfiguration">\r
+ <soap12:operation soapAction="/getConfiguration" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaMetadataChanged">\r
+ <soap12:operation soapAction="/getMediaMetadataChanged" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJobStateChanges">\r
+ <soap12:operation soapAction="/getJobStateChanges" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJobStateChanges">\r
+ <soap12:operation soapAction="/getScheduledJobStateChanges" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJobsForMedia">\r
+ <soap12:operation soapAction="/getJobsForMedia" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJobsForMedia">\r
+ <soap12:operation soapAction="/getScheduledJobsForMedia" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getJob">\r
+ <soap12:operation soapAction="/getJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getScheduledJob">\r
+ <soap12:operation soapAction="/getScheduledJob" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getMediaInstanceMetadata">\r
+ <soap12:operation soapAction="/getMediaInstanceMetadata" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ <wsdl:operation name="getCustomView">\r
+ <soap12:operation soapAction="/getCustomView" soapActionRequired="true"/>\r
+ <wsdl:input>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:input>\r
+ <wsdl:output>\r
+ <soap12:body use="literal"/>\r
+ </wsdl:output>\r
+ </wsdl:operation>\r
+ </wsdl:binding>\r
+ <wsdl:service name="PBSMarinaAPIService">\r
+ <wsdl:port name="PBSMarinaAPISOAPPort" binding="pbs:PBSMarinaAPIBindingSOAP">\r
+ <soap12:address location="http://127.0.0.1:18083"/>\r
+ </wsdl:port>\r
+ </wsdl:service>\r
+</wsdl:definitions>\r
+<!--\r
+*****************************************************************\r
+# $History: /Marina_1_1_0/source/xml/API/MarinaAPI.wsdl $\r
+# \r
+# ****************** Version 35 ****************** \r
+# User: sarah.wright Date: 2014-09-17 Time: 16:09:31+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Added new API function called getMediaInstanceMetadata \r
+# \r
+# ****************** Version 34 ****************** \r
+# User: Edward.Thurman Date: 2014-07-18 Time: 17:38:19+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# getJobForMedia and getScheduledJobForMedia commands added to retrieve jobs \r
+# of a particular media name and type, and getJob and getScheduledJob \r
+# commands added to retrieve the queried job details. \r
+# \r
+# ****************** Version 33 ****************** \r
+# User: Edward.Thurman Date: 2014-06-20 Time: 15:53:23+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Removed a duplicate message definition that was causing the wsdl to fail \r
+# validation. \r
+# \r
+# ****************** Version 32 ****************** \r
+# User: ignazio.castrogiovanni Date: 2014-03-29 Time: 09:33:13+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# XML changes for the inserUpdateScheduledJob API \r
+# \r
+# ****************** Version 31 ****************** \r
+# User: Edward.Thurman Date: 2014-03-27 Time: 17:25:56+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Added state change notifications for automated and scheduled jobs, in \r
+# addition to the API getters for such state changes. \r
+# \r
+# ****************** Version 30 ****************** \r
+# User: jose.valencia Date: 2013-11-21 Time: 15:31:42+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Added a new deleteMediaInstance operation. \r
+# \r
+# ****************** Version 29 ****************** \r
+# User: michael.cullen Date: 2013-10-17 Time: 17:00:47+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# MAR-6685 - getMediaMetadataChanged fixes \r
+# \r
+# ****************** Version 28 ****************** \r
+# User: jacopo.vezzosi Date: 2013-07-03 Time: 09:24:25+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/API \r
+# Additional command getMediaMetadataChanged supported in the API for \r
+# MediaGenix. \r
+# \r
+# ****************** Version 26 ****************** \r
+# User: james.mbowa Date: 2012-08-23 Time: 16:16:06+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Added two new function getConfiguration and setConfiguration. bug No. 12712 \r
+# \r
+# ****************** Version 25 ****************** \r
+# User: phil.lee Date: 2012-05-25 Time: 11:01:49+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Changed an event UID from an xs:int to an xs:integer to allow for a 64 bit \r
+# number. \r
+# \r
+# ****************** Version 24 ****************** \r
+# User: phil.lee Date: 2011-11-03 Time: 15:48:22+00:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Added new getListEventChangesAuxXML function. \r
+# \r
+# ****************** Version 23 ****************** \r
+# User: phil.lee Date: 2011-06-27 Time: 10:02:38+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated the following schema types getContiguousListEventsOutput, \r
+# getNonContiguousListEventsOutput and getListEventChangesOutput to bring \r
+# in-line with the API responses. All return types should now validate \r
+# against the schema types. \r
+# \r
+# ****************** Version 22 ****************** \r
+# User: peter.brown Date: 2011-06-20 Time: 16:18:12+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# fixed urn#: soap actions for getNonContiguouseveents and deleteJob commands \r
+# \r
+# ****************** Version 21 ****************** \r
+# User: phil.lee Date: 2011-06-20 Time: 15:10:42+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Renamed parameter 1 on the method getContiguousListEvents from \r
+# getContiguousListEventsInput to eventCount. \r
+# \r
+# ****************** Version 20 ****************** \r
+# User: phil.lee Date: 2011-06-17 Time: 13:06:15+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated so that input parameters are not longer stored in one type. Added a \r
+# new type nextEventId to prevent any confusion. \r
+# \r
+# ****************** Version 19 ****************** \r
+# User: phil.lee Date: 2011-06-10 Time: 14:55:32+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated after changes to make API work with VS .NET. \r
+# \r
+# ****************** Version 18 ****************** \r
+# User: phil.lee Date: 2011-06-09 Time: 11:38:03+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated to use SOAP v1.2. \r
+# \r
+# ****************** Version 17 ****************** \r
+# User: phil.lee Date: 2011-05-23 Time: 11:02:39+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Renamed Holder to Container. \r
+# \r
+# ****************** Version 16 ****************** \r
+# User: phil.lee Date: 2011-05-19 Time: 16:15:29+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Update getNonContiguousListEvents method so that the return parameters were \r
+# unique types in order to get gSoap code to compile. \r
+# \r
+# ****************** Version 15 ****************** \r
+# User: phil.lee Date: 2011-05-18 Time: 10:21:34+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# First pass of the Marina API upgrade. Still to be finished \r
+# getNonContiguousListEvents, getListEventChanges, insertUpdateJob and \r
+# deleteJob. There is some configuration options, currently hardcoded, to be \r
+# added as well. \r
+# \r
+# ****************** Version 14 ****************** \r
+# User: phil.lee Date: 2010-10-21 Time: 10:12:30+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Updated to put all messages and types in a 'pbs' namespace. \r
+# \r
+# ****************** Version 13 ****************** \r
+# User: peter.brown Date: 2010-09-16 Time: 10:34:34+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 12 ****************** \r
+# User: peter.brown Date: 2010-09-14 Time: 16:03:26+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# simple reformatted some of the annotations so the diagrams look prettier \r
+# when auto generated. \r
+# \r
+# ****************** Version 11 ****************** \r
+# User: phil.lee Date: 2010-09-13 Time: 16:48:16+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 10 ****************** \r
+# User: phil.lee Date: 2010-09-13 Time: 16:06:18+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# Added new Heartbeat method to WSDL file. \r
+# \r
+# ****************** Version 9 ****************** \r
+# User: phil.lee Date: 2010-05-19 Time: 15:50:43+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 8 ****************** \r
+# User: phil.lee Date: 2010-05-19 Time: 12:25:55+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 7 ****************** \r
+# User: phil.lee Date: 2010-05-12 Time: 17:13:44+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 6 ****************** \r
+# User: phil.lee Date: 2010-04-19 Time: 16:53:46+01:00 \r
+# Updated in: /Marina/source/xml/API \r
+# \r
+# ****************** Version 4 ****************** \r
+# User: paul.hatcher Date: 2010-03-22 Time: 18:36:54+00:00 \r
+# Updated in: /Marina/source/xml/API \r
+*****************************************************************\r
+-->\r
--- /dev/null
+set JAVA_HOME=c:\programs\java\jdk\r
+set PATH=c:\programs\java\jdk\bin;%PATH%\r
+:c:\programs\apache-cxf-3.2.7\bin\wsdl2java -b jaxb.xml -p pb.wsclient -keep MarinaAPI.wsdl\r
+c:\programs\apache-cxf-3.2.7\bin\wsdl2java -p pb.wsclient -b jaxb.xml -client -exsh false -dns true -dex true -verbose -keep MarinaAPI.wsdl\r
--- /dev/null
+set JAVA_HOME=c:\programs\java\jdk\r
+set JAXWS_HOME=c:\Programs\jaxws-ri\r
+set PATH=c:\programs\java\jdk\bin;%PATH%\r
+wsimport -verbose -b jaxb.xml -p pb.wsclient -keep -extension MarinaAPI.wsdl\r
+:c:\Programs\jaxws-ri\bin\wsimport.bat -verbose -b jaxb.xml -p pb1.wsclient -keep -extension MarinaAPI.wsdl\r
--- /dev/null
+<!-- edited with XMLSpy v2016 rel. 2 sp1 (x64) (http://www.altova.com) by Duncan Browne (Pebble Beach Systems Ltd) -->\r
+<!--\r
+*****************************************************************\r
+# $Logfile: /Marina_1_1_0/source/xml/include/MarinaTypes.xsd $\r
+# $Revision: 134 $\r
+# $Date: 2017-04-05 11:00:00+00:00 $\r
+# $Author: Edward.Thurman $ \r
+***************************************************************** \r
+\r
+*****************************************************************\r
+# $History: /Marina_1_1_0/source/xml/include/MarinaTypes.xsd $\r
+#\r
+# ****************** Version 137 ****************** \r
+# User: Javier.Torres Date: 2017-10-06 Time: 12:00:00+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Fixed incompatibilities with current version of SQL Server.\r
+# cgProperties reworked and auxDataProperties type removed.\r
+#\r
+# ****************** Version 136 ****************** \r
+# User: Javier.Torres Date: 2017-10-05 Time: 16:00:00+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added status and timecode into playlist properties.\r
+#\r
+# ****************** Version 135 ****************** \r
+# User: Filipe.Oliveira Date: 2017-08-04 Time: 14:00:00+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added new fields deleteMediaRecord and crossDomain in delete\r
+# and also added field directoryId in mediaInstance.\r
+#\r
+# ****************** Version 134 ****************** \r
+# User: Edward.Thurman Date: 2017-04-05 Time: 11:00:00+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Updating the documented creationTime format to YYYY-MM-DDTHH:MM:SS.\r
+#\r
+# ****************** Version 133 ****************** \r
+# User: Edward.Thurman Date: 2017-03-03 Time: 10:00:00+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Updated automationStateType enums to replace deprecated values\r
+# with the new values used in Marina.\r
+#\r
+# ****************** Version 132 ****************** \r
+# User: Edward.Thurman Date: 2016-12-13 Time: 17:00:00+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added the 'None' enum value to the Subtitle Caption Mode.\r
+#\r
+# ****************** Version 131 ****************** \r
+# User: Ammar.Alkadi Date: 2016-10-03 Time: 10:00:00+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added new field alternateId in mediaBaseAttributes.\r
+# \r
+# ****************** Version 130 ****************** \r
+# User: Matt.Davis Date: 2016-08-16 Time: 10:00:00+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added new data type for three part animations.\r
+#\r
+# ****************** Version 129 ****************** \r
+# User: Sarah.Wright Date: 2016-07-08 Time: 10:00:00+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Updated the datatype of attribute NativeSize to be an unsigned long (unsigned 64 bit)\r
+# Updated xsd's for the new audio format.\r
+#\r
+# ****************** Version 128 ****************** \r
+# User: Edward.Thurman Date: 2016-03-24 Time: 15:31:47+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added the setting attribute to subtitle properties. \r
+# \r
+# ****************** Version 127 ****************** \r
+# User: Edward.Thurman Date: 2015-01-05 Time: 10:56:47+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added eventPlayCount to media attributes. \r
+# \r
+# ****************** Version 126 ****************** \r
+# User: Edward.Thurman Date: 2014-11-12 Time: 11:00:41+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added a 'confirmed' attribute to the job property's 'delete' element to \r
+# bring the schema into line with Marina. \r
+# \r
+# ****************** Version 125 ****************** \r
+# User: rob.dipaolo Date: 2014-09-22 Time: 10:57:46+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added first/lastEventPlayTime \r
+# \r
+# ****************** Version 124 ****************** \r
+# User: clement.lavolle Date: 2014-07-30 Time: 10:56:41+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added autoassociate to classification \r
+# \r
+# ****************** Version 123 ****************** \r
+# User: clement.lavolle Date: 2014-07-30 Time: 10:55:00+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Sorting the components \r
+# \r
+# ****************** Version 122 ****************** \r
+# User: Edward.Thurman Date: 2014-07-16 Time: 16:32:00+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# XSD corrected for the video properties to be job specific rather than \r
+# different for all media streams. \r
+# \r
+# ****************** Version 121 ****************** \r
+# User: ignazio.castrogiovanni Date: 2014-03-29 Time: 09:33:13+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# XML changes for the inserUpdateScheduledJob API \r
+# \r
+# ****************** Version 120 ****************** \r
+# User: Edward.Thurman Date: 2014-03-27 Time: 17:22:39+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added the automationStateType element, in addition to the jobState element \r
+# to a automation/scheduled job. \r
+# \r
+# ****************** Version 119 ****************** \r
+# User: Edward.Thurman Date: 2014-02-04 Time: 17:47:36+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Update to the mediaBaseAttributes and mediaInstanceBaseAttributes to \r
+# conform to the record data returned by marina. \r
+# \r
+# ****************** Version 118 ****************** \r
+# User: mark.chettle Date: 2014-01-10 Time: 16:38:44+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added Markup configXML and new asRun fields for channelID and channel name. \r
+# \r
+# ****************** Version 117 ****************** \r
+# User: Edward.Thurman Date: 2013-12-13 Time: 15:18:51+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added languages type to the xml schema. \r
+# \r
+# ****************** Version 116 ****************** \r
+# User: Edward.Thurman Date: 2013-12-13 Time: 14:57:09+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Updates to correct the schema for channelProperties, playlistPrimaryEvent \r
+# and playlistSecondaryEvent. \r
+# \r
+# ****************** Version 115 ****************** \r
+# User: jose.valencia Date: 2013-11-21 Time: 15:31:35+00:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added a new deleteMedia type. \r
+# \r
+# ****************** Version 114 ****************** \r
+# User: michael.cullen Date: 2013-10-17 Time: 17:00:46+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# MAR-6685 - getMediaMetadataChanged fixes \r
+# \r
+# ****************** Version 113 ****************** \r
+# User: Edward.Thurman Date: 2013-10-04 Time: 16:40:07+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Added manualSecondary attribute to event. \r
+# \r
+# ****************** Version 112 ****************** \r
+# User: jacopo.vezzosi Date: 2013-08-07 Time: 16:25:42+01:00 \r
+# Updated in: /Marina_1_1_0/source/xml/include \r
+# Restored the lastModifiedDateTimecodeRange type into the XSD file. \r
+# \r
+# ****************** Version 110 ****************** \r
+# User: james.mbowa Date: 2012-11-05 Time: 16:08:21+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Add new complex type called "state" and added state to the \r
+# playlistPrimaryEvent, playlistSecondaryEvent and playlistActionEvent. \r
+# \r
+# ****************** Version 109 ****************** \r
+# User: matt.kaczynski Date: 2012-09-05 Time: 16:53:05+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added an optional mediaLocation node to request properties xml. It is used \r
+# to specify the fields required by the RML resource allocation manager. \r
+# \r
+# ****************** Version 108 ****************** \r
+# User: phil.lee Date: 2012-06-20 Time: 10:58:11+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added support for days into a timecode. The days component is optional so \r
+# timecodes can be in the format DDD:HH:MM:SS:FF or for backward \r
+# compatability HH:MM:SS:FF. \r
+# \r
+# ****************** Version 106 ****************** \r
+# User: david.mcdonald Date: 2012-06-06 Time: 09:42:49+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Updated switcher effect "type" attribute values to match the enum in the \r
+# code, see bug 12116. \r
+# \r
+# ****************** Version 105 ****************** \r
+# User: david.mcdonald Date: 2012-05-21 Time: 11:09:25+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Changed JobList XML to allow multiple transfer "destination" nodes. This is \r
+# needed for Cache Ingest. \r
+# \r
+# ****************** Version 104 ****************** \r
+# User: nick.dedekind Date: 2012-04-10 Time: 10:52:47+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# 11699 - Multi-system database bridge support \r
+# \r
+# ****************** Version 103 ****************** \r
+# User: nick.dedekind Date: 2012-02-08 Time: 15:49:08+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added scheduled record xml spec. \r
+# \r
+# ****************** Version 102 ****************** \r
+# User: peter.brown Date: 2011-12-16 Time: 11:20:00+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# switch effect properties for source and destination are now optional (these \r
+# can be set via default properties in marina) \r
+# \r
+# ****************** Version 101 ****************** \r
+# User: peter.brown Date: 2011-12-07 Time: 10:20:35+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# fixed up mediaSetLoose and some annotations for keeplist \r
+# \r
+# ****************** Version 100 ****************** \r
+# User: peter.brown Date: 2011-12-02 Time: 16:49:14+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated following initial review \r
+# \r
+# ****************** Version 99 ****************** \r
+# User: peter.brown Date: 2011-11-30 Time: 17:19:54+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# initial draft changes for keep List support \r
+# \r
+# ****************** Version 98 ****************** \r
+# User: david.mcdonald Date: 2011-11-25 Time: 16:14:17+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Made "properties" node of asRunJob optional. Added source/destination \r
+# allocation attributes to asRunData node. \r
+# \r
+# ****************** Version 97 ****************** \r
+# User: peter.brown Date: 2011-11-24 Time: 16:40:41+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added extra enum to errors for api and changes the sequence mode for the \r
+# switch child elements so that they can appear in any order \r
+# \r
+# ****************** Version 96 ****************** \r
+# User: rob.dipaolo Date: 2011-09-19 Time: 20:27:14+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Fixed auxDataProperties type. \r
+# \r
+# ****************** Version 95 ****************** \r
+# User: david.mcdonald Date: 2011-09-06 Time: 15:57:55+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Updated effectProperties so that the device/port allocation is now \r
+# contained in a switchAllocation element called "port". \r
+# \r
+# ****************** Version 94 ****************** \r
+# User: david.mcdonald Date: 2011-08-01 Time: 13:55:29+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added "LoadOnly" option to CG properties. \r
+# \r
+# ****************** Version 93 ****************** \r
+# User: david.mcdonald Date: 2011-07-27 Time: 18:58:24+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added direction to the mediaStream/cg/transition node. \r
+# \r
+# ****************** Version 91 ****************** \r
+# User: david.mcdonald Date: 2011-06-27 Time: 14:54:31+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Updated switch properties for better handling of auto allocation and \r
+# logical ports. \r
+# \r
+# ****************** Version 90 ****************** \r
+# User: david.mcdonald Date: 2011-06-14 Time: 11:41:43+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added a separate device attribute for outputs in the switchProperties xml. \r
+# \r
+# ****************** Version 89 ****************** \r
+# User: david.mcdonald Date: 2011-06-13 Time: 15:23:26+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added attribute "disableRouting" in videoProperties. Updated annotations \r
+# and added "backupOutputPort" & "backupDevice" in the switchProperties XML. \r
+# \r
+# ****************** Version 88 ****************** \r
+# User: gavin.smith Date: 2011-06-02 Time: 10:34:10+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added filesize attribute for mediainstances - see bug #8587 (this feature \r
+# is not complete/fully-implemented). \r
+# \r
+# ****************** Version 87 ****************** \r
+# User: mark.chettle Date: 2011-05-25 Time: 16:54:32+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Updated xsd + AutomationDefs, changed the geestring for "Key Frame \r
+# generator" to "Thumbnail" and renamed "Marina Assistant" to "Assistant". \r
+# \r
+# ****************** Version 86 ****************** \r
+# User: peter.brown Date: 2011-05-20 Time: 15:18:22+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# rolled back to v83 (removed the extra job type optional attributes that are \r
+# not needed) \r
+# \r
+# ****************** Version 83 ****************** \r
+# User: david.mcdonald Date: 2011-05-17 Time: 09:52:58+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added "duration" attribute to dve effect properties. \r
+# \r
+# ****************** Version 82 ****************** \r
+# User: peter.brown Date: 2011-05-16 Time: 16:36:23+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# made keyer element optional within effect properties; along with making \r
+# jobs optional in asRun element. Brings back in line with v80 which included \r
+# these bits; but dropped out when merging v81 \r
+# \r
+# ****************** Version 81 ****************** \r
+# User: phil.lee Date: 2011-05-16 Time: 14:46:00+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added new types required by the Marina API upgrade. \r
+# \r
+# ****************** Version 80 ****************** \r
+# User: peter.brown Date: 2011-05-16 Time: 11:58:20+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added new pgmPercent attribute to AudioOver effects. This is to allow the \r
+# main Program audio level to be adjusted when an audioOver effect is \r
+# applied. \r
+# \r
+# ****************** Version 79 ****************** \r
+# User: rob.dipaolo Date: 2011-05-10 Time: 11:08:57+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# - Made embedded AsRun job xml optional. \r
+# - Added asRunJobProperties that combines Pri&Sec properties. \r
+# - Added activeRedundancyRole to asRunData. \r
+# - Added redundancyRole to asRunJob \r
+# - Updated Result & State enums to match proposed new values. \r
+# - Added 'message' attribute to 'error' element in asRun. \r
+# - Updated error enum to match latest set of event errors. \r
+# \r
+# ****************** Version 78 ****************** \r
+# User: phil.lee Date: 2011-05-03 Time: 13:21:57+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Updated properties\event\comment to have a minimum length of 0. \r
+# \r
+# ****************** Version 77 ****************** \r
+# User: rob.dipaolo Date: 2011-04-21 Time: 14:25:20+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Updated version type so it can handle 2-4 numbers. \r
+# \r
+# ****************** Version 76 ****************** \r
+# User: david.mcdonald Date: 2011-04-06 Time: 11:28:38+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 72 ****************** \r
+# User: david.mcdonald Date: 2011-04-01 Time: 08:58:53+01:00 \r
+# Updated in: /MarinaRedundantObjectsDev/source/xml/include \r
+# \r
+# ****************** Version 75 ****************** \r
+# User: david.mcdonald Date: 2011-04-06 Time: 09:21:53+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 74 ****************** \r
+# User: peter.brown Date: 2011-03-18 Time: 11:14:54+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added dolphinGraphic element to actions. \r
+# \r
+# ****************** Version 73 ****************** \r
+# User: rob.dipaolo Date: 2011-03-17 Time: 14:38:54+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added validationMode to event, mediaStream and AudioShuffle properties. \r
+# \r
+# ****************** Version 72 ****************** \r
+# User: mark.chettle Date: 2011-03-07 Time: 15:12:44+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added correct types for dolphinGraphicsProperties. \r
+# \r
+# ****************** Version 71 ****************** \r
+# User: mark.chettle Date: 2011-03-04 Time: 18:29:55+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 70 ****************** \r
+# User: david.mcdonald Date: 2011-02-22 Time: 09:15:12+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Fixed audio shuffle inputs and outputs are now strings instead of integers \r
+# to allow for names or numbers. \r
+# \r
+# ****************** Version 69 ****************** \r
+# User: peter.brown Date: 2011-02-21 Time: 18:30:44+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated orderNo so that it is 1 based in both markup and mediaStream \r
+# elements. \r
+# \r
+# ****************** Version 68 ****************** \r
+# User: david.mcdonald Date: 2011-02-16 Time: 09:29:28+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Fixed audioShuffle outputNo & inputNo are now "output" and "input" so they \r
+# can be defined as a port name or number. \r
+# \r
+# ****************** Version 67 ****************** \r
+# User: david.mcdonald Date: 2011-02-15 Time: 12:28:04+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Changed the macro element in effectProperties->audioShuffle to uses the \r
+# macroProperties type and added an effect element to the feature properties. \r
+# \r
+# ****************** Version 66 ****************** \r
+# User: peter.brown Date: 2011-01-27 Time: 15:06:07+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added: \r
+# 1. new fieldList element to features. This allows for support of custom \r
+# device drivers which may need to have additional parameters passed to the \r
+# device via the playlist. \r
+# 2. added new eventUsage types: CommercialBlock, BlockStart, BlockEnd \r
+# 3. added new block element beneath properties for scheduling commercial \r
+# blocks. \r
+# \r
+# ****************** Version 65 ****************** \r
+# User: rob.dipaolo Date: 2011-01-25 Time: 16:41:13+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# - Added Channel info to playlist properties. \r
+# - Added 'auxData' element to all properties for custom bits. \r
+# - Added additional attributes to asRun error list to support error history. \r
+# - Added 'userObservation' element to asRunPrimaryEventList. \r
+# - Added 'txList' attribute to asRun data. \r
+# \r
+# ****************** Version 64 ****************** \r
+# User: peter.brown Date: 2011-01-25 Time: 11:49:38+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# 1. Added "Bypass" to list of available enums for aspectRatio \r
+# 2. Changed segmentNo to orderNo to resolve inconsistency from media markup \r
+# to mediaStream markup in event. \r
+# \r
+# ****************** Version 63 ****************** \r
+# User: peter.brown Date: 2011-01-20 Time: 13:54:26+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added houseID to eventProperties (requested by zdf). \r
+# \r
+# ****************** Version 62 ****************** \r
+# User: peter.brown Date: 2011-01-04 Time: 11:03:52+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated: \r
+# feature: effect: dve attribute-> effect, \r
+# afd aspectRation attribute -> type \r
+# vps datetimetype attribute -> vpscodetype \r
+# markupItem/@som is now optional \r
+# added cg template field ('f') optional name attribute. \r
+# \r
+# ****************** Version 61 ****************** \r
+# User: peter.brown Date: 2010-12-21 Time: 12:34:40+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# changed PriVideo enum to PrimaryVideo; and lyr to layer \r
+# \r
+# ****************** Version 60 ****************** \r
+# User: peter.brown Date: 2010-12-20 Time: 18:26:31+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated asRun state/error to remove "for future use" \r
+# \r
+# ****************** Version 59 ****************** \r
+# User: peter.brown Date: 2010-12-20 Time: 15:42:23+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# removed restriction element. The specific design of how this restriction \r
+# will work is as yet TBD and so it has been removed to avoid confusion. \r
+# \r
+# ****************** Version 58 ****************** \r
+# User: rob.dipaolo Date: 2010-12-20 Time: 10:05:41+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added duration back to mediaStream properties for ingest. \r
+# \r
+# ****************** Version 56 ****************** \r
+# User: peter.brown Date: 2010-12-16 Time: 17:26:17+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added AFD to typeEnum, and also removed teh "unused" elements which were \r
+# for future use. Finally; removed duration from mediaStream after \r
+# discussions about that being available in the schedule element. \r
+# \r
+# ****************** Version 55 ****************** \r
+# User: rob.dipaolo Date: 2010-12-16 Time: 15:37:50+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added aspect ratio and TOD record bits. \r
+# \r
+# ****************** Version 54 ****************** \r
+# User: peter.brown Date: 2010-12-15 Time: 18:14:50+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated effects element for dave. and added a slot and slotEnum type with \r
+# union to make the configuration of slots easier. \r
+# \r
+# ****************** Version 53 ****************** \r
+# User: rob.dipaolo Date: 2010-12-15 Time: 15:19:27+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added VPS properties. \r
+# \r
+# ****************** Version 52 ****************** \r
+# User: peter.brown Date: 2010-12-15 Time: 12:30:22+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updating annotations \r
+# \r
+# ****************** Version 51 ****************** \r
+# User: peter.brown Date: 2010-12-14 Time: 13:46:57+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated PBSDolphinGraphicElement and mediaStream allocation sections. \r
+# \r
+# ****************** Version 50 ****************** \r
+# User: peter.brown Date: 2010-12-13 Time: 18:42:01+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# fixed spelling mistakes \r
+# \r
+# ****************** Version 49 ****************** \r
+# User: peter.brown Date: 2010-12-13 Time: 08:47:51+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# fixed spelling mistakes \r
+# \r
+# ****************** Version 48 ****************** \r
+# User: mark.chettle Date: 2010-12-10 Time: 16:12:14+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Updated job with new types, Keyframe Generator, demo and Marina Assistant. \r
+# \r
+# ****************** Version 47 ****************** \r
+# User: rob.dipaolo Date: 2010-12-10 Time: 15:24:52+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Removed references to teriary events and fixed some spelling mistakes. \r
+# \r
+# ****************** Version 46 ****************** \r
+# User: mark.chettle Date: 2010-12-08 Time: 17:08:47+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 45 ****************** \r
+# User: rob.dipaolo Date: 2010-12-08 Time: 14:09:55+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Updated switch properties for live event and removed allocationProperties. \r
+# \r
+# ****************** Version 43 ****************** \r
+# User: david.mcdonald Date: 2010-11-29 Time: 09:43:44+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Created a new complex type for layers so that it is possible to remove them \r
+# from the switch properties xml in one call. \r
+# \r
+# ****************** Version 42 ****************** \r
+# User: eric.openshaw Date: 2010-11-23 Time: 12:27:38-07:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated for features f/w \r
+# \r
+# ****************** Version 41 ****************** \r
+# User: nick.dedekind Date: 2010-11-13 Time: 17:25:41+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# changed subtitle "mode" to "captionMode" \r
+# \r
+# ****************** Version 40 ****************** \r
+# User: eric.openshaw Date: 2010-11-08 Time: 13:02:39-07:00 \r
+# Updated in: /Marina/source/xml/include \r
+# features/feature@type = global type "playlistEventType" \r
+# \r
+# ****************** Version 39 ****************** \r
+# User: eric.openshaw Date: 2010-11-08 Time: 09:41:54-07:00 \r
+# Updated in: /Marina/source/xml/include \r
+# tweaks for trigger properties \r
+# \r
+# ****************** Version 38 ****************** \r
+# User: rob.dipaolo Date: 2010-11-05 Time: 16:34:17+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added feature xml \r
+# \r
+# ****************** Version 37 ****************** \r
+# User: eric.openshaw Date: 2010-11-04 Time: 16:35:59-06:00 \r
+# Updated in: /Marina/source/xml/include \r
+# changes for asRun \r
+# \r
+# ****************** Version 36 ****************** \r
+# User: nick.dedekind Date: 2010-11-04 Time: 10:30:07+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated subtitle properties \r
+# \r
+# ****************** Version 35 ****************** \r
+# User: peter.brown Date: 2010-11-02 Time: 18:43:34+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# first pass update of marinaTypes to include newer style xml asRun elements. \r
+# This brings the asRun log inline with the use of this #include file. this \r
+# is pending review, and is likely to have a few changes made. \r
+# \r
+# ****************** Version 34 ****************** \r
+# User: david.mcdonald Date: 2010-11-02 Time: 16:28:11+00:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added transition type "<none>" as it makes sense for some switch effects to \r
+# have no transition or rate settings. \r
+# \r
+# ****************** Version 33 ****************** \r
+# User: peter.brown Date: 2010-10-13 Time: 12:00:32+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated the comments referencing the mediaUsage element \r
+# \r
+# ****************** Version 32 ****************** \r
+# User: rob.dipaolo Date: 2010-09-20 Time: 14:18:38+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# txList -> playlist take 2! \r
+# \r
+# ****************** Version 31 ****************** \r
+# User: rob.dipaolo Date: 2010-09-20 Time: 10:27:44+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# txList -> playlist \r
+# \r
+# ****************** Version 30 ****************** \r
+# User: peter.brown Date: 2010-09-16 Time: 15:26:35+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# updated annotations for jobList \r
+# \r
+# ****************** Version 29 ****************** \r
+# User: peter.brown Date: 2010-09-16 Time: 12:45:09+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# fixed header/footer SCC blocks \r
+# \r
+# ****************** Version 28 ****************** \r
+# User: rob.dipaolo Date: 2010-09-16 Time: 12:19:42+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added Joblist types. \r
+# \r
+# ****************** Version 27 ****************** \r
+# User: kirk.larkin Date: 2010-09-16 Time: 10:25:21+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 26 ****************** \r
+# User: kirk.larkin Date: 2010-09-16 Time: 09:54:36+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 25 ****************** \r
+# User: peter.brown Date: 2010-09-15 Time: 19:30:59+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added comments to the top of the file \r
+# \r
+# ****************** Version 24 ****************** \r
+# User: peter.brown Date: 2010-09-15 Time: 15:46:44+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added extra annotation for debug event type \r
+# \r
+# ****************** Version 23 ****************** \r
+# User: rob.dipaolo Date: 2010-09-15 Time: 11:33:41+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Changed list event properties/childEvents model to sequence to make it \r
+# easier to parse. \r
+# \r
+# ****************** Version 22 ****************** \r
+# User: rob.dipaolo Date: 2010-09-15 Time: 10:07:20+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# made scheduled end type optional is it's not required for marker events. \r
+# \r
+# ****************** Version 21 ****************** \r
+# User: peter.brown Date: 2010-09-13 Time: 17:15:44+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added Event type = "Live" for the txPlaylistEvent. Rob OKd this. \r
+# \r
+# ****************** Version 20 ****************** \r
+# User: phil.lee Date: 2010-09-13 Time: 17:00:50+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 19 ****************** \r
+# User: phil.lee Date: 2010-09-13 Time: 16:05:26+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added new custom XML functionality. \r
+# \r
+# ****************** Version 18 ****************** \r
+# User: rob.dipaolo Date: 2010-08-24 Time: 17:58:21+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Updated txList spec based on comments. \r
+# \r
+# ****************** Version 17 ****************** \r
+# User: rob.dipaolo Date: 2010-08-24 Time: 09:23:06+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# Added types for txList events \r
+# \r
+# ****************** Version 16 ****************** \r
+# User: eric.openshaw Date: 2010-08-05 Time: 17:42:49-06:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added ListStream allocation type attr and made ListStreamNo optional \r
+# \r
+# ****************** Version 15 ****************** \r
+# User: rob.dipaolo Date: 2010-08-03 Time: 15:21:04+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 13 ****************** \r
+# User: phil.lee Date: 2010-07-27 Time: 14:46:09+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 12 ****************** \r
+# User: rob.dipaolo Date: 2010-07-26 Time: 21:00:04+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# First draft properties & media sync schemas \r
+# \r
+# ****************** Version 11 ****************** \r
+# User: phil.lee Date: 2010-07-05 Time: 15:00:10+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 10 ****************** \r
+# User: phil.lee Date: 2010-06-09 Time: 16:57:26+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 8 ****************** \r
+# User: eric.openshaw Date: 2010-06-02 Time: 11:39:09-06:00 \r
+# Updated in: /Marina/source/xml/include \r
+# fixed tc regexp, legalised empty mediaUsageList \r
+# \r
+# ****************** Version 7 ****************** \r
+# User: eric.openshaw Date: 2010-05-18 Time: 11:32:41-06:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added complete attr to markup element \r
+# \r
+# ****************** Version 6 ****************** \r
+# User: eric.openshaw Date: 2010-05-14 Time: 09:43:48-06:00 \r
+# Updated in: /Marina/source/xml/include \r
+# added markups to media schema \r
+# \r
+# ****************** Version 5 ****************** \r
+# User: phil.lee Date: 2010-04-19 Time: 16:54:18+01:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+# ****************** Version 3 ****************** \r
+# User: eric.openshaw Date: 2010-03-22 Time: 12:42:28-06:00 \r
+# Updated in: /Marina/source/xml/include \r
+# \r
+*****************************************************************\r
+-->\r
+<xs:schema xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified">\r
+ <xs:complexType name="actionScheduleProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Scheduling properties for an action.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="startType" type="scheduledStartType" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumerated Start Type.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="startOffset" type="dateTimecodeOrTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>For Fixed starts this is a date time for Parent Start and End this is a timecode span offset.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="aspectRatio">\r
+ <xs:annotation>\r
+ <xs:documentation>Aspect Ratio</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="4:3"/>\r
+ <xs:enumeration value="4:3 Full"/>\r
+ <xs:enumeration value="14:9 Letterbox Centred"/>\r
+ <xs:enumeration value="14:9 Letterbox Top"/>\r
+ <xs:enumeration value="14:9 Full Height"/>\r
+ <xs:enumeration value="16:9"/>\r
+ <xs:enumeration value="16:9 Letterbox Centred"/>\r
+ <xs:enumeration value="16:9 Letterbox Top"/>\r
+ <xs:enumeration value="16:9 Letterbox Deep"/>\r
+ <xs:enumeration value="16:9 Anamorphic"/>\r
+ <xs:enumeration value="Bypass"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="aspectRatioProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for Aspect Ratio</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="type" type="aspectRatio" use="required"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunActionEvent">\r
+ <xs:annotation>\r
+ <xs:documentation>AsRun Action Event</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexContent>\r
+ <xs:extension base="asRunEventTemplate">\r
+ <xs:sequence>\r
+ <xs:element name="properties" type="playlistActionEventProperties"/>\r
+ <xs:element name="childEvents" type="asRunSecondaryEventList" minOccurs="0"/>\r
+ </xs:sequence>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunData">\r
+ <xs:annotation>\r
+ <xs:documentation>AsRun related values</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="errors" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>List of errors </xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="error" minOccurs="0" maxOccurs="unbounded">\r
+ <xs:complexType>\r
+ <xs:attribute name="name" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the error.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Lost OnAir Job"/>\r
+ <xs:enumeration value="Missing Media"/>\r
+ <xs:enumeration value="Lost XPoint Path"/>\r
+ <xs:enumeration value="Media Stream Error"/>\r
+ <xs:enumeration value="Macro Not Found"/>\r
+ <xs:enumeration value="Invalid Trigger Parameter"/>\r
+ <xs:enumeration value="Lost Switch Effect"/>\r
+ <xs:enumeration value="Slave Processor Error"/>\r
+ <xs:enumeration value="Media Stream Error"/>\r
+ <xs:enumeration value="Media Already Exists"/>\r
+ <xs:enumeration value="Dependency Error"/>\r
+ <xs:enumeration value="Cue Timeout"/>\r
+ <xs:enumeration value="End Timeout"/>\r
+ <xs:enumeration value="Lost Switch Effect"/>\r
+ <xs:enumeration value="Invalid Media Segment"/>\r
+ <xs:enumeration value="Invalid Audio Shuffle"/>\r
+ <xs:enumeration value="Invalid Media Metadata"/>\r
+ <xs:enumeration value="SOM Extent"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="time" type="dateTimecode" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The time the state changed.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="state" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The state off the error (On or Off)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="On"/>\r
+ <xs:enumeration value="Off"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="message" type="xs:string">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional message providing more information.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="startTime" type="dateTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>The time the event or job started, if it ran.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="endTime" type="dateTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>The time the event or job ended, if it ran.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="duration" type="timecode">\r
+ <xs:annotation>\r
+ <xs:documentation>The time the event or duration ran for.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="result" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The final result of the event or job. Either "Completed" or another descriptive string to describe what the result was.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Completed"/>\r
+ <xs:enumeration value="Descheduled"/>\r
+ <xs:enumeration value="Missed"/>\r
+ <xs:enumeration value="User Next"/>\r
+ <xs:enumeration value="List Next"/>\r
+ <xs:enumeration value="User Abort"/>\r
+ <xs:enumeration value="List Abort"/>\r
+ <xs:enumeration value="List Preempt"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="state">\r
+ <xs:annotation>\r
+ <xs:documentation>Either "done" or "disabled". For most events the state will always be "done". For events disabled in the UI they will always have a state of "done". </xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Done"/>\r
+ <xs:enumeration value="Disabled"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="activeRedundancyRole" type="redundancyRole">\r
+ <xs:annotation>\r
+ <xs:documentation>The redundancy role used for the OnAir job. e.g. Main.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="allocatedDevice" type="xs:string">\r
+ <xs:annotation>\r
+ <xs:documentation>The device which was used by this event or job to fulfill it's function (e.g. video stream).</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="allocatedSourceDevice">\r
+ <xs:annotation>\r
+ <xs:documentation>The source device which was used by this event or job to fulfill it's function (e.g. router).</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="allocatedSourcePort">\r
+ <xs:annotation>\r
+ <xs:documentation>The source port which was used by this event or job to fulfill it's function (e.g. router port).</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="allocatedDestinationDevice">\r
+ <xs:annotation>\r
+ <xs:documentation>The destination device which was used by this event or job to fulfill it's function (e.g. router).</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="allocatedDestinationPort">\r
+ <xs:annotation>\r
+ <xs:documentation>The destination port which was used by this event or job to fulfill it's function (e.g. router port).</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="txList">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the TxList that this event was played out on. </xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="txListID">\r
+ <xs:annotation>\r
+ <xs:documentation>The ID of the list that this event was played out on.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="channel">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the channel this event was played out on, if redundancy is being used this will be the reudnant list object name. </xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="channelID">\r
+ <xs:annotation>\r
+ <xs:documentation>The ID of the channel this event was played out on, if redundancy is being used this will be the reudnant list ID. </xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunEventTemplate">\r
+ <xs:annotation>\r
+ <xs:documentation>Template for an asrun event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="asRun">\r
+ <xs:annotation>\r
+ <xs:documentation>The asRunData for this event. i.e. What really happened</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:complexContent>\r
+ <xs:extension base="asRunData">\r
+ <xs:sequence minOccurs="0">\r
+ <xs:element name="jobs" type="asRunJobList" minOccurs="0"/>\r
+ </xs:sequence>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="playlistEventAttributes"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunJob">\r
+ <xs:annotation>\r
+ <xs:documentation>Information about a job that was created to service a list event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="asRun">\r
+ <xs:complexType>\r
+ <xs:complexContent>\r
+ <xs:extension base="asRunData"/>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="properties" type="asRunJobProperties" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>The properties used by the embedded job. These may be a subset of the event's properties, or they may have been calculated by the implementation of the job.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of this job, e.g. Media, Effect, etc</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="redundancyRole" type="redundancyRole">\r
+ <xs:annotation>\r
+ <xs:documentation>The role of this job in a redundant pair.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="featurePath">\r
+ <xs:annotation>\r
+ <xs:documentation>XPath for the feature properties element for which this job was created. The XPath is relative from the root 'event' element. This attribute may be missing if the job was not created to fulfill a feature.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunJobList">\r
+ <xs:annotation>\r
+ <xs:documentation>A list of all the jobs created to service a list event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">\r
+ <xs:element name="job" type="asRunJob"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunJobProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of an asrun job.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="schedule" type="secondaryScheduleProperties" minOccurs="0"/>\r
+ <xs:element name="mediaStream" type="mediaStreamProperties" minOccurs="0"/>\r
+ <xs:element name="event" type="eventProperties" minOccurs="0"/>\r
+ <xs:element name="switch" type="switchProperties" minOccurs="0"/>\r
+ <xs:element name="trigger" type="triggerProperties" minOccurs="0"/>\r
+ <xs:element name="effect" type="effectProperties" minOccurs="0"/>\r
+ <xs:element name="media" type="mediaSimple" minOccurs="0"/>\r
+ <xs:element name="features" type="featuresProperties" minOccurs="0"/>\r
+ <xs:element name="block" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:attribute name="name" use="required"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="macro" type="macroProperties" minOccurs="0"/>\r
+ <xs:element name="dolphinGraphic" type="dolphinGraphicProperties" minOccurs="0"/>\r
+ <xs:element name="auxData" type="xs:anyType" minOccurs="0"/>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunPrimaryEvent">\r
+ <xs:annotation>\r
+ <xs:documentation>AsRun Primary Event</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexContent>\r
+ <xs:extension base="asRunEventTemplate">\r
+ <xs:sequence>\r
+ <xs:element name="properties" type="playlistPrimaryEventProperties"/>\r
+ <xs:element name="childEvents" type="asRunSecondaryEventList" minOccurs="0"/>\r
+ </xs:sequence>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunPrimaryEventList">\r
+ <xs:annotation>\r
+ <xs:documentation>AsRun Event List - contains multiple asRunEvents</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">\r
+ <xs:choice minOccurs="0" maxOccurs="unbounded">\r
+ <xs:element name="event" type="asRunPrimaryEvent"/>\r
+ <xs:element name="userObservation" type="asRunUserObservation"/>\r
+ </xs:choice>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunSecondaryEvent">\r
+ <xs:annotation>\r
+ <xs:documentation>AsRun Secondary Event</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexContent>\r
+ <xs:extension base="asRunEventTemplate">\r
+ <xs:sequence>\r
+ <xs:element name="properties" type="playlistSecondaryEventProperties"/>\r
+ <xs:element name="childEvents" type="asRunSecondaryEventList" minOccurs="0"/>\r
+ </xs:sequence>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunSecondaryEventList">\r
+ <xs:annotation>\r
+ <xs:documentation>AsRun Secondary Event List</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence maxOccurs="unbounded">\r
+ <xs:choice>\r
+ <xs:element name="event" type="asRunSecondaryEvent"/>\r
+ <xs:element name="action" type="asRunActionEvent"/>\r
+ </xs:choice>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="asRunUserObservation">\r
+ <xs:annotation>\r
+ <xs:documentation>Observations by operators or users.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="comment" type="xs:string">\r
+ <xs:annotation>\r
+ <xs:documentation>The comment typed in by the user.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="time" type="dateTimecode" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The time the observation was made.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="userName" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the user that made the observation.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="client" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the client pc that the observation was made from. e.g. MCRClient1</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="audio">\r
+ <xs:annotation>\r
+ <xs:documentation>Supersedes audioTracks, represents both groups and tracks.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="tracks">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="track" maxOccurs="unbounded">\r
+ <xs:complexType>\r
+ <xs:sequence minOccurs="0">\r
+ <xs:element name="encodingConfig" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Configuration parameters for encoding. This is free form for now but will be formalised later.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:anyAttribute namespace="##any" processContents="skip"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="tags" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Any number of free form tags.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence minOccurs="0">\r
+ <xs:element name="tag" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="encoding" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The encoding format used for this track.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="UNKNOWN"/>\r
+ <xs:enumeration value="ADPCM"/>\r
+ <xs:enumeration value="DOL_E"/>\r
+ <xs:enumeration value="DOL_D"/>\r
+ <xs:enumeration value="DOL_D_PLUS"/>\r
+ <xs:enumeration value="MP1L1"/>\r
+ <xs:enumeration value="MP1L2"/>\r
+ <xs:enumeration value="MP1L3"/>\r
+ <xs:enumeration value="MP2P3"/>\r
+ <xs:enumeration value="AAC"/>\r
+ <xs:enumeration value="PCM"/>\r
+ <xs:enumeration value="OGG"/>\r
+ <xs:enumeration value="WMA"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="groups" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="group" minOccurs="0" maxOccurs="unbounded">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="tags" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:sequence minOccurs="0">\r
+ <xs:element name="tag" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="tracks">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="track" maxOccurs="255">\r
+ <xs:complexType>\r
+ <xs:attribute name="index" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>1 based track index,</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:unsignedByte">\r
+ <xs:minInclusive value="1"/>\r
+ <xs:maxInclusive value="255"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="name" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Uniique name for this group.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="audioTrack">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of an audio track</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="trackNum" type="xs:unsignedShort" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>0 based audio track number</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="channels" type="xs:unsignedByte" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Number of channels of audio within this track</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="sampleRate" type="xs:unsignedShort" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Sample rate of audio encoding in kHz</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="format" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Encoding format of the audio track (see enum)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="32"/>\r
+ <xs:enumeration value="PCM"/>\r
+ <xs:enumeration value="DolbyDigital"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="bits" type="xs:unsignedShort" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Encoding resolution</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="lang" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Language of audio track</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="32"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="audioTracks">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of audio tracks</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="audioTrack" type="audioTrack" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:simpleType name="automationStateType">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumeration of automation job states.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Null"/>\r
+ <xs:enumeration value="Initialising"/>\r
+ <xs:enumeration value="Initialised"/>\r
+ <xs:enumeration value="Cueing"/>\r
+ <xs:enumeration value="Allocating Device"/>\r
+ <xs:enumeration value="Device Allocated"/>\r
+ <xs:enumeration value="Waiting Validation"/>\r
+ <xs:enumeration value="Validation Succeeded"/>\r
+ <xs:enumeration value="Validation Failed"/>\r
+ <xs:enumeration value="Allocating Stream"/>\r
+ <xs:enumeration value="Stream Allocated"/>\r
+ <xs:enumeration value="Stream Cueing"/>\r
+ <xs:enumeration value="Cued"/>\r
+ <xs:enumeration value="Preroll"/>\r
+ <xs:enumeration value="Running"/>\r
+ <xs:enumeration value="Overrunning"/>\r
+ <xs:enumeration value="Pausing"/>\r
+ <xs:enumeration value="Paused"/>\r
+ <xs:enumeration value="Ending"/>\r
+ <xs:enumeration value="Running"/>\r
+ <xs:enumeration value="Aborting"/>\r
+ <xs:enumeration value="Aborted"/>\r
+ <xs:enumeration value="Postroll"/>\r
+ <xs:enumeration value="Done"/>\r
+ <xs:enumeration value="Disabled"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="cgProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties used by CG media devices</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="f" minOccurs="0" maxOccurs="30">\r
+ <xs:annotation>\r
+ <xs:documentation>Template fields go here if required.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:simpleContent>\r
+ <xs:extension base="xs:string">\r
+ <xs:attribute name="name"/>\r
+ </xs:extension>\r
+ </xs:simpleContent>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="passThrough" minOccurs="0" maxOccurs="1">\r
+ <xs:annotation>\r
+ <xs:documentation>Required when the type is PassThrough. For some devices this can be used to specify a command to pass directly to the device.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:attribute name="command" use="required"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="transition" minOccurs="0" maxOccurs="1">\r
+ <xs:annotation>\r
+ <xs:documentation>Required when the type is Transition. For example, can be used to fade up/down a logo.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:attribute name="type" type="CGTransitionUnion" use="required"/>\r
+ <xs:attribute name="rate" type="switchRate" use="optional"/>\r
+ <xs:attribute name="direction" type="direction" use="optional"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="stopAnimation" minOccurs="0" maxOccurs="1">\r
+ <xs:complexType>\r
+ <xs:attribute name="enabled" type="xs:boolean" use="optional"/>\r
+ <xs:attribute name="stopTimeType" type="CGTPATimeTypeEnum" use="optional"/>\r
+ <xs:attribute name="stopTimeOffset" type="timecode" use="optional"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="PBSDolphinGraphicElement" type="dolphinCGProperties" minOccurs="0" maxOccurs="1">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional properties for dolphin devices.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Page"/>\r
+ <xs:enumeration value="Sequence"/>\r
+ <xs:enumeration value="Template"/>\r
+ <xs:enumeration value="Transition"/>\r
+ <xs:enumeration value="PassThrough"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="layer">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional Layer</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="loadOnly" type="xs:boolean">\r
+ <xs:annotation>\r
+ <xs:documentation>Option to load at start time instead of loading at cue time and fading up at start time.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="CGTPATimeTypeEnum">\r
+ <xs:annotation>\r
+ <xs:documentation>Three Part Animation stop type enum</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="0"/>\r
+ <xs:enumeration value="1"/>\r
+ <xs:enumeration value="+EventStart"/>\r
+ <xs:enumeration value="-EventEnd"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="CGTransitionEnum">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Cut"/>\r
+ <xs:enumeration value="Fade"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="CGTransitionUnion" final="union">\r
+ <xs:union memberTypes="CGTransitionEnum switchTransition"/>\r
+ </xs:simpleType>\r
+ <xs:complexType name="changeCounts">\r
+ <xs:attribute name="del" type="xs:integer"/>\r
+ <xs:attribute name="update" type="xs:integer"/>\r
+ <xs:attribute name="add" type="xs:integer"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="channelProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for a transmission channel.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="name">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional name of the channel this list should be played on.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="comment" type="xs:string">\r
+ <xs:annotation>\r
+ <xs:documentation>An optional comment describing what this list is intended for or what it contains.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="txTime" type="dateTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional date/time that the list should be aired.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="timeOffset" type="xs:string">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional time offset name this list was saved in</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="timeOffsetValue" type="dateTimecodeOrTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional time offset value this list was saved in. This is a timecode span.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="classification">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a classification of an "object" (e.g. media, mediaInstance, mediaSet)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="autoAssociate" type="xs:boolean" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>If true, all the media in the DB and all the one you will create will be given the default category as value. If false, they won't have any category assigned.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="classification" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the classification e.g. "Program Type" or "Rating"</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="category" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the category within this classification e.g. "Trailer", "Advertisement" or "18+"</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="classifications">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of classifications</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="classification" type="classification" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="component">\r
+ <xs:annotation>\r
+ <xs:documentation>A representation of a component.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="health" type="healthList" minOccurs="0"/>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="componentAttributes"/>\r
+ <xs:attribute name="isRedundantObject" type="xs:boolean" use="optional"/>\r
+ <xs:attribute name="redundantParentId" type="xs:int" use="optional"/>\r
+ <xs:attribute name="redundantParentName" type="xs:string" use="optional"/>\r
+ </xs:complexType>\r
+ <xs:attributeGroup name="componentAttributes">\r
+ <xs:annotation>\r
+ <xs:documentation>Required attributes for a component.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="componentId" type="xs:integer" use="required"/>\r
+ <xs:attribute name="componentName" type="componentName" use="required"/>\r
+ </xs:attributeGroup>\r
+ <xs:simpleType name="componentHealth">\r
+ <xs:restriction base="xs:string">\r
+ <xs:maxLength value="64"/>\r
+ <xs:minLength value="1"/>\r
+ <xs:enumeration value="Object not found!"/>\r
+ <xs:enumeration value="Proxy exception!"/>\r
+ <xs:enumeration value="Server node not found!"/>\r
+ <xs:enumeration value="Server component not found!"/>\r
+ <xs:enumeration value="Server exception!"/>\r
+ <xs:enumeration value="Device disconnected!"/>\r
+ <xs:enumeration value="Card not found!"/>\r
+ <xs:enumeration value="Unable to open device!"/>\r
+ <xs:enumeration value="Invalid config!"/>\r
+ <xs:enumeration value="Device error!"/>\r
+ <xs:enumeration value="Device automation disabled!"/>\r
+ <xs:enumeration value="API interface failed!"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="componentList">\r
+ <xs:annotation>\r
+ <xs:documentation>A list of components.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="component" type="component" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:simpleType name="componentName">\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="componentTag">\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="128"/>\r
+ <xs:enumeration value="TxList"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="dateTime">\r
+ <xs:annotation>\r
+ <xs:documentation>PBS date time that excludes timezone.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:pattern value="2\d\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])(T)([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]"/>\r
+ <xs:pattern value="$INHERIT$"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="dateTimecode">\r
+ <xs:restriction base="xs:string">\r
+ <xs:pattern value="2\d\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])(T)([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]:([0-1][0-9]|2[0-4])"/>\r
+ <xs:pattern value="2\d\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])(T)([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9];[0-2][0-9]"/>\r
+ <xs:pattern value="$INHERIT$"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="dateTimecodeOrTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>Can either be a dateTimecode or a Timecode</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:pattern value="2\d\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])(T)([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]:([0-1][0-9]|2[0-4])"/>\r
+ <xs:pattern value="2\d\d\d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])(T)([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9];[0-2][0-9]"/>\r
+ <xs:pattern value="([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]:([0-1][0-9]|2[0-4])"/>\r
+ <xs:pattern value="([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9];[0-2][0-9]"/>\r
+ <xs:pattern value="$INHERIT$"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="dateTimecodeRange">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a timecode range (start -> end)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="start" type="dateTimecode" use="required"/>\r
+ <xs:attribute name="end" type="dateTimecode" use="required"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="deleteMedia">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a delete media request</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="deleteMediaInstances" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of deleted media instances</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="deleteMediaInstance" type="deleteMediaInstance" maxOccurs="unbounded">\r
+ <xs:annotation>\r
+ <xs:documentation>Delete information for a media instance</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="mediaKey"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="deleteMediaInstance">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a delete media instance request</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaSetName" type="mediaSetName" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Name of server or tape on which this instance is located</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="output" type="xs:string" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Indicates whether the media instance was successfully deleted or not</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="direction">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Up"/>\r
+ <xs:enumeration value="Down"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="dolphinCGProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for Dolphin CG jobs.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaName" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Media name of CG event to display.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="255"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="posX">\r
+ <xs:annotation>\r
+ <xs:documentation>X Position in percent (60.7pc) or pixels (100pi)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="posY">\r
+ <xs:annotation>\r
+ <xs:documentation>Y Position in percent (60.7pc) or pixels (100pi)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="scaleX" type="xs:float">\r
+ <xs:annotation>\r
+ <xs:documentation>X dimension scale. For example 1.0 is image size, 2.0 twice size, 0.5 half size.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="scaleY" type="xs:float">\r
+ <xs:annotation>\r
+ <xs:documentation>Y dimension scale. For example 1.0 is image size, 2.0 twice size, 0.5 half size.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="opacity" type="xs:float">\r
+ <xs:annotation>\r
+ <xs:documentation>Maximum opacity level when on 0.0 less than nOpacity less than or equal to 1.0</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="priority" type="xs:int">\r
+ <xs:annotation>\r
+ <xs:documentation>Graphic layer priority. Default is 1. Higher priority graphic elements will be displayed over the top of lower ones.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="onTransitionType" type="switchTransition">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumerated value includes values such as Cut, Cut Fade, Mix, Wipe, U-Fade etc.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="onTransitionTime">\r
+ <xs:annotation>\r
+ <xs:documentation>Transition time in frames from opacity 0 (off) to n (on) </xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:int">\r
+ <xs:minInclusive value="0"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="offTransitionType" type="switchTransition">\r
+ <xs:annotation>\r
+ <xs:documentation>As per onTransitionType enum but for the off transition.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="offTransitionTime">\r
+ <xs:annotation>\r
+ <xs:documentation>Transition time in frames from opacity n (on) to 0 (off).</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="dolphinGraphicProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Dolphin graphic properties</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="param" minOccurs="0" maxOccurs="unbounded">\r
+ <xs:complexType>\r
+ <xs:attribute name="value" type="xs:string" use="required"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="startTime" type="timecode">\r
+ <xs:annotation>\r
+ <xs:documentation>the defered start time</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="latency" type="timecode">\r
+ <xs:annotation>\r
+ <xs:documentation>latency between list and dolphin device</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="name" type="xs:string">\r
+ <xs:annotation>\r
+ <xs:documentation>name of dolphin CG</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="state">\r
+ <xs:annotation>\r
+ <xs:documentation>on or off</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="on"/>\r
+ <xs:enumeration value="off"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="effectProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for effects</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="port" type="switchAllocation">\r
+ <xs:annotation>\r
+ <xs:documentation>The device port the effect will occur on</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:choice>\r
+ <xs:element name="keyer" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:attribute name="transition" type="switchTransition" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>the type of transition required (cut, mix etc)</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="rate" type="switchRate" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>how fast should the transition be? </xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="audioOver">\r
+ <xs:complexType>\r
+ <xs:attribute name="transition" type="switchTransition" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>the type of transition required (cut, mix etc)</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="rate" type="switchRate" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>how fast should the transition be? </xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="percent" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>0% is off, 100% is fully on.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:integer">\r
+ <xs:minInclusive value="0"/>\r
+ <xs:maxInclusive value="100"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="pgmPercent">\r
+ <xs:annotation>\r
+ <xs:documentation>optional. Can be used alongside other rules to adjust the PGM volume when adding an audio over.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:integer">\r
+ <xs:minInclusive value="0"/>\r
+ <xs:maxInclusive value="100"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="logo">\r
+ <xs:complexType>\r
+ <xs:attribute name="transition" type="switchTransition" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>the type of transition required (cut, mix etc)</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="rate" type="switchRate" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>how fast should the transition be? </xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="logo" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>this can be a specific logo name or logo number as used in the physical device.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="audioMode">\r
+ <xs:annotation>\r
+ <xs:documentation>M2100 specific effect</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:attribute name="bus" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="PGM"/>\r
+ <xs:enumeration value="PST"/>\r
+ <xs:enumeration value="AP1"/>\r
+ <xs:enumeration value="AP2"/>\r
+ <xs:enumeration value="AP3"/>\r
+ <xs:enumeration value="AP4"/>\r
+ <xs:enumeration value="AP5"/>\r
+ <xs:enumeration value="AP6"/>\r
+ <xs:enumeration value="AP7"/>\r
+ <xs:enumeration value="AP8"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="mode" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="NoChange"/>\r
+ <xs:enumeration value="Stereo"/>\r
+ <xs:enumeration value="LeftMono"/>\r
+ <xs:enumeration value="RightMono"/>\r
+ <xs:enumeration value="Custom1"/>\r
+ <xs:enumeration value="Custom2"/>\r
+ <xs:enumeration value="Custom3"/>\r
+ <xs:enumeration value="Custom4"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="phase" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="NoChange"/>\r
+ <xs:enumeration value="Normal"/>\r
+ <xs:enumeration value="Reverse"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="dve">\r
+ <xs:annotation>\r
+ <xs:documentation>digital video effects properties</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:attribute name="effect" type="xs:string" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>the dve sequence name, number or id to be used.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="duration" type="timecode">\r
+ <xs:annotation>\r
+ <xs:documentation>option to override the dve's configured duration if supported by the device.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="audioShuffle">\r
+ <xs:complexType>\r
+ <xs:choice>\r
+ <xs:element name="macro" type="macroProperties"/>\r
+ <xs:element name="fixed">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="shuffle" maxOccurs="unbounded">\r
+ <xs:complexType>\r
+ <xs:attribute name="output" type="xs:string" use="required"/>\r
+ <xs:attribute name="input" type="xs:string" use="required"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:choice>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>based on type selected the appropriate child element should be completed</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Macro"/>\r
+ <xs:enumeration value="Fixed"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="validationMode" type="validationMode">\r
+ <xs:annotation>\r
+ <xs:documentation>Option to override the defualt list validation of these properties. Off turns off all validation. Warn sets warnings when errors are found. Update will update the properties with the correct data if it's wrong.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="audioClip">\r
+ <xs:annotation>\r
+ <xs:documentation>M2100 specific effect</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:attribute name="transition" type="switchTransition" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>the type of transition required (cut, mix etc)</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="rate" type="switchRate" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>how fast should the transition be? </xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="percent" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>0% is off, 100% is fully on.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:integer">\r
+ <xs:minInclusive value="0"/>\r
+ <xs:maxInclusive value="100"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="file">\r
+ <xs:annotation>\r
+ <xs:documentation>audio clip file to load as understood by the M2100</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:choice>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>the type of effect that is required. The matchin child element then also needs to be completed. </xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Keyer"/>\r
+ <xs:enumeration value="Audio Over"/>\r
+ <xs:enumeration value="Logo"/>\r
+ <xs:enumeration value="Audio Mode"/>\r
+ <xs:enumeration value="DVE"/>\r
+ <xs:enumeration value="Audio Shuffle"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="name">\r
+ <xs:annotation>\r
+ <xs:documentation>the name of the effect that is to be triggered. For example "AudioOver1, AudioOver2, DVE". These names are sourced from the third party device itself and are not configurable.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="eventClassification">\r
+ <xs:annotation>\r
+ <xs:documentation>Classification used in a list event where 'AutoAssociate' doesn't make sense.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexContent>\r
+ <xs:restriction base="classification"/>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="eventClassifications">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of event classifications</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexContent>\r
+ <xs:restriction base="classifications">\r
+ <xs:sequence>\r
+ <xs:element name="classification" type="eventClassification" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:restriction>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="eventProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for automation list events.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all minOccurs="0">\r
+ <xs:element name="comment" minOccurs="0">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="255"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:element>\r
+ <xs:element name="classifications" type="eventClassifications" minOccurs="0"/>\r
+ </xs:all>\r
+ <xs:attribute name="title" use="optional">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="reconcileKey" type="reconcileKey" use="optional"/>\r
+ <xs:attribute name="houseId">\r
+ <xs:annotation>\r
+ <xs:documentation>the houseID is a media level piece of data. However in many cases the PBS database may not be populated with this houseID information. This attribute allows the houseId to be displayed in the playlist UI. Note that it does NOT get updated into the database; or used in any way. It is for visual purposes only.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="validationMode" type="validationMode">\r
+ <xs:annotation>\r
+ <xs:documentation>Option to override the defualt list validation of these properties. Off turns off all validation. Warn sets warnings when errors are found. Update will update the properties with the correct data if it's wrong.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="eventType">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Insert"/>\r
+ <xs:enumeration value="Update"/>\r
+ <xs:enumeration value="Delete"/>\r
+ <xs:enumeration value="Handshake"/>\r
+ <xs:enumeration value="Heartbeat"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="featuresProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties allowed for an event feature.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="feature" maxOccurs="unbounded">\r
+ <xs:annotation>\r
+ <xs:documentation>You can have any number of additional features but only one of each type.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="properties" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:all>\r
+ <xs:element name="media" type="mediaSimple" minOccurs="0"/>\r
+ <xs:element name="mediaStream" type="mediaStreamProperties" minOccurs="0"/>\r
+ <xs:element name="macro" type="macroProperties" minOccurs="0"/>\r
+ <xs:element name="vps" type="vpsProperties" minOccurs="0"/>\r
+ <xs:element name="aspectRatio" type="aspectRatioProperties" minOccurs="0"/>\r
+ <xs:element name="fieldList" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:sequence maxOccurs="unbounded">\r
+ <xs:element name="field">\r
+ <xs:complexType>\r
+ <xs:attribute name="name" type="xs:string" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>custom field name</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="value" type="xs:string" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>value associated with the custom field name</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="effect" type="effectProperties" minOccurs="0"/>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" type="usageType" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of this feature. The properties valid for a feature depend on its type.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="healthFlag">\r
+ <xs:annotation>\r
+ <xs:documentation>A instance of a health flag applicable to a component.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="name" type="componentHealth"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="healthList">\r
+ <xs:annotation>\r
+ <xs:documentation>A list of all health flags applicable to a component</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="healthFlag" type="healthFlag" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="heartbeat">\r
+ <xs:annotation>\r
+ <xs:documentation>A representation of a connection heartbeat</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="auxXML" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Concession for custom metadata</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="historyProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for keeping track of object history.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="created" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:attribute name="author" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Name of the user that created this object.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="time" type="xs:dateTime" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Date and Time of creation.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="comment">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional comment by author.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="modified" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:attribute name="author" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Name of the user that modified this object.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="time" type="xs:dateTime" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Date and Time of modification.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="comment">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional comment by author.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:all>\r
+ <xs:attribute name="source">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional source identifier. This could be the original filename for example.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="ingestProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties used by ingest jobs</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="reviewJob" type="xs:boolean" use="required"/>\r
+ <xs:attribute name="reviewOffset" type="timecode" use="required"/>\r
+ <xs:attribute name="abortOnReviewFailure" type="xs:boolean" use="required"/>\r
+ <xs:attribute name="switchOnPrepare" type="xs:boolean" use="required"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="job">\r
+ <xs:annotation>\r
+ <xs:documentation>A single job</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="state" type="jobState" minOccurs="0"/>\r
+ <xs:element name="properties" type="jobProperties" minOccurs="0"/>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of this job.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Transfer"/>\r
+ <xs:enumeration value="Delete"/>\r
+ <xs:enumeration value="Thumbnail"/>\r
+ <xs:enumeration value="Demo"/>\r
+ <xs:enumeration value="Assistant"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="uid">\r
+ <xs:annotation>\r
+ <xs:documentation>This is the internal id for the event which is useful for debugging. It is ignored when loading the list.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="jobList">\r
+ <xs:annotation>\r
+ <xs:documentation>A List of jobs.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="job" type="job" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="jobListProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a job list.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="history" type="historyProperties" minOccurs="0"/>\r
+ <xs:element name="auxData" type="xs:anyType" minOccurs="0"/>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="jobProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a job.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="secondaries" type="secondaries" minOccurs="0"/>\r
+ <xs:element name="media" type="media" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>For jobs that operate on media. \r
+\r
+You must at least specify the MediaName and Media type, however you can specify much more information if required. \r
+\r
+For example\r
+1.) if you want to delete all instances of a piece of media the just specify the MediaName and MediaType, then set "global" to true on the delete element.\r
+2.) if you want to delete specific instances of a piece of media then specify which ones using the mediaInstances element. \r
+\r
+When ingesting material the meta data specified here is used to update the media database.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="transfer" type="transfer" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Can be specified for transfer jobs. \r
+\r
+If the transfer is an ingest job this gives a hint as to the final destination of the media but can be overridden by the operators. \r
+\r
+For all other types of transfer this MUST be specified.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="delete" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Must be specified for delete jobs. \r
+\r
+At present there are no individual delete properties but an empty element must exist.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:attribute name="confirmed" type="xs:boolean" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>States whether the job is confirmed for deletion.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="global" type="xs:boolean" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>States whether the job will delete all media instances across the system.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="deleteMediaRecord" type="xs:boolean" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>States whether the job will delete the media record.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="crossDomain" type="xs:boolean">\r
+ <xs:annotation>\r
+ <xs:documentation>Informs whether the delete job is a cross domain one.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="priority" type="priority" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>You can use this to specify the priority of the job, \r
+\r
+It's not used for all type of job and is assumed to be low priority if it's omitted.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="mediaStream" type="mediaStreamIngestProperties" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>For ingest transfer jobs you can specify the som, duration and video properties where the jobType will always be record.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="auxData" type="xs:anyType" minOccurs="0"/>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="jobState">\r
+ <xs:annotation>\r
+ <xs:documentation>State of a job.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="state" type="automationStateType" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The job's current state.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="stateHint" type="xs:string" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>A hint describing the job's state.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="stateModifiedTime" type="dateTimecode" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>DateTime the job's state was last modified by the system.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="keepItem">\r
+ <xs:annotation>\r
+ <xs:documentation>A single item to keep</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="properties" type="keepItemProperties"/>\r
+ </xs:sequence>\r
+ <xs:attribute name="uid">\r
+ <xs:annotation>\r
+ <xs:documentation>This is the internal id for the keep item which is useful for debugging. It is ignored when loading the list.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="keepItemProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a keepItem</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="media" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>The media name/type of the item that needs to be kept</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:complexContent>\r
+ <xs:extension base="mediaSimpleLoose">\r
+ <xs:sequence>\r
+ <xs:element name="mediaInstances" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="mediaInstance" maxOccurs="unbounded">\r
+ <xs:complexType>\r
+ <xs:attributeGroup ref="mediaInstanceKeyLoose"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="expiry" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>For how long must the item(s) be kept? this expiry time denotes when the item no longer needs to be forcibly kept above other rules in the system.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:attribute name="time" type="dateTime"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="auxData" type="xs:anyType" minOccurs="0"/>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="keepList">\r
+ <xs:annotation>\r
+ <xs:documentation>A List of items to keep</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence maxOccurs="unbounded">\r
+ <xs:element name="keepItem" type="keepItem"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="keepListProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a keep list.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexContent>\r
+ <xs:extension base="jobListProperties"/>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="languages">\r
+ <xs:annotation>\r
+ <xs:documentation>A representation of a group of languages.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="lang" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="lastModifiedDateTimeRange">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a last update time timecode range (start -> end)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="start" type="dateTime" use="required"/>\r
+ <xs:attribute name="end" type="dateTime" use="required"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="layers">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of layers</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="layer" maxOccurs="10">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="listStreamAllocation">\r
+ <xs:annotation>\r
+ <xs:documentation>Date for list stream allocation</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Fixed"/>\r
+ <xs:enumeration value="Auto"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="listStreamNo" use="optional">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:int">\r
+ <xs:minInclusive value="0"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="listStreamAllocationProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties used by automation lists for allocation</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:choice minOccurs="0">\r
+ <xs:element name="listStream" type="listStreamAllocation">\r
+ <xs:annotation>\r
+ <xs:documentation>if type = listStream then this must be completed</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:choice>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="ListStream"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="macroProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for a macro event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="value" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The value of the macro. e.g. If the event type is Logo this may be LogoOn or LogoOff.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="markup">\r
+ <xs:annotation>\r
+ <xs:documentation>A named collection of markup items</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">\r
+ <xs:element name="markupItem" type="markupItem">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a segment or keyframe</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="name" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the markup to which the markupItems belong.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="complete" type="xs:boolean" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Indicates whether the markup item data represents the complete markup, or only an incremental update.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="markupItem">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a segment or keyframe. Presence of a valid duration indicates a segment, otherwise interpreted as a keyframe.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of the markup item. If "Template" the item represents an item in a predefined template. If "Dynamic" the item is not part of a template. It is possible to mix dynamic and template items in a single markup.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Dynamic"/>\r
+ <xs:enumeration value="Template"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="orderNo" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The 1 based position of the item within the markup.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:unsignedByte">\r
+ <xs:minInclusive value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="name" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the item (e.g. "Part1", "Break")</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="som" type="timecode">\r
+ <xs:annotation>\r
+ <xs:documentation>The timecode of the start of a segment or the position of a keyframe.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="duration" type="timecode" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The duration of a segment. This attribute should be absent when specifying a keyframe.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="comment" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>A user defined comment that may be displayed in certain user interfaces.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="256"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="offset" type="xs:int" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>For non-thumbnail types this value stores the offset from the SOM for the thumbnail.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="markups">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of markup elements</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence maxOccurs="unbounded">\r
+ <xs:element name="markup" type="markup">\r
+ <xs:annotation>\r
+ <xs:documentation>A named collection of markupItems</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="media">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a piece of media with associated metadata. Make sure the creationTime is in the format 2017-03-23T14:11:00 [YYYY-MM-DD]T[HH:MM:SS] otherwise XML validation will fail.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="auxXML" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Concession for custom metadata</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ <xs:attribute name="processor" use="optional">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="255"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="properties" type="mediaProperties" minOccurs="0"/>\r
+ <xs:element name="mediaInstances" type="mediaInstanceList" minOccurs="0"/>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="mediaKey"/>\r
+ <xs:attributeGroup ref="mediaBaseAttributes"/>\r
+ </xs:complexType>\r
+ <xs:attributeGroup name="mediaBaseAttributes">\r
+ <xs:attribute name="title" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional title for media</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="origSOM" type="timecode" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Original SOM where media was located on tape (only used if media is scheduled by OrigSOM)</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="creationTime" type="dateTime" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>DateTime this media was first seen by the system</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="modifiedTime" type="dateTime" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>DateTime this media was last modified by the system</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="mediaId" type="xs:int" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Internal Marina media UID</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="houseId" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional house Id for media</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:maxLength value="64"/>\r
+ <xs:minLength value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="alternateId" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional alternate Id for media</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:maxLength value="64"/>\r
+ <xs:minLength value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="validityStartTime" type="dateTime" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Date and time media becomes valid</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="validityEndTime" type="dateTime" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Date and time media becomes invalid</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="eventPlayCount" type="xs:int" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The number of times this media has been played to air.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="firstEventPlayTime" type="dateTimecode" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The date and time that this media was first played to air.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="lastEventPlayTime" type="dateTimecode" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The date and time of the last time this media was played to air.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="notes" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Free text field for any media notes</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="255"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:attributeGroup>\r
+ <xs:complexType name="mediaInstance">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of the metadata for an instance of a piece of media. This type is intended to be embedded inside an element with a specified mediaKey</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="auxXML" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Concession for custom metadata</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="properties" type="mediaInstanceProperties" minOccurs="0"/>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="mediaInstanceKey"/>\r
+ <xs:attributeGroup ref="mediaInstanceBaseAttributes"/>\r
+ </xs:complexType>\r
+ <xs:attributeGroup name="mediaInstanceBaseAttributes">\r
+ <xs:attribute name="versionHint" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Textual hint for this version</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="duration" type="timecode" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Duration of this instance</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="creationStartTime" type="dateTimecode" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Time at which this instance started creation</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="creationEndTime" type="dateTimecode" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Time at which this instance ended creation</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="creationHint" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Textual hint set during the creation process</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="origSOM" type="timecode" use="optional"/>\r
+ <xs:attribute name="mediaInstanceId" type="xs:int" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Internal Marina media instance UID</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="nativeSize" type="xs:unsignedLong" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Size of the media in bytes</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="sourceURL" type="xs:string" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Source url of the media instance</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="destURL" type="xs:string" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Destination URL of the media instance</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="deleteAll" type="xs:boolean" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>When deleting media, set this to true to delete all instances in the specified mediaSet. For example, on a device supporting subdirectories, delete from all subdirectories.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:attributeGroup>\r
+ <xs:attributeGroup name="mediaInstanceKey">\r
+ <xs:annotation>\r
+ <xs:documentation>Composite Key for MediaInstance</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaSetName" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Name of server or tape on which this instance is located</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="version" type="xs:int" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Version number of media instance</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="position" type="xs:string" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Position of this instance on a data tape, OR the instanceSOM for a tape/server instance</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="directory" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Directory in which this instance is located (only used for raw file systems e.g. NAS, FTP). If not specified defaults to the root of the device.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="255"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="filename" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Filename of this instance on the file system (only used for raw file systems e.g. NAS, FTP)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="directoryId" type="xs:integer">\r
+ <xs:annotation>\r
+ <xs:documentation>The internal Id of the directory containing the media instance.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:attributeGroup>\r
+ <xs:attributeGroup name="mediaInstanceKeyLoose">\r
+ <xs:annotation>\r
+ <xs:documentation>Composite Key for MediaInstance but where all attributes are optional</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaSetName" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Name of server or tape on which this instance is located</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="version" type="xs:int" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Version number of media instance</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="position" type="xs:string" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Position of this instance on a data tape, OR the instanceSOM for a tape/server instance</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="directory" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Directory in which this instance is located (only used for raw file systems e.g. NAS, FTP)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="255"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="filename" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Filename of this instance on the file system (only used for raw file systems e.g. NAS, FTP)</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:attributeGroup>\r
+ <xs:complexType name="mediaInstanceList">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of media instances</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="mediaInstance" type="mediaInstance" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="mediaInstanceProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a media instance</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="audioTracks" type="audioTracks" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>This is depreciated use the audio tag instead.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="audio" type="audio" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Audio and Audio Group metadata.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="classifications" type="classifications" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of classifications</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="mediaInstanceUsage">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of the usage of a media instance</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaSetName" type="mediaSetName" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Name of server or tape on which this instance is located</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="available" type="xs:boolean" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Flag to indicate that the media instance exists on the specified media set</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="lastUsageTime" type="dateTimecode" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The latest time at which this media instance is required for playout.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="lastUsageList" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The media instance last usage tx list name.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="lastUsageListUID" type="xs:integer" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The last usage event UID assigned by the list.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="earliestUsageTime" type="dateTimecode" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The earliest time at which this media instance is required for playout.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="earliestUsageList" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The media instance earliest usage tx list name.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:maxLength value="64"/>\r
+ <xs:minLength value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="earliestUsageListUID" type="xs:integer" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The earliest usage event UID assigned by the list.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="listMediaUsageId" type="xs:int" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The unique instance id for this usage instance.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:attributeGroup name="mediaKey">\r
+ <xs:annotation>\r
+ <xs:documentation>Composite key for media</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaName" type="mediaName" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Textual identifier for a piece of media (e.g. server id)</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="mediaType" type="mediaType" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Type of media (see enum)</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:attributeGroup>\r
+ <xs:complexType name="mediaList">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a collection of media. 0 or more instances may also be specified</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="media" type="media" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:simpleType name="mediaName">\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="mediaProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a piece of media. Does not include properties of instances of that media</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="classifications" type="classifications" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of classifications</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="markups" type="markups" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of markups</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="mediaSegmentationProperites">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for segmenting media.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="markup" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:attribute name="name" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the item (e.g. "Part1", "Break")</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="orderNo" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The 1 based position of the item within the markup.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:unsignedByte">\r
+ <xs:minInclusive value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="User"/>\r
+ <xs:enumeration value="Media"/>\r
+ <xs:enumeration value="Markup"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="validationMode" type="validationMode">\r
+ <xs:annotation>\r
+ <xs:documentation>Option to override the defualt list validation of these properties. Off turns off all validation. Warn sets warnings when errors are found. Update will update the properties with the correct data if it's wrong.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="mediaSet">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a piece of media with associated metadata. Make sure the creationTime is in the format 2017-03-23T14:11:00 [YYYY-MM-DD]T[HH:MM:SS] otherwise XML validation will fail.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="auxXML" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Concession for custom metadata</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="mediaSetKey"/>\r
+ <xs:attribute name="serialNumber" type="xs:string"/>\r
+ <xs:attribute name="model" type="xs:string"/>\r
+ <xs:attribute name="capacity" type="xs:string"/>\r
+ <xs:attribute name="firstWritePosition" type="xs:string"/>\r
+ <xs:attribute name="lastWritePosition" type="xs:string"/>\r
+ <xs:attribute name="gapSize" type="xs:string"/>\r
+ <xs:attribute name="nextWritePosition" type="xs:string"/>\r
+ <xs:attribute name="freeSpace" type="xs:string"/>\r
+ <xs:attribute name="fragmentationMetric" type="xs:int"/>\r
+ <xs:attribute name="mountCount" type="xs:int"/>\r
+ <xs:attribute name="lastUsedTime" type="xs:string"/>\r
+ <xs:attribute name="performance" type="xs:int"/>\r
+ <xs:attribute name="textColour" type="xs:int"/>\r
+ <xs:attribute name="backColour" type="xs:int"/>\r
+ <xs:attribute name="formFactor" type="xs:string"/>\r
+ <xs:attribute name="mediaSetLocationType" type="xs:string"/>\r
+ <xs:attribute name="mediaSetLocation" type="xs:string"/>\r
+ <xs:attribute name="mediaSetLocationAddress" type="xs:string"/>\r
+ <xs:attribute name="previousMediaSetLocationType" type="xs:string"/>\r
+ <xs:attribute name="previousMediaSetLocationAddress" type="xs:string"/>\r
+ <xs:attribute name="previousMediaSetLocation" type="xs:string"/>\r
+ </xs:complexType>\r
+ <xs:attributeGroup name="mediaSetKey">\r
+ <xs:annotation>\r
+ <xs:documentation>Composite key for media set</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaSetName" type="mediaSetName" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Textual identifier for a media set (e.g. server name)</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="mediaSetType" type="mediaSetType" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Type of media set (see enum)</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:attributeGroup>\r
+ <xs:simpleType name="mediaSetName">\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="mediaSetType">\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="32"/>\r
+ <xs:enumeration value="Disk"/>\r
+ <xs:enumeration value="Unknown Tape"/>\r
+ <xs:enumeration value="SingleSpot Tape"/>\r
+ <xs:enumeration value="MultiSpot Tape"/>\r
+ <xs:enumeration value="Archive Tape"/>\r
+ <xs:enumeration value="Foreign Tape"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="mediaSimple">\r
+ <xs:annotation>\r
+ <xs:documentation>A simple representation of a piece of media, used in the list and other places where only the key is required.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaName" type="mediaName" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The unique name for the media, also know as MediaId.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="mediaType" type="mediaType" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of the media, e.g. Video or Subtitle.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="mediaSimpleLoose">\r
+ <xs:annotation>\r
+ <xs:documentation>A simple representation of a piece of media, but where all attributes are optional. Used in the keep list</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaName" type="mediaName" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The unique name for the media, also know as MediaId.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="mediaType" type="mediaType" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of the media, e.g. Video or Subtitle.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="mediaStreamIngestProperties">\r
+ <xs:complexContent>\r
+ <xs:extension base="mediaStreamProperties">\r
+ <xs:attribute name="duration"/>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="mediaStreamProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Media Stream Job Properties</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:choice minOccurs="0">\r
+ <xs:element name="video" type="videoProperties"/>\r
+ <xs:element name="cg" type="cgProperties"/>\r
+ <xs:element name="subtitle" type="subtitleProperties"/>\r
+ </xs:choice>\r
+ <xs:element name="allocation" type="listStreamAllocationProperties" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Allocation is not used in all lists.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="segment" type="mediaSegmentationProperites" minOccurs="0"/>\r
+ </xs:sequence>\r
+ <xs:attribute name="som" type="timecode" use="optional"/>\r
+ </xs:complexType>\r
+ <xs:simpleType name="mediaType">\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="32"/>\r
+ <xs:enumeration value="Video"/>\r
+ <xs:enumeration value="CG"/>\r
+ <xs:enumeration value="Subtitle"/>\r
+ <xs:enumeration value="Audio"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="mediaUsage">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a piece of media's usage and availability in the system</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="mediaInstancesUsage" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Collection of media instance usage records. This is only returned if the media is actually being used in a playlist.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:element name="mediaInstanceUsage" type="mediaInstanceUsage" maxOccurs="unbounded">\r
+ <xs:annotation>\r
+ <xs:documentation>Usage information for a media instance</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="mediaKey"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="mediaUsageList">\r
+ <xs:annotation>\r
+ <xs:documentation>Representation of a collection of media usage elements</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="mediaUsage" type="mediaUsage" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:simpleType name="moreResults">\r
+ <xs:annotation>\r
+ <xs:documentation>Used in media and job lists to show if there are more results than could be returned</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:boolean"/>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="objectType">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Media"/>\r
+ <xs:enumeration value="MediaInstance"/>\r
+ <xs:enumeration value="MediaSet"/>\r
+ <xs:enumeration value="ListEvent"/>\r
+ <xs:enumeration value="TxSegment"/>\r
+ <xs:enumeration value="WorkflowTask"/>\r
+ <xs:enumeration value="Category"/>\r
+ <xs:enumeration value="Classification"/>\r
+ <xs:enumeration value="ActiveObject"/>\r
+ <xs:enumeration value="User"/>\r
+ <xs:enumeration value="UserGroup"/>\r
+ <xs:enumeration value="System"/>\r
+ <xs:enumeration value="Class"/>\r
+ <xs:enumeration value="Field"/>\r
+ <xs:enumeration value="Host"/>\r
+ <xs:enumeration value="Node"/>\r
+ <xs:enumeration value="Layout"/>\r
+ <xs:enumeration value="MediaStream"/>\r
+ <xs:enumeration value="MediaMarkupItem"/>\r
+ <xs:enumeration value="UsageTypeAuListXref"/>\r
+ <xs:enumeration value="Directory"/>\r
+ <xs:enumeration value="Tag"/>\r
+ <xs:enumeration value="Markup"/>\r
+ <xs:enumeration value="MarkupItem"/>\r
+ <xs:enumeration value="AutomationJob"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="playlistActionEvent">\r
+ <xs:annotation>\r
+ <xs:documentation>An action is a single shot event that performs one task only. It has no duration and no monitoring.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="properties" type="playlistActionEventProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>The properties required for an event depend on its type. See the playlist documentation for more details.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="childEvents" type="playlistSecondaryEventList" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>The are the events secondaries. Marina supports a maximum of three levels from the root (primary) event so you can have two levels of secondary events.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="state" type="state" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>optional state node</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="playlistEventAttributes"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="playlistActionEventEffectProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for effects in the context of a playlistActionEvent</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexContent>\r
+ <xs:extension base="effectProperties">\r
+ <xs:attribute name="status" type="statusEnum" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The status of the effect, i.e. On or Off</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="playlistActionEventProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties allowed for an action event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="schedule" type="actionScheduleProperties" minOccurs="0"/>\r
+ <xs:element name="event" type="eventProperties" minOccurs="0"/>\r
+ <xs:element name="switch" type="switchProperties" minOccurs="0"/>\r
+ <xs:element name="trigger" type="triggerProperties" minOccurs="0"/>\r
+ <xs:element name="effect" type="playlistActionEventEffectProperties" minOccurs="0"/>\r
+ <xs:element name="macro" type="macroProperties" minOccurs="0"/>\r
+ <xs:element name="dolphinGraphic" type="dolphinGraphicProperties" minOccurs="0"/>\r
+ <xs:element name="auxData" type="xs:anyType" minOccurs="0"/>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:attributeGroup name="playlistEventAttributes">\r
+ <xs:annotation>\r
+ <xs:documentation>Attributes for a playlist event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="type" type="usageType" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of this event, this could be one of the default enumerations or a custom type for a specific customer or site.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="enabled" type="xs:boolean" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>A disabled event is ignored by the list. If omitted this value is assumed to be true.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="timerMarker" type="xs:boolean" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>If true the event can be used as a maker for list timers. If omitted it is assumed to be false.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="uid" type="xs:integer" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The internal Id of the event. Useful for debugging and is ignored on list load.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="manualSecondary" type="xs:boolean" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Manual Secondary event tag. Useful for catching such jobs. If omitted it is assumed to be false</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:attributeGroup>\r
+ <xs:complexType name="playlistPrimaryEvent">\r
+ <xs:annotation>\r
+ <xs:documentation>A single playlist event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="state" type="state" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional state node</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="properties" type="playlistPrimaryEventProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>The properties required for an event depend on it's type. See the playlist documentation for more details.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="childEvents" type="playlistSecondaryEventList" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>The child events are this event's secondaries. Marina supports a maximum of three levels from the root event.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="playlistEventAttributes"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="playlistPrimaryEventList">\r
+ <xs:annotation>\r
+ <xs:documentation>A List of primary events.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="event" type="playlistPrimaryEvent" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="playlistPrimaryEventProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a playlist event</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="schedule" type="primaryScheduleProperties" minOccurs="0"/>\r
+ <xs:element name="mediaStream" type="mediaStreamProperties" minOccurs="0"/>\r
+ <xs:element name="event" type="eventProperties" minOccurs="0"/>\r
+ <xs:element name="switch" type="switchProperties" minOccurs="0"/>\r
+ <xs:element name="trigger" type="triggerProperties" minOccurs="0"/>\r
+ <xs:element name="effect" type="effectProperties" minOccurs="0"/>\r
+ <xs:element name="media" type="mediaSimple" minOccurs="0"/>\r
+ <xs:element name="features" type="featuresProperties" minOccurs="0"/>\r
+ <xs:element name="auxData" type="xs:anyType" minOccurs="0"/>\r
+ <xs:element name="block" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:attribute name="name" use="required"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="playlistProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a playlist</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="history" type="historyProperties" minOccurs="0"/>\r
+ <xs:element name="channel" type="channelProperties" minOccurs="0"/>\r
+ <xs:element name="auxData" type="xs:anyType" minOccurs="0"/>\r
+ <xs:element name="status" type="statusProperties" minOccurs="0"/>\r
+ <xs:element name="timecode" type="timecodeProperties" minOccurs="0"/>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="playlistSecondaryEvent">\r
+ <xs:annotation>\r
+ <xs:documentation>A secondary event, can have a start, end or start and end. This allows starting an event (logo on) with one secondary and stopping it (logo off) with another secondary.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="state" type="state" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Optional state node</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="properties" type="playlistSecondaryEventProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>The properties required for an event depend on its type. See the playlist documentation for more details.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="childEvents" type="playlistSecondaryEventList" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>The are the events secondaries. Marina supports a maximum of three levels from the root (primary) event so you can have two levels of secondary events.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attributeGroup ref="playlistEventAttributes"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="playlistSecondaryEventList">\r
+ <xs:annotation>\r
+ <xs:documentation>A List of secondary events and actions.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">\r
+ <xs:choice>\r
+ <xs:element name="event" type="playlistSecondaryEvent"/>\r
+ <xs:element name="action" type="playlistActionEvent"/>\r
+ </xs:choice>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="playlistSecondaryEventProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a secondary event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="schedule" type="secondaryScheduleProperties" minOccurs="0"/>\r
+ <xs:element name="mediaStream" type="mediaStreamProperties" minOccurs="0"/>\r
+ <xs:element name="event" type="eventProperties" minOccurs="0"/>\r
+ <xs:element name="switch" type="switchProperties" minOccurs="0"/>\r
+ <xs:element name="trigger" type="triggerProperties" minOccurs="0"/>\r
+ <xs:element name="effect" type="effectProperties" minOccurs="0"/>\r
+ <xs:element name="media" type="mediaSimple" minOccurs="0"/>\r
+ <xs:element name="auxData" type="xs:anyType" minOccurs="0"/>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="primaryScheduleProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Scheduling properties for a primary event</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexContent>\r
+ <xs:extension base="actionScheduleProperties">\r
+ <xs:attribute name="endType" type="scheduledEndType">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumerated End Type</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="endOffset" type="timecode">\r
+ <xs:annotation>\r
+ <xs:documentation>Offset or Duration</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:extension>\r
+ </xs:complexContent>\r
+ </xs:complexType>\r
+ <xs:complexType name="priority">\r
+ <xs:annotation>\r
+ <xs:documentation>Internal properties for a priority.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:choice>\r
+ <xs:element name="requiredTime" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:attribute name="time" type="dateTimecode" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The time for which the request is required by.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="relative" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:attribute name="priority" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The priority level (Low, Medium or High).</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Low"/>\r
+ <xs:enumeration value="Medium"/>\r
+ <xs:enumeration value="High"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:choice>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of the priority (RequiredTime or Relative).</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="RequiredTime"/>\r
+ <xs:enumeration value="Relative"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="reconcileKey">\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="recordSourceProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties used by automation lists for record sources</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:choice>\r
+ <xs:element name="auto">\r
+ <xs:complexType>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Specifies a type of automatic record, e.g. PrimaryVideo</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string"/>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:choice>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>If "Auto" is selected the auto child element should be completed, otherwise an explicit source can be defined in the switch properties of the event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Auto"/>\r
+ <xs:enumeration value="Explicit"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="redundancyRole">\r
+ <xs:annotation>\r
+ <xs:documentation>Redundancy Role</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Main"/>\r
+ <xs:enumeration value="Backup"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="requestProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Resource request parameters</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="requester">\r
+ <xs:annotation>\r
+ <xs:documentation>Information about who is making the request. Most of the attributes are for the UI renderers.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="TxList"/>\r
+ <xs:enumeration value="TxListUI"/>\r
+ <xs:enumeration value="StreamControllerUI"/>\r
+ <xs:enumeration value="DebugUI"/>\r
+ <xs:enumeration value="DBMediaCache"/>\r
+ <xs:enumeration value="ListMacroProcessor"/>\r
+ <xs:enumeration value="CommercialList"/>\r
+ <xs:enumeration value="LiveIngest"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="comment">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="odid">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:integer">\r
+ <xs:minInclusive value="0"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="bucketId">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:integer">\r
+ <xs:minInclusive value="0"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="username">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="userId">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:integer">\r
+ <xs:minInclusive value="0"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="uid">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="mediaLocation" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Used for RML requests, controlled by parent's type attribute.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:attribute name="resourceType" type="xs:string" use="required"/>\r
+ <xs:attribute name="resourceName" type="xs:string" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the requested resource. Media set name in case of tape, Media Set Location Address Id in case of bin and device name in case of RML device.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>For requests of type 'Media' the media properties must also be filled in.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="MediaStream"/>\r
+ <xs:enumeration value="Media"/>\r
+ <xs:enumeration value="TxList"/>\r
+ <xs:enumeration value="TxListControl"/>\r
+ <xs:enumeration value="MoverList"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="lockType" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Shared"/>\r
+ <xs:enumeration value="Exclusive"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="expiryPeriod" type="timecode"/>\r
+ <xs:attribute name="system" type="xs:boolean"/>\r
+ <xs:attribute name="comment">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="restrictionProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of restricting xml loading.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="channel">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the channel the list has been created for.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="scheduledEndType">\r
+ <xs:annotation>\r
+ <xs:documentation>End Type for a scheduled event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Duration"/>\r
+ <xs:enumeration value="Hold"/>\r
+ <xs:enumeration value="+ParentStart"/>\r
+ <xs:enumeration value="-ParentStart"/>\r
+ <xs:enumeration value="+ParentEnd"/>\r
+ <xs:enumeration value="-ParentEnd"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="scheduledJob">\r
+ <xs:annotation>\r
+ <xs:documentation>A single scheduled job</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="state" type="jobState" minOccurs="0"/>\r
+ <xs:element name="properties" type="scheduledJobProperties" minOccurs="0"/>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of this job.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Scheduled Record"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="uid">\r
+ <xs:annotation>\r
+ <xs:documentation>This is the internal id for the event which is useful for debugging. It is ignored when loading the list.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="scheduledJobList">\r
+ <xs:annotation>\r
+ <xs:documentation>A List of scheduled jobs.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="job" type="scheduledJob" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="scheduledJobProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties of a scheduled job.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="schedule" type="scheduledJobScheduleProperties" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Contains data which is used to control the scheduling of this job.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="media" type="media" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>For jobs that operate on media. \r
+When ingesting material the meta data specified here is used to update the media database.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="source" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Typically this would be an input on a router, but could also be a media stream.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:choice>\r
+ <xs:element name="switch" type="switchAllocation">\r
+ <xs:annotation>\r
+ <xs:documentation>Here you can specify the source to be switched to the destination media streams.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="mediaStream" type="mediaStreamIngestProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>If the source is video. Here you can specify the som, duration and video properties for the source media. The jobType should always be Play.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:choice>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="destination" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:choice>\r
+ <xs:element name="mediaStreams">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:choice>\r
+ <xs:element name="video" type="videoProperties"/>\r
+ <xs:element name="cg" type="cgProperties"/>\r
+ <xs:element name="subtitle" type="subtitleProperties"/>\r
+ </xs:choice>\r
+ <xs:element name="mediaStream" type="mediaStreamIngestProperties" maxOccurs="unbounded">\r
+ <xs:annotation>\r
+ <xs:documentation>Here you can specify the som, duration and video properties for each destination stream. The jobType should always be Record.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="overwrite">\r
+ <xs:annotation>\r
+ <xs:documentation>Control default overwrite behaviour.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="recordSOMType">\r
+ <xs:annotation>\r
+ <xs:documentation>Only valid when jobType="record". If omitted explicit is assumed. Explicit uses the SOM set in the mediaStreamElement. TimeOfDay uses the house timecode of when the recording started.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Explicit"/>\r
+ <xs:enumeration value="TimeOfDay"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="som" type="timecode" use="optional"/>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:choice>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="review" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:choice>\r
+ <xs:element name="mediaStreams">\r
+ <xs:complexType>\r
+ <xs:sequence maxOccurs="unbounded">\r
+ <xs:element name="mediaStream" type="mediaStreamIngestProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Here you can specify the som, duration and video properties for each review stream. The jobType should always be Play.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:choice>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="auxData" type="xs:anyType" minOccurs="0"/>\r
+ <xs:element name="ingest" type="ingestProperties" minOccurs="0"/>\r
+ </xs:all>\r
+ </xs:complexType>\r
+ <xs:complexType name="scheduledJobScheduleProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Scheduling properties for a scheduled job</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="startType" type="scheduledStartType">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumerated Start Type.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="startOffset" type="dateTimecodeOrTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>For Fixed starts this is a date time for Parent Start and End this is a timecode span offset.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="endType" type="scheduledEndType">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumerated End Type</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="endOffset" type="timecode">\r
+ <xs:annotation>\r
+ <xs:documentation>Offset or Duration</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="scheduledStartType">\r
+ <xs:annotation>\r
+ <xs:documentation>Start Type for a scheduled event.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Fixed"/>\r
+ <xs:enumeration value="Manual"/>\r
+ <xs:enumeration value="Sequential"/>\r
+ <xs:enumeration value="+ParentStart"/>\r
+ <xs:enumeration value="-ParentStart"/>\r
+ <xs:enumeration value="+ParentEnd"/>\r
+ <xs:enumeration value="-ParentEnd"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="secondaries">\r
+ <xs:annotation>\r
+ <xs:documentation>A List of secondary jobs.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:element name="secondary" type="job" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ <xs:complexType name="secondaryScheduleProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Scheduling properties for a secondary event</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="startType" type="scheduledStartType">\r
+ <xs:annotation>\r
+ <xs:documentation>Start type is optional and is used to turn an event on. Specify only the end type to turn an event off.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="startOffset" type="dateTimecodeOrTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>For Fixed starts this is a date time for Parent Start and End this is a timecode span offset.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="endType" type="scheduledEndType">\r
+ <xs:annotation>\r
+ <xs:documentation>Set this if you want to turn off a secondary event. If you specify both a startType and an endType you can turn an event on/off in a single event. It is not valid to have an end type of Duration if you have not specified a startType.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="endOffset" type="timecode">\r
+ <xs:annotation>\r
+ <xs:documentation>Offset or Duration</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="slot">\r
+ <xs:annotation>\r
+ <xs:documentation>The slot name can be one of the default enumerations or customers can have site specific slot names for GPI card slots.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:union memberTypes="slotEnum">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:union>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="slotEnum">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumeration of the default slot types.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Cue"/>\r
+ <xs:enumeration value="Play"/>\r
+ <xs:enumeration value="Crash Next"/>\r
+ <xs:enumeration value="Recue"/>\r
+ <xs:enumeration value="Pause"/>\r
+ <xs:enumeration value="Uncue"/>\r
+ <xs:enumeration value="Next"/>\r
+ <xs:enumeration value="Resume"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="startTimeState">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumeration of time status of an event</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="ROLLING"/>\r
+ <xs:enumeration value="FIXED_AND_COMMITTED"/>\r
+ <xs:enumeration value="FIXED_AND_UNCOMMITTED"/>\r
+ <xs:enumeration value="NULL"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="state">\r
+ <xs:attribute name="startTimeState" type="startTimeState" use="optional"/>\r
+ <xs:attribute name="scheduleStartTime" type="dateTimecode"/>\r
+ <xs:attribute name="estimatedStartTime" type="dateTimecode"/>\r
+ </xs:complexType>\r
+ <xs:simpleType name="statusEnum">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumeration of status types.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="On"/>\r
+ <xs:enumeration value="Off"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="statusProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for the status of the playlist when the mpl was created.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="listChangeCounts" type="changeCounts" minOccurs="0"/>\r
+ <xs:element name="changeCounts" type="changeCounts" minOccurs="0"/>\r
+ </xs:all>\r
+ <xs:attribute name="activeRegion" type="xs:string">\r
+ <xs:annotation>\r
+ <xs:documentation>Size of the active region.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="eventCount" type="xs:integer">\r
+ <xs:annotation>\r
+ <xs:documentation>Number of events in the playlist.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="prefMediaRedundancyRole" type="redundancyRole">\r
+ <xs:annotation>\r
+ <xs:documentation>Prefered redundancy role for media.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="prefLiveRedundancyRole" type="redundancyRole">\r
+ <xs:annotation>\r
+ <xs:documentation>Prefered redundancy role for live.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="focusIndex" type="xs:integer">\r
+ <xs:annotation>\r
+ <xs:documentation>Focus index.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="listState" type="xs:string">\r
+ <xs:annotation>\r
+ <xs:documentation>State of the TxList, as flags separated by an OR operator |. E.g. listState="Primary Prepared|Primary Running|Primary OnAir".</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="subtitleCaptionMode">\r
+ <xs:annotation>\r
+ <xs:documentation>Subtitle Captioning Mode.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="32"/>\r
+ <xs:enumeration value="Open"/>\r
+ <xs:enumeration value="Closed"/>\r
+ <xs:enumeration value="Mixed"/>\r
+ <xs:enumeration value="None"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="subtitleProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties used for subtitle parameters.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all minOccurs="0">\r
+ <xs:element name="auxXML" minOccurs="0">\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="languages" type="languages" minOccurs="0"/>\r
+ </xs:all>\r
+ <xs:attribute name="source">\r
+ <xs:annotation>\r
+ <xs:documentation>Set's the subtitle source such as File or Live. If omitted File will be assumed.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="File"/>\r
+ <xs:enumeration value="File+Live"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="captionMode" type="subtitleCaptionMode" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Sets the subtilers captioning mode.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="setting" type="xs:integer" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Profile number sent to Subtitle device under the guise of setting. This recalls profiles on the device to apply to the subtitle output i.e. HD/SD, font, colour, etc.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="switchAllocation">\r
+ <xs:annotation>\r
+ <xs:documentation>Allocation properties for a switch</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence>\r
+ <xs:choice>\r
+ <xs:element name="auto">\r
+ <xs:complexType>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of auto allocation. i.e. "MediaStream".</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ <xs:enumeration value="MediaStream"/>\r
+ <xs:enumeration value="PGM"/>\r
+ <xs:enumeration value="Parent"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="logical">\r
+ <xs:complexType>\r
+ <xs:attribute name="name" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>A name of a preconfigured allocation.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="fixed">\r
+ <xs:complexType>\r
+ <xs:attribute name="device" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The name of the device to switch. </xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="port" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Port on the device to switch. This can either be the port name or number.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:choice>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Indicates the appropriate child element should be created.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ <xs:enumeration value="Auto"/>\r
+ <xs:enumeration value="Logical"/>\r
+ <xs:enumeration value="Fixed"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="switchProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for jobs that contain switches</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="layers" type="layers" minOccurs="0"/>\r
+ <xs:element name="source" type="switchAllocation" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Source is mandatory however this can be specified using default properties in Marina and is therefore optional for a playlist.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="destination" type="switchAllocation" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Destination is mandatory however this can be specified using default properties in Marina and is therefore optional for a playlist.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ <xs:element name="backupSource" type="switchAllocation" minOccurs="0"/>\r
+ <xs:element name="backupDestination" type="switchAllocation" minOccurs="0"/>\r
+ </xs:all>\r
+ <xs:attribute name="transition" type="switchTransition" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The transition type. Usually only master control switchers support transitions, if you set a transition that is not supported or you don't set a transition a Cut will be used.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="rate" type="switchRate" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The rate of the transition. Usually only master control switchers support transitions, if you set a rate that is not supported or you don't set a rate Fast will be used.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="switchRate">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="[none]"/>\r
+ <xs:enumeration value="Fast"/>\r
+ <xs:enumeration value="Medium"/>\r
+ <xs:enumeration value="Slow"/>\r
+ <xs:enumeration value="Custom"/>\r
+ <xs:enumeration value="$INHERIT$"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="switchTransition">\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="[none]"/>\r
+ <xs:enumeration value="Cut"/>\r
+ <xs:enumeration value="Cut Fade"/>\r
+ <xs:enumeration value="Fade Cut"/>\r
+ <xs:enumeration value="U-Fade"/>\r
+ <xs:enumeration value="V-Fade"/>\r
+ <xs:enumeration value="Mix"/>\r
+ <xs:enumeration value="Wipe"/>\r
+ <xs:enumeration value="Custom1"/>\r
+ <xs:enumeration value="Custom2"/>\r
+ <xs:enumeration value="Custom3"/>\r
+ <xs:enumeration value="Custom4"/>\r
+ <xs:enumeration value="Custom5"/>\r
+ <xs:enumeration value="$INHERIT$"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="system">\r
+ <xs:annotation>\r
+ <xs:documentation>A representation of a system object</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="systemName" type="xs:string" use="required"/>\r
+ <xs:attribute name="systemId" type="xs:int" use="required"/>\r
+ </xs:complexType>\r
+ <xs:simpleType name="timecode">\r
+ <xs:restriction base="xs:string">\r
+ <xs:pattern value="([0-9][0-9][0-9]:)?([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]:([0-1][0-9]|2[0-4])"/>\r
+ <xs:pattern value="([0-9][0-9][0-9]:)?([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9];[0-2][0-9]"/>\r
+ <xs:pattern value="$INHERIT$"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="timecodeProperties">\r
+ <xs:attribute name="localTimeOffset" type="dateTimecodeOrTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>Offset for the Local Time.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="houseTime" type="dateTimecode">\r
+ <xs:annotation>\r
+ <xs:documentation>House Time.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="transfer">\r
+ <xs:annotation>\r
+ <xs:documentation>Internal properties for a transfer.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:sequence maxOccurs="unbounded">\r
+ <xs:element name="destination" type="transferDestination">\r
+ <xs:annotation>\r
+ <xs:documentation>The transfer's destination.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:element>\r
+ </xs:sequence>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of the transfer (Copy or Move).</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Copy"/>\r
+ <xs:enumeration value="Move"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="transferDestination">\r
+ <xs:annotation>\r
+ <xs:documentation>Internal properties for a transfer destination.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="mediaSetName" type="mediaSetName" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The mediaSet for the destination.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="mediaName" type="xs:string" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>The mediaName as created on the destination.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="overwrite" type="xs:boolean" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Whether or not an existing destination instance should be overwritten.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="triggerProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for trigger jobs</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:choice>\r
+ <xs:element name="macro">\r
+ <xs:complexType>\r
+ <xs:attribute name="name" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ <xs:element name="fixed">\r
+ <xs:complexType>\r
+ <xs:attribute name="slotCollectionName" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="0"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="slot" use="required"/>\r
+ <xs:attribute name="level" type="xs:boolean" use="required"/>\r
+ <xs:attribute name="pulse" use="optional">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="8"/>\r
+ <xs:maxLength value="8"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:choice>\r
+ <xs:attribute name="type" use="required">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Macro"/>\r
+ <xs:enumeration value="Fixed"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:simpleType name="usageType">\r
+ <xs:annotation>\r
+ <xs:documentation>The usage type can be one of the default enumerations or customers can have site specific usage types.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:union memberTypes="usageTypeEnum">\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:minLength value="1"/>\r
+ <xs:maxLength value="64"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:union>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="usageTypeEnum">\r
+ <xs:annotation>\r
+ <xs:documentation>Enumeration of the default usage types.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="PrimaryVideo"/>\r
+ <xs:enumeration value="SecVideo"/>\r
+ <xs:enumeration value="SecRecord"/>\r
+ <xs:enumeration value="CG"/>\r
+ <xs:enumeration value="Subtitle"/>\r
+ <xs:enumeration value="Live"/>\r
+ <xs:enumeration value="Comment"/>\r
+ <xs:enumeration value="Marker"/>\r
+ <xs:enumeration value="VPS"/>\r
+ <xs:enumeration value="AFD"/>\r
+ <xs:enumeration value="CommercialBlock"/>\r
+ <xs:enumeration value="BlockStart"/>\r
+ <xs:enumeration value="BlockEnd"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="user">\r
+ <xs:annotation>\r
+ <xs:documentation>A representation of a user object.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="auxXML" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Concession for custom metadata</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:all>\r
+ <xs:attribute name="username" type="xs:string" use="required"/>\r
+ <xs:attribute name="firstName" type="xs:string"/>\r
+ <xs:attribute name="lastName" type="xs:string"/>\r
+ <xs:attribute name="password" type="xs:string"/>\r
+ <xs:attribute name="language" type="xs:int"/>\r
+ <xs:attribute name="stylesheet" type="xs:int"/>\r
+ <xs:attribute name="userGroupName" type="xs:string"/>\r
+ </xs:complexType>\r
+ <xs:complexType name="userGroup">\r
+ <xs:annotation>\r
+ <xs:documentation>A representation of a user group object.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:all>\r
+ <xs:element name="auxXML" minOccurs="0">\r
+ <xs:annotation>\r
+ <xs:documentation>Concession for custom metadata</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:complexType>\r
+ <xs:sequence>\r
+ <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded"/>\r
+ </xs:sequence>\r
+ </xs:complexType>\r
+ </xs:element>\r
+ </xs:all>\r
+ <xs:attribute name="userGroupName" type="xs:string" use="required"/>\r
+ </xs:complexType>\r
+ <xs:simpleType name="validationMode">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties Validation Mode</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Off"/>\r
+ <xs:enumeration value="Warn"/>\r
+ <xs:enumeration value="Update"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:simpleType name="version">\r
+ <xs:restriction base="xs:string">\r
+ <xs:pattern value="(-?\d+\.?){2,4}"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ <xs:complexType name="videoProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties used by video media devices</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="tapeName" type="mediaSetName" use="optional">\r
+ <xs:annotation>\r
+ <xs:documentation>Used for ingest and tape playout in the playlist.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="jobType" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Play or Record</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Play"/>\r
+ <xs:enumeration value="Record"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="overwrite" type="xs:boolean">\r
+ <xs:annotation>\r
+ <xs:documentation>Only valid when jobType="record"</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="recordSOMType">\r
+ <xs:annotation>\r
+ <xs:documentation>Only valid when jobType="record". If omitted explicit is assumed. Explicit uses the SOM set in the mediaStreamElement. TimeOfDay uses the house timecode of when the recording started.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="Explicit"/>\r
+ <xs:enumeration value="TimeOfDay"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="recordInstanceSOMType">\r
+ <xs:annotation>\r
+ <xs:documentation>Controls how the SOM is written to the media during a record.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="OrigSOM"/>\r
+ <xs:enumeration value="ZeroSOM"/>\r
+ <xs:enumeration value="Explicit"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="disableRouting" type="xs:boolean">\r
+ <xs:annotation>\r
+ <xs:documentation>When set to true auto routing will be disabled and any explicit routing in the switchProperties xml will be ignored.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+ <xs:complexType name="vpsProperties">\r
+ <xs:annotation>\r
+ <xs:documentation>Properties for a VPS event</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:attribute name="aspectRatio" type="aspectRatio" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Aspect ratio of video.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="channelIdent" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>4 characters max with optional padded whitespace.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:whiteSpace value="preserve"/>\r
+ <xs:minLength value="1" fixed="false"/>\r
+ <xs:maxLength value="4"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="child" type="xs:boolean" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Suitable for children true/false.</xs:documentation>\r
+ </xs:annotation>\r
+ </xs:attribute>\r
+ <xs:attribute name="vpsCodeType" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>The type of time to send. If set to 'time' you must sepcify the dateTime attribute.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="time"/>\r
+ <xs:enumeration value="LC"/>\r
+ <xs:enumeration value="UC"/>\r
+ <xs:enumeration value="SC"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="dateTime">\r
+ <xs:annotation>\r
+ <xs:documentation>Date and time in the format 'dd-mmThh:mm'</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:pattern value="[0-3][0-9]-[0-1][0-9]T[0-2][0-9]:[0-6][0-9]"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ <xs:attribute name="audio" use="required">\r
+ <xs:annotation>\r
+ <xs:documentation>Type of audio.</xs:documentation>\r
+ </xs:annotation>\r
+ <xs:simpleType>\r
+ <xs:restriction base="xs:string">\r
+ <xs:enumeration value="stereo"/>\r
+ <xs:enumeration value="mono"/>\r
+ <xs:enumeration value="2channel"/>\r
+ </xs:restriction>\r
+ </xs:simpleType>\r
+ </xs:attribute>\r
+ </xs:complexType>\r
+</xs:schema>\r
--- /dev/null
+<jaxb:bindings\r
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="1.0">\r
+ <jaxb:bindings schemaLocation="include/MarinaTypes.xsd">\r
+ <jaxb:bindings node="//xs:complexType[@name='audio']/xs:sequence/xs:element[@name='tracks']/xs:complexType">\r
+ <jaxb:factoryMethod name="Audio_Tracks"/>\r
+ </jaxb:bindings>\r
+ </jaxb:bindings>\r
+</jaxb:bindings>\r
+\r
+<!--\r
+<jaxb:bindings\r
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="2.0">\r
+ <jaxb:bindings schemaLocation="include/MarinaTypes.xsd">\r
+ <jaxb:bindings node="//xs:complexType[@name='audio']/xs:sequence/xs:element[@name='tracks']/xs:complexType">\r
+ <jaxb:factoryMethod name="Audio_Tracks"/>\r
+ </jaxb:bindings>\r
+ </jaxb:bindings>\r
+</jaxb:bindings>\r
+\r
+\r
+<jaxws:bindings\r
+ schemaLocation="MarinaAPI.xsd"\r
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"\r
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"\r
+ xmlns="http://java.sun.com/xml/ns/jaxws"\r
+ xmlns:jaxws="http://java.sun.com/xml/ns/jaxws">\r
+ <enableWrapperStyle>true</enableWrapperStyle>\r
+ <jaxws:bindings schemaLocation="include/MarinaTypes.xsd">\r
+ <jaxws:bindings node="//xs:complexType[@name='audio']/xs:sequence/xs:element[@name='tracks']/xs:complexType">\r
+ <jaxws:factoryMethod name="Audio_Tracks"/>\r
+ </jaxws:bindings>\r
+ </jaxws:bindings>\r
+</jaxws:bindings>\r
+-->
\ No newline at end of file
--- /dev/null
+#Mon Jul 06 11:16:29 CEST 2020\r
+artifact.attached.p2metadata=C\:\\_workspace\\USER\\MediaCube\\server\\user.peablebeach.api\\target\\p2content.xml\r
+artifact.main=C\:\\_workspace\\USER\\MediaCube\\server\\user.peablebeach.api\\target\\user.peablebeach.api_1.0.0.jar\r
+artifact.attached.p2artifacts=C\:\\_workspace\\USER\\MediaCube\\server\\user.peablebeach.api\\target\\p2artifacts.xml\r
--- /dev/null
+#Generated by Maven\r
+#Mon Jul 06 11:16:28 CEST 2020\r
+version=1.0.0\r
+groupId=user.jobengine\r
+artifactId=user.peablebeach.api\r
--- /dev/null
+<?xml version='1.0' encoding='UTF-8'?>\r
+<?artifactRepository version='1.1.0'?>\r
+<artifacts size='1'>\r
+ <artifact classifier='osgi.bundle' id='user.peablebeach.api' version='1.0.0'>\r
+ <properties size='5'>\r
+ <property name='artifact.size' value='260728'/>\r
+ <property name='download.size' value='260728'/>\r
+ <property name='maven-groupId' value='user.jobengine'/>\r
+ <property name='maven-artifactId' value='user.peablebeach.api'/>\r
+ <property name='maven-version' value='1.0.0'/>\r
+ </properties>\r
+ </artifact>\r
+</artifacts>\r
--- /dev/null
+<?xml version='1.0' encoding='UTF-8'?>\r
+<units size='1'>\r
+ <unit id='user.peablebeach.api' version='1.0.0' singleton='false'>\r
+ <update id='user.peablebeach.api' range='[0.0.0,1.0.0)' severity='0'/>\r
+ <properties size='4'>\r
+ <property name='org.eclipse.equinox.p2.name' value='peablebeach-api'/>\r
+ <property name='maven-groupId' value='user.jobengine'/>\r
+ <property name='maven-artifactId' value='user.peablebeach.api'/>\r
+ <property name='maven-version' value='1.0.0'/>\r
+ </properties>\r
+ <provides size='4'>\r
+ <provided namespace='org.eclipse.equinox.p2.iu' name='user.peablebeach.api' version='1.0.0'/>\r
+ <provided namespace='osgi.bundle' name='user.peablebeach.api' version='1.0.0'/>\r
+ <provided namespace='java.package' name='hu.user.peablebeach.api' version='0.0.0'/>\r
+ <provided namespace='org.eclipse.equinox.p2.eclipse.type' name='bundle' version='1.0.0'/>\r
+ </provides>\r
+ <requires size='4'>\r
+ <required namespace='osgi.bundle' name='org.apache.httpcomponents.httpcore' range='0.0.0'/>\r
+ <required namespace='osgi.bundle' name='org.apache.httpcomponents.httpclient' range='0.0.0'/>\r
+ <required namespace='java.package' name='org.apache.commons.lang' range='2.6.0'/>\r
+ <required namespace='java.package' name='org.apache.logging.log4j' range='2.8.2'/>\r
+ </requires>\r
+ <artifacts size='1'>\r
+ <artifact classifier='osgi.bundle' id='user.peablebeach.api' version='1.0.0'/>\r
+ </artifacts>\r
+ <touchpoint id='org.eclipse.equinox.p2.osgi' version='1.0.0'/>\r
+ <touchpointData size='1'>\r
+ <instructions size='1'>\r
+ <instruction key='manifest'>\r
+ Bundle-SymbolicName: user.peablebeach.api
Bundle-Version: 1.0.0
\r
+ </instruction>\r
+ </instructions>\r
+ </touchpointData>\r
+ </unit>\r
+</units>\r
\r
public class TSMBufferedClient extends TSMClient {\r
private static final Logger logger = LogManager.getLogger();\r
- private static final String APPNAME = "JOBENGINE";\r
short rc = 0;\r
private DataBlk dataBlk;\r
\r
- // int length = 0;\r
- // int prevLength = 0;\r
-\r
- public TSMBufferedClient() throws Exception {\r
- super(APPNAME);\r
+ public TSMBufferedClient(String nodeName) throws Exception {\r
+ super(nodeName);\r
}\r
\r
public void finishReceive() throws TSMException {\r