using System.Dynamic; using System.Text; using System.Text.Json; namespace File_Watcher.Helpers.EDA; public class DCP { internal static string GetEdaObjectToHtml(string edaObjectFile, Common common) { StringBuilder result = new(); string title = string.Concat(Path.GetFileName(edaObjectFile), " - ", common.Source); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append("").Append(title).AppendLine(""); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); _ = result.AppendLine("
").Append("Unit Name").AppendLine("").Append("Container Name").AppendLine("").Append("Configuration State").AppendLine("").Append("Configuration Productive State").AppendLine("").Append("LogisticsEquipmentAlias").AppendLine("").Append("Source").AppendLine("").Append("StoragePath(s)").AppendLine("").Append("StartTimeFormat").AppendLine("").Append("Filename").AppendLine("
").Append(common.UnitName).AppendLine("").Append(common.ContainerName).AppendLine("").Append(common.ConfigurationState).AppendLine("").Append(common.ConfigurationProductiveState).AppendLine("").Append(common.LogisticsEquipmentAlias).AppendLine("").Append(common.Source).AppendLine("").Append(string.Join("
", common.StoragePaths)).AppendLine("
").Append(common.StartTimeFormat).AppendLine("").Append(common.Filename).AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); foreach (string[] item in common.LogisticsAttributes) { if (item.Length > 2 && !item[2].StartsWith("Z_")) { _ = result.AppendLine(""); foreach (string value in item) _ = result.Append(""); _ = result.AppendLine(""); } } _ = result.AppendLine("
").Append("Use").AppendLine("").Append("Order").AppendLine("").Append("Key").AppendLine("").Append("Placeholder").AppendLine("
").Append(value).AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); foreach (string[] item in common.LogisticsColumns) { _ = result.AppendLine(""); foreach (string value in item) _ = result.Append(""); _ = result.AppendLine(""); } _ = result.AppendLine("
").Append("ID").AppendLine("").Append("Prefix").AppendLine("
").Append(value).AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); foreach (string?[] item in common.Parameters) { _ = result.AppendLine(""); foreach (string? value in item) _ = result.Append(""); _ = result.AppendLine(""); } _ = result.AppendLine("
").Append("Use").AppendLine("").Append("Order").AppendLine("").Append("FullName").AppendLine("").Append("Alias").AppendLine("").Append("HardWareId").AppendLine("").Append("Description").AppendLine("").Append("Formula").AppendLine("").Append("Virtual").AppendLine("").Append("Column#").AppendLine("
").Append(value).AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); foreach (string[] item in common.GeneralTriggers) { _ = result.AppendLine(""); foreach (string value in item) _ = result.Append(""); _ = result.AppendLine(""); } _ = result.AppendLine("
").Append("Parent Name").AppendLine("").Append("Name").AppendLine("").Append("ParameterName").AppendLine("").Append("Formula").AppendLine("
").Append(value).AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); foreach (string[] item in common.StartTriggersDCP) { _ = result.AppendLine(""); foreach (string value in item) _ = result.Append(""); _ = result.AppendLine(""); } _ = result.AppendLine("
").Append("Name").AppendLine("").Append("Rule").AppendLine("").Append("ResolveGlobalVariableBeforeTrigger").AppendLine("
").Append(value).AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); foreach (string?[] item in common.LogisticsTriggers) { if (item is null) continue; _ = result.AppendLine(""); foreach (string? value in item) _ = result.Append(""); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.AppendLine(""); } _ = result.AppendLine("
").Append("Name").AppendLine("").Append("Fixed").AppendLine("").Append("Rule").AppendLine("").Append("Scenario").AppendLine("").Append("DefaultJobIndex").AppendLine("").Append("DefaultCarrierIndex").AppendLine("").Append("DefaultSlotIndex").AppendLine("").Append("DataPool").AppendLine("
").Append(value).AppendLine(""); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); foreach (KeyValuePair keyValuePair in common.LogisticsTriggersKeysKeyMapping) { _ = result.AppendLine(""); foreach (string value in keyValuePair.Value) _ = result.Append(""); _ = result.AppendLine(""); } _ = result.AppendLine("
").Append("KeyName").AppendLine("").Append("ParameterName").AppendLine("").Append("Formula").AppendLine("
").Append(value).AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); foreach (KeyValuePair> keyValuePair in common.LogisticsTriggersCallDefinitionAttributes) { foreach (string[] values in keyValuePair.Value) { if (values.Length > 0 && !values[0].StartsWith("Z_")) { _ = result.AppendLine(""); foreach (string value in values) _ = result.Append(""); _ = result.AppendLine(""); } } } _ = result.AppendLine("
").Append("LogisticsKey").AppendLine("").Append("Source").AppendLine("").Append("MappedParameterName").AppendLine("").Append("Formula").AppendLine("
").Append(value).AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine(""); _ = result.AppendLine(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.Append(""); _ = result.AppendLine(""); foreach (string[] item in common.StopTriggersDCP) { _ = result.AppendLine(""); foreach (string value in item) _ = result.Append(""); _ = result.AppendLine(""); } _ = result.AppendLine("
").Append("Name").AppendLine("").Append("Rule").AppendLine("").Append("ResolveGlobalVariableBeforeTrigger").AppendLine("").Append("ResetGlobalVariablesAfterTrigger").AppendLine("
").Append(value).AppendLine("
"); _ = result.AppendLine("
"); _ = result.AppendLine(""); _ = result.AppendLine(""); return result.ToString(); } private static string? ReplaceNull(object @object) { if (@object is null) return string.Empty; else return @object.ToString(); } private static void TextResolveEntry(StringBuilder result, dynamic expandoObject, int level, string super, int? i, bool group) { level += 1; foreach (dynamic entry in expandoObject) { if (entry.Value is ExpandoObject) TextResolveEntry(result, entry.Value, level, string.Concat(super, " : ", entry.Key), i, group); else { if (entry.Value is not ICollection) { if (i is null) result.Append(level).Append(") ").Append(super).Append(" : ").Append(entry.Key).Append("--->").AppendLine(ReplaceNull(entry.Value)); else result.Append(level).Append(") ").Append(super).Append(" : ").Append(entry.Key).Append("[").Append(i.Value).Append("]--->").AppendLine(ReplaceNull(entry.Value)); } else { if (!group) { for (i = 0; i.Value < entry.Value.Count; i++) { if (entry.Value[i.Value] is ExpandoObject) TextResolveEntry(result, entry.Value[i.Value], level, string.Concat(super, " : ", entry.Key), i.Value, group); else result.Append(level).Append(") ").Append(super).Append(" : ").Append(entry.Key).Append("[").Append(i.Value).Append("]--->").AppendLine(ReplaceNull(entry.Value[i.Value])); } } else { for (i = 0; i.Value < entry.Value.Count; i++) { if (entry.Value[i.Value] is not ExpandoObject) result.Append(level).Append(") ").Append(super).Append(" : ").Append(entry.Key).Append("[").Append(i.Value).Append("]--->").AppendLine(ReplaceNull(entry.Value[i.Value])); } for (i = 0; i.Value < entry.Value.Count; i++) { if (entry.Value[i.Value] is ExpandoObject) TextResolveEntry(result, entry.Value[i.Value], level, string.Concat(super, " : ", entry.Key), i.Value, group); } } i = null; } } } level -= 1; if (level == 0) { } } internal static string GetText(string edaObjectFile, Common common, string json) { StringBuilder result = new(); if (result.Length > 0) //Skipping because System.Text.Json changed the way Expando works { string title = string.Concat(Path.GetFileName(edaObjectFile), " - ", common.Source); dynamic? expandoObject = JsonSerializer.Deserialize(json); _ = result.AppendLine(title); _ = result.AppendLine("Loop -> \"Normal\""); _ = result.AppendLine(edaObjectFile); _ = result.AppendLine(); TextResolveEntry(result, expandoObject, 0, string.Empty, null, group: false); _ = result.AppendLine(); _ = result.AppendLine(); _ = result.AppendLine(); _ = result.AppendLine(title); _ = result.AppendLine("Loop -> \"Grouped\""); _ = result.AppendLine(edaObjectFile); _ = result.AppendLine(); TextResolveEntry(result, expandoObject, 0, string.Empty, null, group: true); } return result.ToString(); } internal static string GetEdaObjectToDMSGridFormat(string edaObjectFile, Common common, bool useAlias) { StringBuilder result = new(); if (string.IsNullOrEmpty(edaObjectFile)) { } string? value; string[] segments; int? recordStart = null; bool hasRecordStart = false; string name = string.Concat(common.LogisticsEquipmentAlias, "_", common.ContainerName); _ = result.AppendLine(""); _ = result.Append("").AppendLine(); _ = result.AppendLine(" "); _ = result.AppendLine(" <13><10>"); _ = result.AppendLine(" <9>"); _ = result.AppendLine(" "); _ = result.AppendLine(" "); for (int i = 0; i < common.Parameters.Count; i++) { if (common.Parameters[i][3] == "RECORD_START") { hasRecordStart = true; break; } } for (int i = 0; i < common.Parameters.Count; i++) { if (recordStart is null && common.Parameters[i][3] == "RECORD_START") recordStart = i; if ((!hasRecordStart || (hasRecordStart && recordStart.HasValue)) && common.Parameters[i][0] == "True") { if (useAlias && !string.IsNullOrEmpty(common.Parameters[i][3])) { value = common.Parameters[i][3]; value ??= string.Empty; name = value.Replace("'", string.Empty); } else { value = common.Parameters[i][2]; value ??= string.Empty; segments = value.Split('/'); name = segments[^1]; } _ = result.Append(" ").AppendLine(); } } _ = result.AppendLine(" "); _ = result.AppendLine(" "); _ = result.AppendLine(" "); _ = result.AppendLine(" "); _ = result.AppendLine(" "); _ = result.AppendLine(" 7"); _ = result.AppendLine(" 0"); _ = result.AppendLine(" "); _ = result.AppendLine(" "); _ = result.AppendLine(" "); _ = result.AppendLine(" "); _ = result.AppendLine(" "); _ = result.AppendLine(""); return result.ToString(); } internal static string GetEdaObjectToAPCParameter(string edaObjectFile, Common common) { StringBuilder result = new(); if (string.IsNullOrEmpty(edaObjectFile)) { } string? value; string parameter; string[] segments; string parameterSub35; _ = result.AppendLine("ExportFileVersion=1.0.6"); _ = result.AppendLine("ExportFromTabsheet=Para"); _ = result.AppendLine("FieldName\tLongName\tMatchMode\tEquipment\tName\tPdsfNameConvCol\tPdsfNameDataType\tType\tChamberInfo\tUnifiedPara\tDateFormat\tUsername\tId\tWorkcenterId\tSite\tArea\tWorkcenter\tValidFrom\tValidTo"); _ = result.AppendLine("TIME_PREV_DIFF\tTIME_PREV_DIFF\tEXACT\t*\tTIME_PREV_DIFF\t\tNUMERIC\tRUN\t\tTIME_PREV_DIFF\t\tPHARES\t95069\t4571\tMesa\t\t\t4/15/2020 6:10 PM"); _ = result.AppendLine("TIME\tTIME\tEXACT\t*\tTIME\t\tNUMERIC\tRUN\t\tTIME\t\tPHARES\t95070\t4571\tMesa\t\t\t4/15/2020 6:10 PM"); for (int i = 0; i < common.Parameters.Count; i++) { if (common.Parameters[i][0] == "True") { value = common.Parameters[i][2]; value ??= string.Empty; segments = value.Split('/'); parameter = segments[^1]; if (parameter.Length < 35) parameterSub35 = parameter; else parameterSub35 = parameter[..35]; _ = result.Append(parameterSub35).Append("\tDIVERSE\tEXACT\t*\t").Append(parameterSub35).AppendLine("\t\tNUMERIC\tRUN\t\t\t\tPHARES\t9000000012\t4571\tMesa\t\t\t4/15/2020 6:10 PM"); } } _ = result.AppendLine(); _ = result.AppendLine(); _ = result.AppendLine(); for (int i = 0; i < common.Parameters.Count; i++) { if (common.Parameters[i][0] == "True") { value = common.Parameters[i][2]; value ??= string.Empty; segments = value.Split('/'); parameter = segments[^1]; _ = result.Append(parameter).Append("\tDIVERSE\tEXACT\t*\t").Append(parameter).AppendLine("\t\tNUMERIC\tRUN\t\t\t\tPHARES\t9000000012\t4571\tMesa\t\t\t4/15/2020 6:10 PM"); } } return result.ToString(); } internal static string GetEdaObjectToAPCRunKeyNumber(string edaObjectFile, Common common) { StringBuilder result = new(); if (string.IsNullOrEmpty(edaObjectFile)) { } string? value; string parameter; string[] segments; string parameterSub21; string parameterSub35; _ = result.AppendLine("ExportFileVersion=1.0.6"); _ = result.AppendLine("ExportFromTabsheet=Run-Keynumbers"); _ = result.AppendLine("FeatureName\tShortName\tChamber\tComments\tVarMode\tPara\tExclude0\tTrigOn1\tTrigOn2\tTrigOn3\tTrigOff1\tTrigOff2\tTrigOff3\tTrigDelay\tTrigNorm\tTrigNvl\tTrigTrg\tAddCondOn\tActive\tFilter1\tFilter2\tFilter3\tFilter4\tUnit\tId\tWorkcenterId\tSite\tArea\tWorkcenter\tUsername\tValidFrom\tValidTo"); for (int i = 0; i < common.Parameters.Count; i++) { if (common.Parameters[i][0] == "True") { value = common.Parameters[i][2]; value ??= string.Empty; segments = value.Split('/'); parameter = segments[^1]; if (parameter.Length < 35) parameterSub35 = parameter; else parameterSub35 = parameter[..35]; if (parameter.Length < 21) parameterSub21 = parameter; else parameterSub21 = parameter[..21]; _ = result.Append(parameterSub21).Append("_MIN\t").Append(parameterSub21).Append("_MIN\t\t\tMIN\t").Append(parameterSub35).AppendLine("\t0\tTIME\t=\tRUNSTART\tTIME\t=\tRUNEND\t\t\t\t\t\t1\t\t\t\t\t\t-1\t-1\t\t\t\tECPHARES\t5/2/2017 2:44 PM"); } } _ = result.AppendLine(); _ = result.AppendLine(); _ = result.AppendLine(); for (int i = 0; i < common.Parameters.Count; i++) { if (common.Parameters[i][0] == "True") { value = common.Parameters[i][2]; value ??= string.Empty; segments = value.Split('/'); parameter = segments[^1]; _ = result.Append(parameter).Append("_MIN\t").Append(parameter).Append("_MIN\t\t\tMIN\t").Append(parameter).AppendLine("\t0\tTIME\t=\tRUNSTART\tTIME\t=\tRUNEND\t\t\t\t\t\t1\t\t\t\t\t\t-1\t-1\t\t\t\tECPHARES\t5/2/2017 2:44 PM"); } } return result.ToString(); } }