public string CreatePointTag(string companyAcronym, string deviceAcronym, string vendorAcronym, string signalTypeAcronym, string phasorLabel = null, int signalIndex = -1, char phase = '_', int baseKV = 0) { // Initialize point tag expression parser s_pointTagExpressionParser ??= InitializePointTagExpressionParser(); // Initialize signal type dictionary s_signalTypes ??= InitializeSignalTypes(); Dictionary <string, string> substitutions; if (!s_signalTypes.TryGetValue(signalTypeAcronym, out DataRow signalTypeValues)) { throw new ArgumentOutOfRangeException(nameof(signalTypeAcronym), "No database definition was found for signal type \"" + signalTypeAcronym + "\""); } // Validate key acronyms companyAcronym ??= ""; deviceAcronym ??= ""; vendorAcronym ??= ""; phasorLabel ??= ""; companyAcronym = companyAcronym.Trim(); deviceAcronym = deviceAcronym.Trim(); vendorAcronym = vendorAcronym.Trim(); // Define fixed parameter replacements substitutions = new Dictionary <string, string> { { "{CompanyAcronym}", companyAcronym }, { "{DeviceAcronym}", deviceAcronym }, { "{VendorAcronym}", vendorAcronym }, { "{PhasorLabel}", phasorLabel }, { "{SignalIndex}", signalIndex.ToString() }, { "{Phase}", phase.ToString() }, { "{BaseKV}", baseKV.ToString() } }; // Define signal type field value replacements DataColumnCollection columns = signalTypeValues.Table.Columns; for (int i = 0; i < columns.Count; i++) { substitutions.Add($"{{SignalType.{columns[i].ColumnName}}}", signalTypeValues[i].ToNonNullString()); } return(s_pointTagExpressionParser.Execute(substitutions)); }
private static string GetSubFolder(Device device, string profileName, string directoryNamingExpression, DateTime eventStartTime) { TemplatedExpressionParser directoryNameExpressionParser = new TemplatedExpressionParser('<', '>', '[', ']'); Dictionary <string, string> substitutions = new Dictionary <string, string> { { "<YYYY>", $"{eventStartTime.Year}" }, { "<YY>", $"{eventStartTime.Year.ToString().Substring(2)}" }, { "<MM>", $"{eventStartTime.Month.ToString().PadLeft(2, '0')}" }, { "<DD>", $"{eventStartTime.Day.ToString().PadLeft(2, '0')}" }, { "<DeviceName>", device.Name ?? "undefined" }, { "<DeviceAcronym>", device.Acronym }, { "<DeviceFolderName>", string.IsNullOrWhiteSpace(device.OriginalSource) ? device.Acronym : device.OriginalSource }, { "<ProfileName>", profileName } }; directoryNameExpressionParser.TemplatedExpression = directoryNamingExpression.Replace("\\", "\\\\"); return($"{directoryNameExpressionParser.Execute(substitutions)}{Path.DirectorySeparatorChar}"); }
private string GetLocalFileName(string fileName) { TemplatedExpressionParser directoryNameExpressionParser = new TemplatedExpressionParser('<', '>', '[', ']'); Dictionary <string, string> substitutions = new Dictionary <string, string> { { "<YYYY>", $"{DateTime.Now.Year}" }, { "<YY>", $"{DateTime.Now.Year.ToString().Substring(2)}" }, { "<MM>", $"{DateTime.Now.Month.ToString().PadLeft(2, '0')}" }, { "<DD>", $"{DateTime.Now.Day.ToString().PadLeft(2, '0')}" }, { "<DeviceName>", (m_deviceRecord["Name"].ToString() == ""? "undefined": m_deviceRecord["Name"].ToString()) }, { "<DeviceAcronym>", m_deviceRecord["Acronym"].ToString() }, { "<DeviceFolderName>", (m_deviceRecord["OriginalSource"].ToString() == "" ? m_deviceRecord["Acronym"].ToString() : m_deviceRecord["OriginalSource"].ToString()) }, { "<ProfileName>", (m_connectionProfile["Name"].ToString() == "" ? "undefined" :m_connectionProfile["Name"].ToString()) } }; directoryNameExpressionParser.TemplatedExpression = m_connectionProfileTaskSettings["directoryNamingExpression"].Replace("\\", "\\\\"); // Possible UNC Path Sub Directory - duplicate path slashes are removed fileName = m_localPath + $"{Path.DirectorySeparatorChar}{directoryNameExpressionParser.Execute(substitutions)}{Path.DirectorySeparatorChar}{fileName}".RemoveDuplicates(Path.DirectorySeparatorChar.ToString()); //Console.WriteLine(fileName); string directoryName = FilePath.GetDirectoryName(fileName); if (!Directory.Exists(directoryName)) { try { Directory.CreateDirectory(directoryName); } catch (Exception ex) { Program.Log($"Failed to create directory \"{directoryName}\": {ex.Message}", m_tempDirectoryName); throw new InvalidOperationException($"Failed to create directory \"{directoryName}\": {ex.Message}", ex); } } return(fileName); }