|
|
|
@ -63,7 +63,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
string Properties.IFileRead.CellInstanceConnectionName => _CellInstanceConnectionName;
|
|
|
|
|
string Properties.IFileRead.ParameterizedModelObjectDefinitionType => _ParameterizedModelObjectDefinitionType;
|
|
|
|
|
|
|
|
|
|
public FileRead(IDescription description, bool isEvent, ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<string>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted)
|
|
|
|
|
public FileRead(IDescription description, bool isEvent, ISMTP smtp, Dictionary<string, string> fileParameter, string cellInstanceName, int? connectionCount, string cellInstanceConnectionName, FileConnectorConfiguration fileConnectorConfiguration, string equipmentTypeName, string parameterizedModelObjectDefinitionType, IList<ModelObjectParameterDefinition> modelObjectParameters, string equipmentDictionaryName, Dictionary<string, List<long>> dummyRuns, Dictionary<long, List<string>> staticRuns, bool useCyclicalForDescription, bool isEAFHosted)
|
|
|
|
|
{
|
|
|
|
|
_SMTP = smtp;
|
|
|
|
|
_IsEvent = isEvent;
|
|
|
|
@ -106,7 +106,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
throw new Exception(cellInstanceConnectionName);
|
|
|
|
|
if (string.IsNullOrEmpty(equipmentDictionaryName) && isEvent)
|
|
|
|
|
throw new Exception(cellInstanceConnectionName);
|
|
|
|
|
if (!string.IsNullOrEmpty(equipmentDictionaryName) && !isEvent)
|
|
|
|
|
if (!string.IsNullOrEmpty(equipmentDictionaryName) && !isEvent && connectionCount > 1)
|
|
|
|
|
throw new Exception(cellInstanceConnectionName);
|
|
|
|
|
// if (string.IsNullOrEmpty(equipmentDictionaryName) && !isEvent)
|
|
|
|
|
// throw new Exception(cellInstanceConnectionName);
|
|
|
|
@ -163,7 +163,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
protected static ModelObjectParameterDefinition[] GetProperties(string cellInstanceConnectionName, IList<ModelObjectParameterDefinition> modelObjectParameters, string propertyNamePrefix)
|
|
|
|
|
{
|
|
|
|
|
ModelObjectParameterDefinition[] results = (from l in modelObjectParameters where l.Name.StartsWith(propertyNamePrefix) select l).ToArray();
|
|
|
|
|
if (!results.Any())
|
|
|
|
|
if (results.Length == 0)
|
|
|
|
|
throw new Exception(cellInstanceConnectionName);
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
@ -171,7 +171,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
protected static ModelObjectParameterDefinition[] GetProperties(string cellInstanceConnectionName, IList<ModelObjectParameterDefinition> modelObjectParameters, string propertyNamePrefix, string propertyNameSuffix)
|
|
|
|
|
{
|
|
|
|
|
ModelObjectParameterDefinition[] results = (from l in modelObjectParameters where l.Name.StartsWith(propertyNamePrefix) && l.Name.EndsWith(propertyNameSuffix) select l).ToArray();
|
|
|
|
|
if (!results.Any())
|
|
|
|
|
if (results.Length == 0)
|
|
|
|
|
throw new Exception(cellInstanceConnectionName);
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
@ -203,7 +203,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
}
|
|
|
|
|
lock (threadExceptions)
|
|
|
|
|
{
|
|
|
|
|
if (threadExceptions.Any())
|
|
|
|
|
if (threadExceptions.Count != 0)
|
|
|
|
|
{
|
|
|
|
|
foreach (Exception item in threadExceptions)
|
|
|
|
|
_Log.Error(string.Concat(item.Message, Environment.NewLine, Environment.NewLine, item.StackTrace));
|
|
|
|
@ -241,7 +241,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
if (!_IsDuplicator)
|
|
|
|
|
WriteAllLines(to, results);
|
|
|
|
|
}
|
|
|
|
|
if (extractResults is not null && extractResults.Item4 is not null && extractResults.Item4.Any())
|
|
|
|
|
if (extractResults is not null && extractResults.Item4 is not null && extractResults.Item4.Count != 0)
|
|
|
|
|
{
|
|
|
|
|
string itemFile;
|
|
|
|
|
List<string> directories = new();
|
|
|
|
@ -260,19 +260,21 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
return results;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected static string GetTupleFile<T>(Logistics logistics, List<T> descriptions, Properties.IScopeInfo scopeInfo, string duplicateDirectory) where T : Properties.IDescription
|
|
|
|
|
protected static string GetTupleFile<T>(Logistics logistics, List<T> descriptions, Properties.IScopeInfo scopeInfo, string duplicateDirectory, string duplicateFile) where T : Properties.IDescription
|
|
|
|
|
{
|
|
|
|
|
string result;
|
|
|
|
|
string rds;
|
|
|
|
|
string fileName;
|
|
|
|
|
string dateValue;
|
|
|
|
|
string rdsPlaceholder = "%RDS%";
|
|
|
|
|
if (!descriptions.Any() || string.IsNullOrEmpty(descriptions[0].RDS))
|
|
|
|
|
string mesEntityPlaceholder = "%MesEntity%";
|
|
|
|
|
if (descriptions.Count == 0 || string.IsNullOrEmpty(descriptions[0].RDS))
|
|
|
|
|
rds = logistics.MID;
|
|
|
|
|
else
|
|
|
|
|
rds = descriptions[0].RDS;
|
|
|
|
|
string[] segments = scopeInfo.FileName.Split(new string[] { "DateTime:" }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
|
|
if (segments.Length == 0)
|
|
|
|
|
result = string.Concat(duplicateDirectory, @"\", scopeInfo.FileNameWithoutExtension.Replace(rdsPlaceholder, rds));
|
|
|
|
|
result = string.Concat(duplicateDirectory, @"\", scopeInfo.FileNameWithoutExtension.Replace(rdsPlaceholder, rds).Replace(mesEntityPlaceholder, logistics.MesEntity));
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
segments = segments[1].Split('%');
|
|
|
|
@ -284,7 +286,11 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
continue;
|
|
|
|
|
datePlaceholder = string.Concat('%', segment, '%');
|
|
|
|
|
}
|
|
|
|
|
result = string.Concat(duplicateDirectory, @"\", scopeInfo.FileName.Replace(rdsPlaceholder, rds).Replace(datePlaceholder, dateValue));
|
|
|
|
|
fileName = scopeInfo.FileName.Replace(rdsPlaceholder, rds).Replace(mesEntityPlaceholder, logistics.MesEntity).Replace(datePlaceholder, dateValue);
|
|
|
|
|
if (!duplicateFile.Contains("Viewer"))
|
|
|
|
|
result = Path.Combine(duplicateDirectory, fileName);
|
|
|
|
|
else
|
|
|
|
|
result = Path.Combine(duplicateDirectory, $"Viewer_{fileName}");
|
|
|
|
|
}
|
|
|
|
|
if (result.Contains('%'))
|
|
|
|
|
throw new Exception("Placeholder exists!");
|
|
|
|
@ -306,7 +312,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
preWait = dateTime.AddMilliseconds(1234).Ticks;
|
|
|
|
|
else
|
|
|
|
|
preWait = dateTime.AddMilliseconds(_FileConnectorConfiguration.FileHandleWaitTime.Value).Ticks;
|
|
|
|
|
if (!collection.Any())
|
|
|
|
|
if (collection.Count == 0)
|
|
|
|
|
duplicateFiles.Add(duplicateFile);
|
|
|
|
|
string fileName = Path.GetFileNameWithoutExtension(logistics.ReportFullPath);
|
|
|
|
|
string successFile = string.Concat(successDirectory, @"\", Path.GetFileName(logistics.ReportFullPath));
|
|
|
|
@ -317,7 +323,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
else if (!scopeInfo.FileName.Contains('%'))
|
|
|
|
|
tupleFile = string.Concat(duplicateDirectory, @"\", fileName, "_", scopeInfo.FileNameWithoutExtension, ".pdsfc");
|
|
|
|
|
else
|
|
|
|
|
tupleFile = GetTupleFile(logistics, descriptions, scopeInfo, duplicateDirectory);
|
|
|
|
|
tupleFile = GetTupleFile(logistics, descriptions, scopeInfo, duplicateDirectory, duplicateFile);
|
|
|
|
|
tupleFileName = Path.GetFileNameWithoutExtension(tupleFile).Split('.')[0];
|
|
|
|
|
duplicateFiles.Add(tupleFile);
|
|
|
|
|
if (_IsEAFHosted)
|
|
|
|
@ -416,10 +422,12 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
protected void WritePDSF(IFileRead fileRead, JsonElement[] jsonElements)
|
|
|
|
|
{
|
|
|
|
|
string directory;
|
|
|
|
|
string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
|
|
|
|
|
string weekDirectory = $"{_Logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}{@"\"}{_Logistics.DateTimeFromSequence:yyyy-MM-dd}";
|
|
|
|
|
if (!_CellInstanceConnectionName.StartsWith(_CellInstanceName) && _CellInstanceConnectionNameBase == _EquipmentType)
|
|
|
|
|
directory = Path.Combine(_TracePath, _EquipmentType, "Target", _CellInstanceName, _CellInstanceConnectionName);
|
|
|
|
|
directory = Path.Combine(_TracePath, _EquipmentType, "Target", weekDirectory, _CellInstanceName, _CellInstanceConnectionName);
|
|
|
|
|
else
|
|
|
|
|
directory = Path.Combine(_TracePath, _EquipmentType, "Source", _CellInstanceName, _CellInstanceConnectionName);
|
|
|
|
|
directory = Path.Combine(_TracePath, _EquipmentType, "Source", weekDirectory, _CellInstanceName, _CellInstanceConnectionName);
|
|
|
|
|
if (!Directory.Exists(directory))
|
|
|
|
|
_ = Directory.CreateDirectory(directory);
|
|
|
|
|
string file = Path.Combine(directory, string.Concat(_Logistics.MesEntity, "_", _Logistics.Sequence, ".ipdsf"));
|
|
|
|
@ -454,6 +462,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
protected void TriggerEvents(Tuple<string, Test[], JsonElement[], List<FileInfo>> extractResults, List<string> headerNames, Dictionary<string, string> keyValuePairs)
|
|
|
|
|
{
|
|
|
|
|
object value;
|
|
|
|
|
string segments;
|
|
|
|
|
string description;
|
|
|
|
|
List<object[]> list;
|
|
|
|
|
for (int i = 0; i < extractResults.Item3.Length; i++)
|
|
|
|
@ -461,10 +470,10 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
_Log.Debug(string.Concat("TriggerEvent - {", _Logistics.ReportFullPath, "} ", i, " of ", extractResults.Item3.Length));
|
|
|
|
|
foreach (JsonProperty jsonProperty in extractResults.Item3[i].EnumerateObject())
|
|
|
|
|
{
|
|
|
|
|
if (jsonProperty.Value.ValueKind != JsonValueKind.String || !keyValuePairs.ContainsKey(jsonProperty.Name))
|
|
|
|
|
if (jsonProperty.Value.ValueKind != JsonValueKind.String || !keyValuePairs.TryGetValue(jsonProperty.Name, out segments))
|
|
|
|
|
description = string.Empty;
|
|
|
|
|
else
|
|
|
|
|
description = keyValuePairs[jsonProperty.Name].Split('|')[0];
|
|
|
|
|
description = segments.Split('|')[0];
|
|
|
|
|
if (!_UseCyclicalForDescription || headerNames.Contains(jsonProperty.Name))
|
|
|
|
|
value = jsonProperty.Value.ToString();
|
|
|
|
|
else
|
|
|
|
@ -496,10 +505,10 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
matches = Directory.GetFiles(_FileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.AllDirectories);
|
|
|
|
|
else
|
|
|
|
|
matches = Directory.GetFiles(_FileConnectorConfiguration.SourceFileLocation, segments.Last(), SearchOption.TopDirectoryOnly);
|
|
|
|
|
if (matches.Any())
|
|
|
|
|
if (matches.Length != 0)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (matches is null || !matches.Any())
|
|
|
|
|
if (matches is null || matches.Length == 0)
|
|
|
|
|
results = null;
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
@ -562,16 +571,99 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal static List<string> GetDirectoryNames(string directory)
|
|
|
|
|
{
|
|
|
|
|
#nullable enable
|
|
|
|
|
List<string> results = new();
|
|
|
|
|
string? fileName;
|
|
|
|
|
string? checkDirectory = directory;
|
|
|
|
|
string? pathRoot = Path.GetPathRoot(directory);
|
|
|
|
|
string extension = Path.GetExtension(directory);
|
|
|
|
|
if (string.IsNullOrEmpty(pathRoot))
|
|
|
|
|
throw new NullReferenceException(nameof(pathRoot));
|
|
|
|
|
if (Directory.Exists(directory))
|
|
|
|
|
{
|
|
|
|
|
fileName = Path.GetFileName(directory);
|
|
|
|
|
if (!string.IsNullOrEmpty(fileName))
|
|
|
|
|
results.Add(fileName);
|
|
|
|
|
}
|
|
|
|
|
else if ((string.IsNullOrEmpty(extension) || extension.Length > 3) && !File.Exists(directory))
|
|
|
|
|
{
|
|
|
|
|
fileName = Path.GetFileName(directory);
|
|
|
|
|
if (!string.IsNullOrEmpty(fileName))
|
|
|
|
|
results.Add(fileName);
|
|
|
|
|
}
|
|
|
|
|
for (int i = 0; i < int.MaxValue; i++)
|
|
|
|
|
{
|
|
|
|
|
checkDirectory = Path.GetDirectoryName(checkDirectory);
|
|
|
|
|
if (string.IsNullOrEmpty(checkDirectory) || checkDirectory == pathRoot)
|
|
|
|
|
break;
|
|
|
|
|
fileName = Path.GetFileName(checkDirectory);
|
|
|
|
|
if (string.IsNullOrEmpty(fileName))
|
|
|
|
|
continue;
|
|
|
|
|
results.Add(fileName);
|
|
|
|
|
}
|
|
|
|
|
results.Add(pathRoot);
|
|
|
|
|
results.Reverse();
|
|
|
|
|
return results;
|
|
|
|
|
#nullable disable
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private string GetJobIdDirectory(string path)
|
|
|
|
|
{
|
|
|
|
|
string result;
|
|
|
|
|
List<string> directoryNames = GetDirectoryNames(path);
|
|
|
|
|
if (!directoryNames.Contains(_Logistics.JobID))
|
|
|
|
|
result = Path.GetDirectoryName(path);
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
result = string.Empty;
|
|
|
|
|
foreach (string directoryName in directoryNames)
|
|
|
|
|
{
|
|
|
|
|
result = Path.Combine(result, directoryName);
|
|
|
|
|
if (directoryName == _Logistics.JobID)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void DeleteEmptyTopDirectories(string rootDirectory)
|
|
|
|
|
{
|
|
|
|
|
if (Directory.Exists(rootDirectory))
|
|
|
|
|
{
|
|
|
|
|
string[] files;
|
|
|
|
|
string[] directories;
|
|
|
|
|
string[] subDirectories = Directory.GetDirectories(rootDirectory, "*", SearchOption.TopDirectoryOnly);
|
|
|
|
|
foreach (string subDirectory in subDirectories)
|
|
|
|
|
{
|
|
|
|
|
files = Directory.GetFiles(subDirectory, "*", SearchOption.AllDirectories);
|
|
|
|
|
if (files.Length > 0)
|
|
|
|
|
continue;
|
|
|
|
|
directories = Directory.GetDirectories(subDirectory, "*", SearchOption.TopDirectoryOnly);
|
|
|
|
|
if (directories.Length > 0)
|
|
|
|
|
continue;
|
|
|
|
|
try
|
|
|
|
|
{ Directory.Delete(subDirectory); }
|
|
|
|
|
catch (UnauthorizedAccessException)
|
|
|
|
|
{
|
|
|
|
|
new DirectoryInfo(subDirectory).Attributes = FileAttributes.Normal;
|
|
|
|
|
Directory.Delete(subDirectory);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void Shared1811(string to, FileInfo sourceFile)
|
|
|
|
|
{
|
|
|
|
|
if (!_IsDuplicator && _FileConnectorConfiguration.SourceFileFilter != "*" && sourceFile.Exists && sourceFile.Length < _MinFileLength)
|
|
|
|
|
{
|
|
|
|
|
string directoryName = Path.GetFileName(to);
|
|
|
|
|
string jobIdDirectory = Path.GetDirectoryName(to);
|
|
|
|
|
string jobIdDirectory = GetJobIdDirectory(to);
|
|
|
|
|
DateTime dateTime = DateTime.Now.AddMinutes(-15);
|
|
|
|
|
string weekOfYear = _Calendar.GetWeekOfYear(_Logistics.DateTimeFromSequence, CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString("00");
|
|
|
|
|
string weekDirectory = $"{_Logistics.DateTimeFromSequence:yyyy}_Week_{weekOfYear}{@"\"}{_Logistics.DateTimeFromSequence:yyyy-MM-dd}";
|
|
|
|
|
string destinationDirectory = string.Concat(jobIdDirectory, @"\_ Ignore 100 bytes\", weekDirectory, @"\", directoryName);
|
|
|
|
|
string destinationDirectory = Path.Combine(jobIdDirectory, "_ Ignore 100 bytes", weekDirectory, directoryName);
|
|
|
|
|
if (!Directory.Exists(destinationDirectory))
|
|
|
|
|
_ = Directory.CreateDirectory(destinationDirectory);
|
|
|
|
|
File.Move(sourceFile.FullName, string.Concat(destinationDirectory, @"\", sourceFile.Name));
|
|
|
|
@ -582,13 +674,13 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
{
|
|
|
|
|
if (!checkDirectory.Contains('_'))
|
|
|
|
|
continue;
|
|
|
|
|
if (Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly).Any())
|
|
|
|
|
if (Directory.GetDirectories(checkDirectory, "*", SearchOption.TopDirectoryOnly).Length != 0)
|
|
|
|
|
continue;
|
|
|
|
|
if (Directory.GetFiles(checkDirectory, "*", SearchOption.TopDirectoryOnly).Any())
|
|
|
|
|
if (Directory.GetFiles(checkDirectory, "*", SearchOption.TopDirectoryOnly).Length != 0)
|
|
|
|
|
continue;
|
|
|
|
|
if (Directory.GetDirectories(checkDirectory, "*", SearchOption.AllDirectories).Any())
|
|
|
|
|
if (Directory.GetDirectories(checkDirectory, "*", SearchOption.AllDirectories).Length != 0)
|
|
|
|
|
continue;
|
|
|
|
|
if (Directory.GetFiles(checkDirectory, "*", SearchOption.AllDirectories).Any())
|
|
|
|
|
if (Directory.GetFiles(checkDirectory, "*", SearchOption.AllDirectories).Length != 0)
|
|
|
|
|
continue;
|
|
|
|
|
if (new DirectoryInfo(checkDirectory).CreationTime > dateTime)
|
|
|
|
|
continue;
|
|
|
|
@ -596,6 +688,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
catch (Exception) { throw; }
|
|
|
|
|
DeleteEmptyTopDirectories(jobIdDirectory);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -605,7 +698,7 @@ public class FileRead : Properties.IFileRead
|
|
|
|
|
{
|
|
|
|
|
foreach (string directory in (from l in directories orderby l.Split('\\').Length descending select l).Distinct())
|
|
|
|
|
{
|
|
|
|
|
if (Directory.Exists(directory) && !Directory.GetFiles(directory).Any())
|
|
|
|
|
if (Directory.Exists(directory) && Directory.GetFiles(directory).Length == 0)
|
|
|
|
|
Directory.Delete(directory);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|