private static string GenerateCanMessageTypesBody(IEnumerable <CanMessageType> canMessageTypes) { int n = 4; int o = 2; StringBuilder canMessageTypesBody = new StringBuilder(); canMessageTypesBody.AppendLine(n * (0 + o), $"// Generated by GenerateCanMessageTypesBody()"); canMessageTypesBody.AppendLine(n * (0 + o), $""); canMessageTypesBody.AppendLine(n * (0 + o), $"static CanMessageTypes()"); canMessageTypesBody.AppendLine(n * (0 + o), $"{{"); foreach (var canMessageType in canMessageTypes) { canMessageTypesBody.AppendLine(n * (1 + o), $"AllCanMessageTypes.Add({canMessageType.Id}, {canMessageType.Name});"); } canMessageTypesBody.AppendLine(n * (0 + o), $"}}"); canMessageTypesBody.AppendLine(n * (0 + o), $""); canMessageTypesBody.AppendLine(n * (0 + o), $"public static Dictionary<UInt32, CanMessageType> AllCanMessageTypes = new Dictionary<UInt32, CanMessageType>();"); canMessageTypesBody.AppendLine(n * (0 + o), $""); foreach (var canMessageType in canMessageTypes) { canMessageTypesBody.Append(CanDbCSharpCodeGeneration.GenerateCanMessageTypeCode(canMessageType, 2, 4)); } return(canMessageTypesBody.ToString()); }
private static string GenerateCanExtractionAndInsertionCode(IEnumerable <CanMessageType> canMessageTypes) { StringBuilder stringBuilder = new StringBuilder(); foreach (var CanMessageType in canMessageTypes) { stringBuilder.Append(CanDbCSharpCodeGeneration.GenerateMessageCode(CanMessageType, 1)); } return(stringBuilder.ToString()); }
// TODO: Modify code such that the CanMessageReceiver class is not static. // The constructor should enforce setting the event listener // TODO: Make generated classes partial such that they can be extended private static string GenerateCanMessageTypesCode(IEnumerable <CanMessageType> canMessageTypes, string namespaceName) { const int n = 4; int o = 0; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append($@" // This file was generated automatically by the program {Assembly.GetExecutingAssembly().GetName().Name} // Manual modification is certanly possible, but is disencouraged. // For manual additions to the database it is better to use the fact the all // classes are defined as partial to extend them. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using CanDefinitions; "); string canMessageReceiverBody = GenerateMessageReceiverBody(canMessageTypes); string canMessageReceiverClass = CanDbCSharpCodeGeneration.GenerateClass("public static partial", "CanMessageReceiver", canMessageReceiverBody); string canMessageTypesBody = GenerateCanMessageTypesBody(canMessageTypes); string canMessageTypesClass = CanDbCSharpCodeGeneration.GenerateClass("public static partial", "CanMessageTypes", canMessageTypesBody); IEnumerable <CanSignalType> allSignals = canMessageTypes.SelectMany(x => x.Signals.Values); string canSignalTypesBody = GenerateCanSignalTypesTypesBody(allSignals); string canSignalTypesClass = CanDbCSharpCodeGeneration.GenerateClass("public static partial", "CanSignalTypes", canSignalTypesBody); var classes = new List <string> { canMessageReceiverClass, canMessageTypesClass, canSignalTypesClass, }; string nameSpaceBase = CanDbCSharpCodeGeneration.GenerateNameSpace(namespaceName, classes); string nameSpaceMessages = CanDbCSharpCodeGeneration.GenerateNameSpace(namespaceName + ".Messages", new List <string> { GenerateCanExtractionAndInsertionCode(canMessageTypes) }); stringBuilder.Append(nameSpaceBase); stringBuilder.Append(nameSpaceMessages); return(stringBuilder.ToString()); }