From: Vásáry Dániel Date: Mon, 14 Sep 2020 21:16:31 +0000 (+0000) Subject: git-tfs-id: [http://tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube... X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=c706e5e2b8da6ade522ebcfc222c4d627a0ed96f;p=mediacube.git git-tfs-id: [tfs.userrendszerhaz.hu:8080/tfs/DefaultCollection]$/MediaCube;C31955 --- diff --git a/client/Maestro/Configuration/editor-mv.json b/client/Maestro/Configuration/editor-mv.json index 52ddf170..7aeac7c3 100644 --- a/client/Maestro/Configuration/editor-mv.json +++ b/client/Maestro/Configuration/editor-mv.json @@ -41,9 +41,8 @@ "label": "Adáskész", "processor": "FXPTargetProcessor", "outputFormat": "%ID%", - "reference": [ "Mentés" ], "saveSegments": true, - "subFolderFormat": "%SOURCEFOLDERNAME%", + "subFolderFormat": "%SOURCEFOLDERNAME%_%CUSTOMPART%", "tag": "Adáskész", "remote": { "address": "ftp://10.11.1.100/Promise/PROGRAM/TEST", @@ -65,15 +64,28 @@ "timeout": 1000 } }, - { - "label": "Mentés", - "readOnly": true, - "processor": "UNCTargetProcessor", - "outputFormat": "%SOURCENAME%", - "tag": "Mentés", - "subFolderFormat": "Transfered", - "moveToFolder": true + { + "label": "Mentés", + "readOnly": true, + "processor": "UNCTargetProcessor", + "subFolderFormat": "Transfered_%SOURCEFOLDERNAME%_%CUSTOMPART%", + "outputFormat": "%SOURCENAME%", + "tag": "Mentés", + "moveToFolder": true + }, + { + "label": "Mentés1", + "processor": "UNCTargetProcessor", + "subFolderFormat": "Transfered_%SOURCEFOLDERNAME%_%CUSTOMPART%", + "outputFormat": "%SOURCENAME%", + "tag": "Mentés1", + "remote": { + "address": "file://c:/_video", + "timeout": 1000 } + } + + ] } diff --git a/client/Maestro/MaestroForm.Target.cs b/client/Maestro/MaestroForm.Target.cs index 628ced8b..94ee4cdd 100644 --- a/client/Maestro/MaestroForm.Target.cs +++ b/client/Maestro/MaestroForm.Target.cs @@ -8,6 +8,7 @@ using Myriadbits.MXF; using System; using System.Collections.Generic; using System.ComponentModel; +using System.IO; using System.Linq; using System.Windows.Forms; @@ -78,6 +79,23 @@ namespace Maestro { private List CreateProcessors(Target target, CheckBox checkBox) { List result = null; DateTime createDate = DateTime.Now; + + string partReplace = null; + if ((!string.IsNullOrEmpty(target.SubFolderFormat) && target.SubFolderFormat.Contains(PatternNameMaker.PATTERN_CUSTOMPART)) + || !string.IsNullOrEmpty(target.OutputFormat) && target.OutputFormat.Contains(PatternNameMaker.PATTERN_CUSTOMPART)) { + partReplace = MsgBox.InputBox("Kérem adja meg a mappa/fájl nevének dinamikus részét!"); + if (string.IsNullOrEmpty(partReplace)) { + checkBox.Checked = false; + throw new Exception("A szöveg kitöltése kötelező."); + } + if (partReplace.Any(Path.GetInvalidFileNameChars().Contains)) { + checkBox.Checked = false; + throw new Exception("A név nem tartalmazhat speciális karaktereket."); + } + + MsgBox.Info(partReplace); + } + foreach (ISourceItem sourceItem in selectedSourceItems) { if (sourceItem == null) continue; @@ -106,7 +124,7 @@ namespace Maestro { TargetProcessorParameter processorParameter = null; try { - processorParameter = CreateProcessorParameter(target, sourceItem, createDate); + processorParameter = CreateProcessorParameter(target, sourceItem, createDate, partReplace); } catch (Exception e) { result = null; break; @@ -206,7 +224,7 @@ namespace Maestro { return true; } - private TargetProcessorParameter CreateProcessorParameter(Target target, ISourceItem sourceItem, DateTime createDate) { + private TargetProcessorParameter CreateProcessorParameter(Target target, ISourceItem sourceItem, DateTime createDate, string partReplace) { FileSystemSource source = bindingSource.DataSource as FileSystemSource; TargetProcessorParameter result = new TargetProcessorParameter(); @@ -232,16 +250,16 @@ namespace Maestro { result.Frames = sourceItem.Frames; result.TargetOrder = Configuration.Targets.ToList().IndexOf(target); result.SelectedSegments = SelectedMetadata?.Selected; - + result.PartReplace = partReplace; if (ArchiveMetadata != null) { result.ArchiveMetadata = ArchiveMetadata.DeepClone(ArchiveMetadata); result.ArchiveMetadata.duration = sourceItem.Frames; result.ArchiveMetadata.userName = result.UserName; if (SelectedMetadata.Kind == MetadataType.MediaCube) { - result.ArchiveMetadata.itemHouseId = PatternNameMaker.Get(result.ArchiveMetadata.itemHouseId, result.ID, null, result.InputFileName, null, null, result.MetadataText); - result.ArchiveMetadata.itemTitle = PatternNameMaker.Get(result.ArchiveMetadata.itemTitle, result.ID, null, result.InputFileName, null, null, result.MetadataText); - result.ArchiveMetadata.mediaHouseId = PatternNameMaker.Get(result.ArchiveMetadata.mediaHouseId, result.ID, null, result.InputFileName, null, null, result.MetadataText); - result.ArchiveMetadata.mediaTitle = PatternNameMaker.Get(result.ArchiveMetadata.mediaTitle, result.ID, null, result.InputFileName, null, null, result.MetadataText); + result.ArchiveMetadata.itemHouseId = PatternNameMaker.Get(result.ArchiveMetadata.itemHouseId, result.ID, null, result.InputFileName, null, null, result.MetadataText, null); + result.ArchiveMetadata.itemTitle = PatternNameMaker.Get(result.ArchiveMetadata.itemTitle, result.ID, null, result.InputFileName, null, null, result.MetadataText, null); + result.ArchiveMetadata.mediaHouseId = PatternNameMaker.Get(result.ArchiveMetadata.mediaHouseId, result.ID, null, result.InputFileName, null, null, result.MetadataText, null); + result.ArchiveMetadata.mediaTitle = PatternNameMaker.Get(result.ArchiveMetadata.mediaTitle, result.ID, null, result.InputFileName, null, null, result.MetadataText, null); } } return result; diff --git a/client/Maestro/Properties/AssemblyInfo.cs b/client/Maestro/Properties/AssemblyInfo.cs index 90b26c34..0b130400 100644 --- a/client/Maestro/Properties/AssemblyInfo.cs +++ b/client/Maestro/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.1.0.8")] -[assembly: AssemblyFileVersion("2.1.0.8")] +[assembly: AssemblyVersion("2.1.0.9")] +[assembly: AssemblyFileVersion("2.1.0.9")] diff --git a/client/MaestroShared/Commons/InputForm.Designer.cs b/client/MaestroShared/Commons/InputForm.Designer.cs new file mode 100644 index 00000000..1a881718 --- /dev/null +++ b/client/MaestroShared/Commons/InputForm.Designer.cs @@ -0,0 +1,88 @@ +namespace MaestroShared.Commons { + partial class InputForm { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) { + if (disposing && (components != null)) { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() { + this.txtText = new System.Windows.Forms.TextBox(); + this.btnOK = new System.Windows.Forms.Button(); + this.btnCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // txtText + // + this.txtText.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtText.Location = new System.Drawing.Point(12, 12); + this.txtText.Name = "txtText"; + this.txtText.Size = new System.Drawing.Size(380, 20); + this.txtText.TabIndex = 1; + // + // btnOK + // + this.btnOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnOK.Location = new System.Drawing.Point(317, 38); + this.btnOK.Name = "btnOK"; + this.btnOK.Size = new System.Drawing.Size(75, 23); + this.btnOK.TabIndex = 2; + this.btnOK.Text = "Rendben"; + this.btnOK.UseVisualStyleBackColor = true; + // + // btnCancel + // + this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(236, 38); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.Size = new System.Drawing.Size(75, 23); + this.btnCancel.TabIndex = 3; + this.btnCancel.Text = "Mégsem"; + this.btnCancel.UseVisualStyleBackColor = true; + // + // InputForm + // + this.AcceptButton = this.btnOK; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(404, 68); + this.Controls.Add(this.btnCancel); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.txtText); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "InputForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "InputForm"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox txtText; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnCancel; + } +} \ No newline at end of file diff --git a/client/MaestroShared/Commons/InputForm.cs b/client/MaestroShared/Commons/InputForm.cs new file mode 100644 index 00000000..8e5f1cc5 --- /dev/null +++ b/client/MaestroShared/Commons/InputForm.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace MaestroShared.Commons { + public partial class InputForm : Form { + public InputForm() { + InitializeComponent(); + } + + internal string getText() { + return txtText.Text; + } + + internal void setTitle(string label) { + Text = label; + } + } +} diff --git a/client/MaestroShared/Commons/InputForm.resx b/client/MaestroShared/Commons/InputForm.resx new file mode 100644 index 00000000..29dcb1b3 --- /dev/null +++ b/client/MaestroShared/Commons/InputForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/client/MaestroShared/Commons/MsgBox.cs b/client/MaestroShared/Commons/MsgBox.cs index f17a4d0f..7aa333be 100644 --- a/client/MaestroShared/Commons/MsgBox.cs +++ b/client/MaestroShared/Commons/MsgBox.cs @@ -2,6 +2,9 @@ namespace MaestroShared.Commons { public class MsgBox { + + private static InputForm inputForm; + public static void Info(string text) { MessageBox.Show(text, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Information); } @@ -21,5 +24,14 @@ namespace MaestroShared.Commons { public static bool YesNoQuestion(string text) { return MessageBox.Show(text, string.Empty, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes; } + public static string InputBox(string label) { + if (inputForm == null) + inputForm = new InputForm(); + + inputForm.setTitle(label); + if (inputForm.ShowDialog() == DialogResult.OK) + return inputForm.getText(); + return null; + } } } diff --git a/client/MaestroShared/Commons/PatternNameMaker.cs b/client/MaestroShared/Commons/PatternNameMaker.cs index 16e268a3..55205dee 100644 --- a/client/MaestroShared/Commons/PatternNameMaker.cs +++ b/client/MaestroShared/Commons/PatternNameMaker.cs @@ -1,6 +1,7 @@ using System; using System.Globalization; using System.IO; +using System.Linq; using System.Text; using System.Text.RegularExpressions; @@ -23,6 +24,7 @@ namespace MaestroShared.Commons { private const string PATTERN_SOURCESTARTID = "%SOURCESTARTID%"; private const string PATTERN_TIMESTAMP = "%TIMESTAMP%"; private const string PATTERN_DATESTAMP = "%DATESTAMP%"; + public const string PATTERN_CUSTOMPART = "%CUSTOMPART%"; private const string DATETIME_FORMAT = "yyyyMMddhhmmss"; private const string PATTERN_TEXT = "%TEXT%"; private const string UNDERSCORE = "_"; @@ -46,7 +48,7 @@ namespace MaestroShared.Commons { return result; } - static public string Get(string pattern, string id, string sourcePath, string inputName, string outputName, string userName, string text, DateTime? storedDateTime = null, string json = null, string itemTitle = null, string mediaTitle = null, string format = null) { + static public string Get(string pattern, string id, string sourcePath, string inputName, string outputName, string userName, string text, string partReplace, DateTime? storedDateTime = null, string json = null, string itemTitle = null, string mediaTitle = null, string format = null) { if (pattern == null) return null; string idRoot = id != null && id.Contains(UNDERSCORE) ? id.Split(UNDERSCORE[0])[0] : id; @@ -62,32 +64,39 @@ namespace MaestroShared.Commons { .Replace(PATTERN_MEDIATITLE, mediaTitle) .Replace(PATTERN_FORMAT, format); - if (!String.IsNullOrEmpty(inputName)) { + if (!string.IsNullOrEmpty(inputName)) { result = result.Replace(PATTERN_SOURCENAME, Normalize(Path.GetFileNameWithoutExtension(inputName))); string sourceStartID = Regex.Replace(inputName, SOURCESTARTID_PATTERN, HYPHEN); if (sourceStartID.Contains(HYPHEN)) sourceStartID = sourceStartID.Substring(0, sourceStartID.IndexOf(HYPHEN)); - if (String.IsNullOrEmpty(sourceStartID)) + if (string.IsNullOrEmpty(sourceStartID)) result = result.Replace(PATTERN_SOURCESTARTID, String.Empty); else result = result.Replace(PATTERN_SOURCESTARTID, sourceStartID); } - if (!String.IsNullOrEmpty(sourcePath)) { + if (!string.IsNullOrEmpty(sourcePath)) { result = result.Replace(PATTERN_SOURCEFOLDERNAME, Normalize(Path.GetFileName(sourcePath))); } - if (!String.IsNullOrEmpty(outputName)) + if (!string.IsNullOrEmpty(outputName)) result = result.Replace(PATTERN_TARGETNAME, outputName); - if (!String.IsNullOrEmpty(userName)) + if (!string.IsNullOrEmpty(userName)) result = result.Replace(PATTERN_USERNAME, userName); - if (!String.IsNullOrEmpty(Environment.MachineName)) + if (!string.IsNullOrEmpty(Environment.MachineName)) result = result.Replace(PATTERN_COMPUTERNAME, Environment.MachineName); - if (!String.IsNullOrEmpty(text)) + if (!string.IsNullOrEmpty(text)) result = result.Replace(PATTERN_TEXT, Normalize(text)); + + if (result.Contains(PATTERN_CUSTOMPART)) { + if (string.IsNullOrEmpty(partReplace)) + throw new Exception("Hiányzik a csereszöveg!"); + result = result.Replace(PATTERN_CUSTOMPART, partReplace); + } + return result; } diff --git a/client/MaestroShared/MaestroShared.csproj b/client/MaestroShared/MaestroShared.csproj index aa910b7a..a5f4b279 100644 --- a/client/MaestroShared/MaestroShared.csproj +++ b/client/MaestroShared/MaestroShared.csproj @@ -84,6 +84,12 @@ + + Form + + + InputForm.cs + @@ -147,6 +153,9 @@ + + InputForm.cs + ColorSlider.cs diff --git a/client/MaestroShared/Properties/AssemblyInfo.cs b/client/MaestroShared/Properties/AssemblyInfo.cs index 207b1fe6..fe815e63 100644 --- a/client/MaestroShared/Properties/AssemblyInfo.cs +++ b/client/MaestroShared/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("2.1.0.4")] -[assembly: AssemblyFileVersion("2.1.0.4")] +[assembly: AssemblyVersion("2.1.0.5")] +[assembly: AssemblyFileVersion("2.1.0.5")] diff --git a/client/MaestroShared/Targets/TargetProcessorParameter.cs b/client/MaestroShared/Targets/TargetProcessorParameter.cs index c772f970..196b31c0 100644 --- a/client/MaestroShared/Targets/TargetProcessorParameter.cs +++ b/client/MaestroShared/Targets/TargetProcessorParameter.cs @@ -8,6 +8,7 @@ using System.Collections.Generic; namespace MaestroShared.Target { public class TargetProcessorParameter { + public string PartReplace { get; set; } public string SourcePath { get; set; } public string SourcePathOverride { get; set; } public Source SourceConfig { get; set; } diff --git a/client/MaestroShared/Targets/UNCTargetProcessor.cs b/client/MaestroShared/Targets/UNCTargetProcessor.cs index 56971554..a0e170d8 100644 --- a/client/MaestroShared/Targets/UNCTargetProcessor.cs +++ b/client/MaestroShared/Targets/UNCTargetProcessor.cs @@ -486,7 +486,7 @@ namespace MaestroShared.Targets { } protected string GetDynamicText(string pattern) { - return PatternNameMaker.Get(pattern, ID, sourcePath, InputName, Output, Parameters.UserName, Parameters.MetadataText, Parameters.CreateDate, Parameters.ArchiveMetadata?.ToString(), Parameters.ArchiveMetadata?.itemTitle, Parameters.ArchiveMetadata?.mediaTitle, Parameters.ArchiveMetadata?.format); + return PatternNameMaker.Get(pattern, ID, sourcePath, InputName, Output, Parameters.UserName, Parameters.MetadataText, Parameters.PartReplace, Parameters.CreateDate, Parameters.ArchiveMetadata?.ToString(), Parameters.ArchiveMetadata?.itemTitle, Parameters.ArchiveMetadata?.mediaTitle, Parameters.ArchiveMetadata?.format); } private string CreateOutputFileName() { diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/FILEZILLA_AVIDTransferToStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/FILEZILLA_AVIDTransferToStep.java new file mode 100644 index 00000000..97747098 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/FILEZILLA_AVIDTransferToStep.java @@ -0,0 +1,11 @@ +package user.jobengine.server.steps; + +import user.commons.StoreUri; + +public class FILEZILLA_AVIDTransferToStep extends TransferStep { + @Override + @StepEntry + public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { + return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName); + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO1TransferFromStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO1TransferFromStep.java new file mode 100644 index 00000000..7963459f --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO1TransferFromStep.java @@ -0,0 +1,30 @@ +package user.jobengine.server.steps; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.StoreUri; + +public class NEXIO1TransferFromStep extends TransferStep { + private static final Logger logger = LogManager.getLogger(); + + @Override + @StepEntry + public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { + Object[] result = null; + try { + Path targetFile = Paths.get(targetStoreUri.toString(true), targetFileName); + if (targetFile.toFile().exists()) { + logger.info(getMarker(), "Using previously retrived file {}", targetFile); + } else { + result = super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName); + } + } catch (Exception e) { + logger.error(getMarker(), e.getMessage()); + } + return result; + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO1TransferToStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO1TransferToStep.java new file mode 100644 index 00000000..2d7b596c --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO1TransferToStep.java @@ -0,0 +1,11 @@ +package user.jobengine.server.steps; + +import user.commons.StoreUri; + +public class NEXIO1TransferToStep extends TransferStep { + @Override + @StepEntry + public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { + return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName); + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO2TransferFromStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO2TransferFromStep.java new file mode 100644 index 00000000..a698c6e8 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO2TransferFromStep.java @@ -0,0 +1,30 @@ +package user.jobengine.server.steps; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.StoreUri; + +public class NEXIO2TransferFromStep extends TransferStep { + private static final Logger logger = LogManager.getLogger(); + + @Override + @StepEntry + public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { + Object[] result = null; + try { + Path targetFile = Paths.get(targetStoreUri.toString(true), targetFileName); + if (targetFile.toFile().exists()) { + logger.info(getMarker(), "Using previously retrived file {}", targetFile); + } else { + result = super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName); + } + } catch (Exception e) { + logger.error(getMarker(), e.getMessage()); + } + return result; + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO2TransferToStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO2TransferToStep.java new file mode 100644 index 00000000..179c9d96 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/NEXIO2TransferToStep.java @@ -0,0 +1,11 @@ +package user.jobengine.server.steps; + +import user.commons.StoreUri; + +public class NEXIO2TransferToStep extends TransferStep { + @Override + @StepEntry + public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { + return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName); + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/PASAPOOLTransferToStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/PASAPOOLTransferToStep.java new file mode 100644 index 00000000..19a641b1 --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/PASAPOOLTransferToStep.java @@ -0,0 +1,27 @@ +package user.jobengine.server.steps; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.StoreUri; + +public class PASAPOOLTransferToStep extends TransferStep { + private static final Logger logger = LogManager.getLogger(); + + @Override + @StepEntry + public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { + // try { + // StoreUri storeUri = getManager().getStoreUri("PEABLEBEACH", RemoteStoreProtocol.LOCAL); + // Path targetFile = Paths.get(storeUri.toString(true), targetFileName); + // if (targetFile.toFile().exists()) { + // logger.info("File already exists on BEACHPOOL: {}, skipping copy", targetFileName); + // return null; + // } + // } catch (Exception e) { + // logger.error(e.getMessage()); + // } + + return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName); + } +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMTransferFromStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMTransferFromStep.java new file mode 100644 index 00000000..6406269d --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMTransferFromStep.java @@ -0,0 +1,31 @@ +package user.jobengine.server.steps; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import user.commons.StoreUri; + +public class TSMTransferFromStep extends TransferStep { + private static final Logger logger = LogManager.getLogger(); + + @Override + @StepEntry + public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { + Object[] result = null; + try { + Path targetFile = Paths.get(targetStoreUri.toString(true), targetFileName); + if (targetFile.toFile().exists()) { + logger.info(getMarker(), "Using previously retrived file {}", targetFile); + } else { + result = super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName); + } + } catch (Exception e) { + logger.error(getMarker(), e.getMessage()); + } + return result; + } + +} diff --git a/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMTransferToStep.java b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMTransferToStep.java new file mode 100644 index 00000000..efff055e --- /dev/null +++ b/server/user.jobengine.executors/src/user/jobengine/server/steps/TSMTransferToStep.java @@ -0,0 +1,11 @@ +package user.jobengine.server.steps; + +import user.commons.StoreUri; + +public class TSMTransferToStep extends TransferStep { + @Override + @StepEntry + public Object[] execute(StoreUri sourceStoreUri, String sourceFileName, StoreUri targetStoreUri, String targetFileName) throws Exception { + return super.execute(sourceStoreUri, sourceFileName, targetStoreUri, targetFileName); + } +} diff --git a/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java b/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java index 64504ee0..a688b840 100644 --- a/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java +++ b/server/user.jobengine.osgi.db/src/user/commons/pool/ContextPool.java @@ -3,9 +3,6 @@ package user.commons.pool; import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import java.sql.DriverManager; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; import java.util.Properties; import org.apache.logging.log4j.LogManager; @@ -33,32 +30,36 @@ public class ContextPool extends ResourcePool { @Override protected boolean checkObject(Object resourceObject) { - DefaultContext context = (DefaultContext) resourceObject; - boolean result = false; - String sql = "SELECT 1 FROM SYSIBM.SYSDUMMY1"; - Statement stmt = null; - ResultSet rs = null; - try { - stmt = context.getConnection().createStatement(); - rs = stmt.executeQuery(sql); - result = true; - } catch (Exception e1) { - logger.catching(e1); - if (rs != null) - try { - rs.close(); - } catch (SQLException e) { - logger.catching(e); - } - if (stmt != null) - try { - stmt.close(); - } catch (SQLException e) { - logger.catching(e); - } - - } - return result; + // DefaultContext context = (DefaultContext) resourceObject; + // boolean result = false; + // String sql = "SELECT 1 FROM SYSIBM.SYSDUMMY1"; + // Statement stmt = null; + // ResultSet rs = null; + // try { + // stmt = context.getConnection().createStatement(); + // rs = stmt.executeQuery(sql); + // while (rs.next()) + // rs.getInt(1); + // + // result = true; + // } catch (Exception e1) { + // logger.catching(e1); + // if (rs != null) + // try { + // rs.close(); + // } catch (SQLException e) { + // logger.catching(e); + // } + // if (stmt != null) + // try { + // stmt.close(); + // } catch (SQLException e) { + // logger.catching(e); + // } + // + // } + // return result; + return true; } @Override @@ -103,7 +104,7 @@ public class ContextPool extends ResourcePool { validateObject(value); DefaultContext context = (DefaultContext) value; try { - if (context == null) + if (context == null || context.isClosed()) return; context.close(); } catch (Exception e) { diff --git a/server/user.jobengine.osgi.db/test/user/commons/pool/TestConnectionPool.java b/server/user.jobengine.osgi.db/test/user/commons/pool/TestConnectionPool.java index c84df3ec..2946b7f3 100644 --- a/server/user.jobengine.osgi.db/test/user/commons/pool/TestConnectionPool.java +++ b/server/user.jobengine.osgi.db/test/user/commons/pool/TestConnectionPool.java @@ -6,38 +6,32 @@ import org.junit.Test; public class TestConnectionPool { private static ConnectionPool pool = null; - - @BeforeClass - public static void beforeTest() { - ConnectionPoolProperties properties = new ConnectionPoolProperties("com.ibm.db2.jcc.DB2Driver", - "jdbc:db2://localhost:50000/MF", "Balazs Dombovari", "balage1", false, 1000); - properties.add(ResourcePool.POOLSIZE, 2); - pool = new ConnectionPool(properties); - } - @AfterClass + @AfterClass public static void afterTest() { pool.close(); } + @BeforeClass + public static void beforeTest() { + ConnectionPoolProperties properties = new ConnectionPoolProperties("com.ibm.db2.jcc.DB2Driver", + "-Djobengine.db.url=jdbc:db2://10.228.198.1:50000/mediaarc:retrieveMessagesFromServerOnGetMessage=true;", "db2admin", "password", false, 1000); + properties.add(ResourcePool.POOLSIZE, 10); + pool = new ConnectionPool(properties); + } + @Test - public void testConcurrentBorrow(){ - //3 szál próbál kölcsönözni, de csak 2 erõforrás van. - //A harmadik várakozik, míg fel nem szabadul egy erõforrás. - TestingThread thread1 = new TestingThread("Thread1", pool); - TestingThread thread2 = new TestingThread("Thread2", pool); - TestingThread thread3 = new TestingThread("Thread3", pool); - - thread1.start(); - thread2.start(); - thread3.start(); + public void testConcurrentBorrow() { + + for (int i = 0; i < 10; i++) { + TestingThread thread = new TestingThread("Thread" + i, pool); + thread.start(); + } try { - Thread.sleep(10000); + Thread.sleep(10000); } catch (InterruptedException e) { } - - thread1.interrupt(); } } diff --git a/server/user.jobengine.osgi.server/pages/joblist.zul b/server/user.jobengine.osgi.server/pages/joblist.zul index a8ed2672..919e5c31 100644 --- a/server/user.jobengine.osgi.server/pages/joblist.zul +++ b/server/user.jobengine.osgi.server/pages/joblist.zul @@ -48,7 +48,7 @@ - + @@ -66,7 +66,7 @@ - +