using System.Collections.Generic; using System.Dynamic; using System.IO; using System.Text; using System.Text.Json; namespace EDAViewer.Singleton.Helper { public partial class Background { public class EdaDCP { internal static string GetEdaObjectToHtml(string edaObjectFile, Common common) { StringBuilder result = new StringBuilder(); 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").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(common.StoragePath).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) { 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 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 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; } internal static string GetText(string edaObjectFile, Common common, string json) { StringBuilder result = new StringBuilder(); 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 StringBuilder(); string[] segments; int? recordStart = null; 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 (recordStart is null && common.Parameters[i][3] == "RECORD_START") recordStart = i; if (recordStart.HasValue && common.Parameters[i][0] == "True") { if (useAlias && !string.IsNullOrEmpty(common.Parameters[i][3])) name = common.Parameters[i][3].Replace("'", string.Empty); else { segments = common.Parameters[i][2].Split('/'); name = segments[segments.Length - 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 StringBuilder(); string parameter; string[] segments; string parameterSub35; string name = string.Concat(common.LogisticsEquipmentAlias, "_", common.ContainerName); 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") { segments = common.Parameters[i][2].Split('/'); parameter = segments[segments.Length - 1]; if (parameter.Length < 35) parameterSub35 = parameter; else parameterSub35 = parameter.Substring(0, 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") { segments = common.Parameters[i][2].Split('/'); parameter = segments[segments.Length - 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 StringBuilder(); string parameter; string[] segments; string parameterSub21; string parameterSub35; string name = string.Concat(common.LogisticsEquipmentAlias, "_", common.ContainerName); 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") { segments = common.Parameters[i][2].Split('/'); parameter = segments[segments.Length - 1]; if (parameter.Length < 35) parameterSub35 = parameter; else parameterSub35 = parameter.Substring(0, 35); if (parameter.Length < 21) parameterSub21 = parameter; else parameterSub21 = parameter.Substring(0, 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") { segments = common.Parameters[i][2].Split('/'); parameter = segments[segments.Length - 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(); } } } }