public static void MMethodGroupForFileSystemToObjectGraphBaseAssembly(IGClass gClass) { var gMethodGroup = new GMethodGroup(gName: "MethodGroup specific to the FileSystemToObjectGraph"); // None gClass.AddMethodGroup(gMethodGroup); }
public static IGMethodGroup MCreateStartStopAsyncMethods(string gAccessModifier = "") { GMethodGroup newgMethodGroup = new GMethodGroup(gName: "Start and Stop Async Methods for IHostedService (part of Generic Host)"); var gMethod = MCreateStartAsyncMethod(gAccessModifier); newgMethodGroup.GMethods[gMethod.Philote] = gMethod; gMethod = MCreateStopAsyncMethod(gAccessModifier); newgMethodGroup.GMethods[gMethod.Philote] = gMethod; return(newgMethodGroup); }
public static IGMethodGroup MCreateHostApplicationLifetimeEventHandlerMethods() { GMethodGroup newgMethodGroup = new GMethodGroup(gName: "OnStarted, OnStopping, and OnStopped Event Handler Methods for HostApplicationLifetime events"); IGMethod gMethod = MCreateOnStartedMethod(); newgMethodGroup.GMethods[gMethod.Philote] = gMethod; gMethod = MCreateOnStoppingMethod(); newgMethodGroup.GMethods[gMethod.Philote] = gMethod; gMethod = MCreateOnStoppedMethod(); newgMethodGroup.GMethods[gMethod.Philote] = gMethod; return(newgMethodGroup); }
public static IDictionary <IGMethodGroupId <TValue>, IGMethodGroup <TValue> > ConvertToInterfaceMethodGroups(this IGClass gClass) { var gInterfaceMethodGroups = new Dictionary <IGMethodGroupId <TValue>, IGMethodGroup <TValue> >(); IGMethodGroup gInterfaceMethodGroup; IGMethod gInterfaceMethod = default; foreach (var kvp in gClass.GMethodGroups) { gInterfaceMethodGroup = new GMethodGroup(gName: kvp.Value.GName); foreach (var mkvp in kvp.Value.GMethods) { gInterfaceMethod = ConvertMethodToInterfaceMethod(mkvp.Value); if (gInterfaceMethod != default) { gInterfaceMethodGroup.GMethods.Add(gInterfaceMethod.Id, gInterfaceMethod); } } gInterfaceMethodGroups.Add(gInterfaceMethodGroup.Id, gInterfaceMethodGroup); } return(gInterfaceMethodGroups); }
//public static void MStateMachineFinalizer( // ( // IEnumerable<GAssemblyUnit> gAssemblyUnits, // IEnumerable<GCompilationUnit> gCompilationUnits, // IEnumerable<GNamespace> gNamespacess, // IEnumerable<GClass> gClasss, // IEnumerable<GMethod> gMethods) lookupResults) { // MStateMachineFinalizer(lookupResults.gCompilationUnits.First(), lookupResults.gNamespacess.First(), // lookupResults.gClasss.First(), lookupResults.gMethods.First(), finalGStateConfigurations); //} //public static void MStateMachineFinalizer() { // MStateMachineFinalizer(mCreateAssemblyGroupResult.GTitularBaseCompilationUnit, // mCreateAssemblyGroupResult.GNamespaceBase, mCreateAssemblyGroupResult.GClassBase, // gStateConfiguration: mCreateAssemblyGroupResult.GPrimaryConstructorBase.GStateConfigurations); //} public static void MStateMachineFinalizer(IGAssemblyGroupBasicConstructorResult mCreateAssemblyGroupResult) { #region Accumulate the StateConfigurations var finalGStateConfiguration = new GStateConfiguration(); foreach (var gAU in mCreateAssemblyGroupResult.GAssemblyGroup.GAssemblyUnits) { // finalGStateConfigurations.Add(gAu.GStateConfiguration); foreach (var gCU in gAU.Value.GCompilationUnits) { // finalGStateConfigurations.Add(gCu.GStateConfiguration); foreach (var gNs in gCU.Value.GNamespaces) { // finalGStateConfigurations.Add(gNs.GStateConfiguration); foreach (var gCl in gNs.Value.GClasss) { // finalGStateConfigurations.Add(gCl.GStateConfiguration); foreach (var gMe in gCl.Value.CombinedMethods()) { finalGStateConfiguration.GDOTGraphStatements.AddRange(gMe.GStateConfiguration.GDOTGraphStatements); } } } } } #endregion if (finalGStateConfiguration.GDOTGraphStatements.Any()) { //var parsedDiGraph = ParseDiGraphToStateMachine(finalGStateConfiguration); ParseDiGraphToStateMachine(finalGStateConfiguration); #region StateMachine EnumerationGroups var gEnumerationGroup = new GEnumerationGroup(gName: "State and Trigger Enumerations for StateMachine"); #region State Enumeration #region State Enumeration members var gEnumerationMemberList = new List <IGEnumerationMember>(); var enumerationValue = 1; foreach (var name in finalGStateConfiguration.GStateNames) { gEnumerationMemberList.Add(LocalizableEnumerationMember(name, enumerationValue++)); } // gEnumerationMemberList = new List<IGEnumerationMember>() { // LocalizableEnumerationMember("WaitingForInitialization",1,"Power-On State - waiting until minimal initialization condition has been met","Waiting For Initialization"), // LocalizableEnumerationMember("InitiateContact",1,"Signal to the Console Monitor that we are a valid ConsoleSource","Initiate Contact"), //}; var gEnumerationMembers = new Dictionary <IPhilote <IGEnumerationMember>, IGEnumerationMember>(); foreach (var o in gEnumerationMemberList) { gEnumerationMembers.Add(o.Philote, o); } #endregion var gEnumeration = new GEnumeration(gName: "State", gVisibility: "public", gInheritance: "", gEnumerationMembers: gEnumerationMembers); #endregion gEnumerationGroup.GEnumerations.Add(gEnumeration.Philote, gEnumeration); #region Trigger Enumeration #region Trigger Enumeration members gEnumerationMemberList = new List <IGEnumerationMember>(); enumerationValue = 1; foreach (var name in finalGStateConfiguration.GTriggerNames) { gEnumerationMemberList.Add(LocalizableEnumerationMember(name, enumerationValue++)); } //gEnumerationMemberList = new List<IGEnumerationMember>() { // LocalizableEnumerationMember("InitializationCompleteReceived",1,"The minimal initialization conditions have been met","Initialization Complete Received"), //}; gEnumerationMembers = new Dictionary <IPhilote <IGEnumerationMember>, IGEnumerationMember >(); //{gEnumerationMemberList.ForEach(m=>m.Philote,m)}; foreach (var o in gEnumerationMemberList) { gEnumerationMembers.Add(o.Philote, o); } #endregion gEnumeration = new GEnumeration(gName: "Trigger", gVisibility: "public", gInheritance: "", gEnumerationMembers: gEnumerationMembers); gEnumerationGroup.GEnumerations.Add(gEnumeration.Philote, gEnumeration); #endregion mCreateAssemblyGroupResult.GNamespaceBase.AddEnumerationGroup(gEnumerationGroup); #endregion //#region StateMachine Transitions Static variable //// Add a StaticVariable to the class //List<string> gStatements = new List<string>() {"new List<StateConfiguration>(){"}; //foreach (var sc in parsedDiGraph.StateConfigurations) { // gStatements.Add(sc); //} //gStatements.Add("}"); //var gStaticVariable = new GStaticVariable("stateConfigurations", gType: "List<StateConfiguration>", // gBody: new GBody(gStatements)); //gClass.GStaticVariables.Add(gStaticVariable.Philote, gStaticVariable); //#endregion #region Create the detailed ConfigureStateMachine Method using the parsedDiGraph information // add a method to the class that configures the StateMachine according to the StateConfigurations parsed from the diGraph var gMethodGroup = new GMethodGroup(gName: "Detailed ConfigureStateMachine Method"); var gBody = new GBody(new List <string>()); var gMethod = new GMethod( new GMethodDeclaration(gName: "ConfigureStateMachine", gType: "void", gVisibility: "private", gAccessModifier: ""), gBody); //"// attribution :https://github.com/dhrobbins/ApprovaFlow/blob/master/ApprovaFlow/ApprovaFlow/ApprovaFlow/Workflow/WorkflowProcessor.cs", //"// attribution :https://github.com/frederiksen/Stateless-Designer/blob/master/src/StatelessDesigner.VS2017/StatelessCodeGenerator/StatelessCodeGenerator.cs", //"// Heavily modified to work in a code generator", //"", //gBody.GStatements.Add( // "#region Delegates for each state's Entry and Exit method calls, and GuardClauses method calls"); foreach (var stateName in finalGStateConfiguration.GStateNames) { gBody.GStatements.Add($"StateMachine.Configure(State.{stateName})"); var permittedStateTransitions = finalGStateConfiguration.GDiGraphStates.Where(x => x.state == stateName) .Select(x => (triggerName: x.trigger, nextStateName: x.nextstate)); foreach (var pST in permittedStateTransitions) { gBody.GStatements.Add($" .Permit(Trigger.{pST.triggerName},State.{pST.nextStateName})"); } gBody.GStatements.Add($";"); // $"public EntryExitDelegate On{stateName}Entry = null;", // $"public EntryExitDelegate On{stateName}Exit = null;", } ; //} //gBody.GStatements.Add("#endregion"); //gBody.GStatements.Add("#region Fluent"); //foreach (var stateConfiguration in parsedDiGraph.StateConfigurations) { // //gBody.GStatements. Add("StateMachine.Configure($State},"); // // if (true) // stateName == stateConfiguration) { // // gBody.GStatements.Add($"#endregion"); //} // gBody.GStatements.Add("#endregion"); //gBody.GStatements.AddRange( // "#region Delegates for each state's Entry and Exit method calls, and GuardClauses method calls", // "#endregion " // ); //"// Get a distinct list of states with a trigger from the stateConfigurations static variable", //"// State => Trigger => TargetState", //"var states = StateConfigurations.AsQueryable()", //".Select(x => x.State)", //".Distinct()", //".Select(x => x)", //".ToList();", //"// Get each trigger for each state", //"states.ForEach(state =>{", //"var triggers = StateConfigurations.AsQueryable()", //".Where(config => config.State == state)", //".Select(config => new { Trigger = config.Trigger, TargetState = config.NextState })", //".ToList();", //"triggers.ForEach(trig => {", //"StateMachine.Configure(state).Permit(trig.Trigger, trig.TargetState);", //" });", //"});", #endregion gMethodGroup.GMethods.Add(gMethod.Philote, gMethod); mCreateAssemblyGroupResult.GClassBase.GMethodGroups.Add(gMethodGroup.Philote, gMethodGroup); #region Add the statement that fires the InitializationCompleteReceived Trigger //var statementList = gClass.CombinedMethods().Where(x => x.GDeclaration.GName == "StartAsync").First().GBody // .GStatements; //statementList.Insert(statementList.Count - 1, "StateMachine.Fire(Trigger.InitializationCompleteReceived);"); #endregion } }
public static IGAssemblyGroup MConsoleSinkGHS(string gAssemblyGroupName, string subDirectoryForGeneratedFiles = default, string baseNamespaceName = default, bool hasInterfaces = true, GPatternReplacement gPatternReplacement = default) { GPatternReplacement _gPatternReplacement = gPatternReplacement == default ? new GPatternReplacement() : gPatternReplacement; var mCreateAssemblyGroupResult = MAssemblyGroupGHHSConstructor(gAssemblyGroupName, subDirectoryForGeneratedFiles, baseNamespaceName, hasInterfaces, _gPatternReplacement); #region Initial StateMachine Configuration mCreateAssemblyGroupResult.GPrimaryConstructorBase.GStateConfiguration.GDOTGraphStatements.Add( @" WaitingForInitialization -> WaitingForRequestToWriteSomething [label = ""InitializationCompleteReceived""] WaitingForRequestToWriteSomething -> WaitingForWriteToComplete [label = ""WriteStarted""] WaitingForWriteToComplete -> WaitingForRequestToWriteSomething [label = ""WriteFinished""] WaitingForWriteToComplete -> WaitingForRequestToWriteSomething [label = ""CancellationTokenActivated""] WaitingForRequestToWriteSomething -> ServiceFaulted [label = ""ExceptionCaught""] WaitingForWriteToComplete ->ServiceFaulted [label = ""ExceptionCaught""] WaitingForRequestToWriteSomething ->ShutdownStarted [label = ""CancellationTokenActivated""] WaitingForRequestToWriteSomething ->ShutdownStarted [label = ""StopAsyncActivated""] WaitingForWriteToComplete ->ShutdownStarted [label = ""StopAsyncActivated""] ShutdownStarted ->ShutdownComplete [label = ""ShutdownCompleted""] " ); #endregion var s1 = new List <string>() { @"StateMachine.Configure(State.WaitingForInitialization)", //$" .OnEntry(() => {{ if (OnWaitingForInitializationEntry!= null) OnWaitingForInitializationEntry(); }})", //$" .OnExit(() => {{ if (OnWaitingForInitializationExit!= null) OnWaitingForInitializationExit(); }})", $" .Permit(Trigger.InitializationCompleteReceived, State.WaitingForRequestToWriteSomething)", $";", @"StateMachine.Configure(State.WaitingForRequestToWriteSomething)", //$" .OnEntry(() => {{ if (OnWaitingForInitializationEntry!= null) OnWaitingForInitializationEntry(); }})", // $" .OnExit(() => {{ if (OnWaitingForInitializationExit!= null) OnWaitingForInitializationExit(); }})", $" .Permit(Trigger.WriteStarted, State.WaitingForWriteToComplete)", $" .Permit(Trigger.StopAsyncActivated, State.ShutdownStarted)", // $" .PermitReentryIf(Trigger.InitializationCompleteReceived, State.WaitingForRequestToWriteSomething, () => {{ if (GuardClauseFroWaitingForInitializationToWaitingForRequestToWriteSomethingUsingTriggerInitializationCompleteReceived!= null) return GuardClauseFroWaitingForInitializationToWaitingForRequestToWriteSomethingUsingTriggerInitializationCompleteReceived(); return true; }})", $";", @"StateMachine.Configure(State.WaitingForWriteToComplete)", $" .OnEntry((string mesg) => {{Console.Write(mesg);}})", // $" .OnExit(() => {{ if (OnWaitingForInitializationExit!= null) OnWaitingForInitializationExit(); }})", $" .Permit(Trigger.WriteFinished, State.WaitingForRequestToWriteSomething)", $" .Permit(Trigger.StopAsyncActivated, State.ShutdownStarted)", // $" .PermitReentryIf(Trigger.InitializationCompleteReceived, State.WaitingForRequestToWriteSomething, () => {{ if (GuardClauseFroWaitingForInitializationToWaitingForRequestToWriteSomethingUsingTriggerInitializationCompleteReceived!= null) return GuardClauseFroWaitingForInitializationToWaitingForRequestToWriteSomethingUsingTriggerInitializationCompleteReceived(); return true; }})", $";", @"StateMachine.Configure(State.ShutdownStarted)", //$" .OnEntry(() => {{ if (OnWaitingForInitializationEntry!= null) OnWaitingForInitializationEntry(); }})", // $" .OnExit(() => {{ if (OnWaitingForInitializationExit!= null) OnWaitingForInitializationExit(); }})", $" .Permit(Trigger.ShutdownCompleted, State.ShutdownComplete)", // $" .PermitReentryIf(Trigger.InitializationCompleteReceived, State.WaitingForRequestToWriteSomething, () => {{ if (GuardClauseFroWaitingForInitializationToWaitingForRequestToWriteSomethingUsingTriggerInitializationCompleteReceived!= null) return GuardClauseFroWaitingForInitializationToWaitingForRequestToWriteSomethingUsingTriggerInitializationCompleteReceived(); return true; }})", $";", @"StateMachine.Configure(State.ShutdownComplete);", }; #region Add UsingGroups to the Titular Derived and Titular Base CompilationUnits #region Add UsingGroups common to both the Titular Derived and Titular Base CompilationUnits #endregion #region Add UsingGroups specific to the Titular Base CompilationUnit #endregion #endregion #region Injected PropertyGroup For ConsoleSinkAndConsoleSource #endregion #region Additional Properties needed by the Base class var lclPropertyGroup = new GPropertyGroup($"Private Properties part of {mCreateAssemblyGroupResult.GClassBase.GName}"); var mesgProperty = new GProperty(gName: "Mesg", gType: "string", gVisibility: "private"); lclPropertyGroup.GPropertys.Add(mesgProperty.Philote, mesgProperty); mCreateAssemblyGroupResult.GClassBase.GPropertyGroups.Add(lclPropertyGroup.Philote, lclPropertyGroup); #endregion #region Add the MethodGroup containing new methods provided by this library to the Titular Base CompilationUnit var gMethodGroup = new GMethodGroup( gName: $"MethodGroup specific to {mCreateAssemblyGroupResult.GClassBase.GName}"); foreach (var gMethod in MCreateWriteMethodInConsoleSink()) { gMethodGroup.GMethods.Add(gMethod.Philote, gMethod); } mCreateAssemblyGroupResult.GClassBase.AddMethodGroup(gMethodGroup); #endregion #region Add additional classes provided by this library to the Titular Base CompilationUnit #endregion #region Add References used by the Titular Derived and Titular Base CompilationUnits to the ProjectUnit #region Add References used by both the Titular Derived and Titular Base CompilationUnits #endregion #region Add References unique to the Titular Base CompilationUnit #endregion #endregion /*******************************************************************************/ #region Update the Interface Assembly for this service #region Add UsingGroups for the Titular Derived Interface and Titular Base Interface #region Add UsingGroups common to both the Titular Derived Interface and the Titular Base Interface #endregion #region Add UsingGroups specific to the Titular Base Interface #endregion #endregion #region Add References for the Titular Interface ProjectUnit #region Add References common to both the Titular Derived Interface and Titular Base Interface #endregion #region Add References unique to the Titular Base Interface CompilationUnit #endregion #endregion #endregion #region Finalize the GHHS GAssemblyGroupGHHSFinalizer(mCreateAssemblyGroupResult); #endregion #region Populate the ConfigureStateMachine method mCreateAssemblyGroupResult.GClassBase.CombinedMethods() .Where(x => x.GDeclaration.GName == "ConfigureStateMachine").First().GBody.GStatements.AddRange(s1); // mCreateAssemblyGroupResult.GPrimaryConstructorBase.GBody.GStatements.AddRange(s1); #endregion return(mCreateAssemblyGroupResult.GAssemblyGroup); }
public static IGAssemblyGroup MFileSystemToObjectGraphGHS(string gAssemblyGroupName, string subDirectoryForGeneratedFiles = default, string baseNamespaceName = default, bool hasInterfaces = true, IGPatternReplacement gPatternReplacement = default) { IGPatternReplacement _gPatternReplacement = gPatternReplacement == default ? new GPatternReplacement() : gPatternReplacement; var mCreateAssemblyGroupResult = MAssemblyGroupGHHSConstructor(gAssemblyGroupName, subDirectoryForGeneratedFiles, baseNamespaceName, hasInterfaces, _gPatternReplacement); #region Initial StateMachine Configuration mCreateAssemblyGroupResult.GPrimaryConstructorBase.GStateConfiguration.GDOTGraphStatements.Add( @" WaitingForInitialization ->InitiateContactWithConsoleMonitor [label = ""InitializationCompleteReceived""] // ToDo: move this to ConsoleMonitorClient Connected -> Execute [label = ""inputline == 1""] Connected -> Relinquish [label = ""inputline == 99""] Connected -> Editing [label = ""inputline == 2""] Editing -> Connected [label=""EditingComplete""] Execute -> Connected [label = ""LongRunningTaskStartedNotificationSent""] Relinquish -> Contacted [label = ""RelinquishNotificationAcknowledgementReceived""] Connected ->ShutdownStarted [label = ""CancellationTokenActivated""] Editing->ShutdownStarted[label = ""CancellationTokenActivated""] Execute->ShutdownStarted[label = ""CancellationTokenActivated""] Relinquish->ShutdownStarted[label = ""CancellationTokenActivated""] Connected -> ServiceFaulted [label = ""ExceptionCaught""] Editing ->ServiceFaulted [label = ""ExceptionCaught""] Execute ->ServiceFaulted [label = ""ExceptionCaught""] Relinquish ->ServiceFaulted [label = ""ExceptionCaught""] Connected ->ShutdownStarted [label = ""StopAsyncActivated""] Editing ->ShutdownStarted [label = ""StopAsyncActivated""] Execute ->ShutdownStarted [label = ""StopAsyncActivated""] Relinquish ->ShutdownStarted [label = ""StopAsyncActivated""] " ); #endregion #region Add UsingGroups to the Titular Derived and Titular Base CompilationUnits #region Add UsingGroups common to both the Titular Derived and Titular Base CompilationUnits var gUsingGroup = new GUsingGroup( $"UsingGroup common to both {mCreateAssemblyGroupResult.GTitularDerivedCompilationUnit.GName} and {mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GName}"); foreach (var gName in new List <string>() { "ATAP.Utilities.ComputerInventory.Hardware", "ATAP.Utilities.Persistence", }) { var gUsing = new GUsing(gName); gUsingGroup.GUsings.Add(gUsing.Philote, gUsing); } mCreateAssemblyGroupResult.GTitularDerivedCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); #endregion #region Add UsingGroups specific to the Titular Base CompilationUnit #endregion #endregion #region Injected PropertyGroup For ConsoleSinkAndConsoleSource #endregion #region Add the MethodGroup containing new methods provided by this library to the Titular Base CompilationUnits var gMethodGroup = new GMethodGroup( gName: $"MethodGroup specific to {mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GName}"); var gMethod = MCreateConvertFileSystemToObjectGraphAsync(mCreateAssemblyGroupResult.GClassBase); gMethodGroup.GMethods.Add(gMethod.Philote, gMethod); mCreateAssemblyGroupResult.GClassBase.AddMethodGroup(gMethodGroup); #endregion #region Add additional classes provided by this library to the Titular Base CompilationUnit #endregion #region Add References used by the Titular Derived and Titular Base CompilationUnits to the ProjectUnit #region Add References used by both the Titular Derived and Titular Base CompilationUnits foreach (var o in new List <IGItemGroupInProjectUnit>() { new GItemGroupInProjectUnit( "References common to both Titular and Base specific to {titularAssemblyUnitLookupPrimaryConstructorResults.gCompilationUnits.First().GName}", "References to the Hardware, Persistence, and Progress classes and methods", new GBody(new List <string>() { "<PackageReference Include=\"ATAP.Utilities.ComputerInventory.Hardware.Extensions\" />", "<PackageReference Include=\"ATAP.Utilities.Persistence.Interfaces\" />", "<PackageReference Include=\"ATAP.Utilities.Persistence\" />", }) ) } ) { mCreateAssemblyGroupResult.GTitularAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits .Add(o.Philote, o); } #endregion #region Add References unique to the Titular Base CompilationUnit #endregion #endregion /*******************************************************************************/ #region Update the Interface Assembly for this service #region Add UsingGroups for the Titular Derived Interface and Titular Base Interface #region Add UsingGroups common to both the Titular Derived Interface CompilationUnit and the Titular Base Interface CompilationUnit gUsingGroup = new GUsingGroup( $"UsingGroup common to both {mCreateAssemblyGroupResult.GTitularInterfaceDerivedCompilationUnit.GName} and {mCreateAssemblyGroupResult.GTitularInterfaceBaseCompilationUnit.GName}"); foreach (var gName in new List <string>() { "ATAP.Utilities.ComputerInventory.Hardware", "ATAP.Utilities.Persistence", }) { var gUsing = new GUsing(gName); gUsingGroup.GUsings.Add(gUsing.Philote, gUsing); } mCreateAssemblyGroupResult.GTitularInterfaceDerivedCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); mCreateAssemblyGroupResult.GTitularInterfaceBaseCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); #endregion #region Add UsingGroups specific to the Titular Base Interface #endregion #endregion #endregion /* ************************************************************************************ */ #region Update the ProjectUnits in both the Titular AssemblyUnit and Titular InterfacesAssemblyUnit #region Add References for the Titular Interface ProjectUnit #region Add References common to both the Titular Derived Interface and Titular Base Interface foreach (var o in new List <IGItemGroupInProjectUnit>() { new GItemGroupInProjectUnit( $"References common to both {mCreateAssemblyGroupResult.GTitularDerivedCompilationUnit.GName} and {mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GName}", "References to the Hardware, Persistence, and Progress classes and methods", new GBody(new List <string>() { "<PackageReference Include=\"ATAP.Utilities.ComputerInventory.Hardware.Extensions\" />", "<PackageReference Include=\"ATAP.Utilities.Persistence.Interfaces\" />", "<PackageReference Include=\"ATAP.Utilities.Persistence\" />", }) ) } ) { mCreateAssemblyGroupResult.gTitularInterfaceAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits.Add(o.Philote, o); } #endregion #region Add References unique to the Titular Base Interface CompilationUnit #endregion #endregion #endregion #region Finalize the GHHS GAssemblyGroupGHHSFinalizer(mCreateAssemblyGroupResult); #endregion return(mCreateAssemblyGroupResult.GAssemblyGroup); }
public static IGAssemblyGroup MConsoleSourceGHS(string gAssemblyGroupName, string subDirectoryForGeneratedFiles = default, string baseNamespaceName = default, bool hasInterfaces = true, GPatternReplacement gPatternReplacement = default) { GPatternReplacement _gPatternReplacement = gPatternReplacement == default ? new GPatternReplacement() : gPatternReplacement; var mCreateAssemblyGroupResult = MAssemblyGroupGHHSConstructor(gAssemblyGroupName, subDirectoryForGeneratedFiles, baseNamespaceName, hasInterfaces, _gPatternReplacement); #region Initial StateMachine Configuration mCreateAssemblyGroupResult.GPrimaryConstructorBase.GStateConfiguration.GDOTGraphStatements.Add( @" WaitingForInitialization ->BlockingOnConsoleInReadLineAsync [label = ""InitializationCompleteReceived""] BlockingOnConsoleInReadLineAsync -> ServiceFaulted [label = ""ExceptionCaught""] BlockingOnConsoleInReadLineAsync -> ShutdownStarted [label = ""CancellationTokenActivated""] " ); #endregion #region Add UsingGroups to the Titular Derived and Titular Base CompilationUnits #region Add UsingGroups common to both the Titular Derived and Titular Base CompilationUnits #endregion #region Add UsingGroups specific to the Titular Base CompilationUnit var gUsingGroup = new GUsingGroup( $"UsingGroup specific to {mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GName}"); foreach (var gName in new List <string>() { "System.Reactive.Linq", "System.Reactive.Concurrency", }) { var gUsing = new GUsing(gName); gUsingGroup.GUsings.Add(gUsing.Philote, gUsing); } mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); #endregion #endregion #region Injected PropertyGroup For ConsoleSinkAndConsoleSource #endregion #region Add the MethodGroup containing new methods provided by this library to the Titular Base CompilationUnit var gMethodGroup = new GMethodGroup( gName: $"MethodGroup specific to {mCreateAssemblyGroupResult.GClassBase.GName}"); IGMethod gMethod; gMethod = CreateConsoleReadLineAsyncAsObservableMethod(); gMethodGroup.GMethods.Add(gMethod.Philote, gMethod); mCreateAssemblyGroupResult.GClassBase.AddMethodGroup(gMethodGroup); #endregion #region Add additional classes provided by this library to the Titular Base CompilationUnit #endregion #region Add References used by the Titular Derived and Titular Base CompilationUnits to the ProjectUnit #region Add References used by both the Titular Derived and Titular Base CompilationUnits foreach (var o in new List <IGItemGroupInProjectUnit>() { ReactiveUtilitiesReferencesItemGroupInProjectUnit(), } ) { mCreateAssemblyGroupResult.GTitularAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits .Add(o.Philote, o); } #endregion #region Add References unique to the Titular Base CompilationUnit #endregion #endregion /*******************************************************************************/ #region Update the Interface Assembly for this service #region Add UsingGroups for the Titular Derived Interface and Titular Base Interface #region Add UsingGroups common to both the Titular Derived Interface and the Titular Base Interface #endregion #region Add UsingGroups specific to the Titular Base Interface #endregion #endregion #region Add References for the Titular Interface ProjectUnit #region Add References common to both the Titular Derived Interface and Titular Base Interface foreach (var o in new List <IGItemGroupInProjectUnit>() { ReactiveUtilitiesReferencesItemGroupInProjectUnit() } ) { mCreateAssemblyGroupResult.gTitularInterfaceAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits .Add(o.Philote, o); } #endregion #region Add References unique to the Titular Base Interface CompilationUnit #endregion #endregion #endregion #region Finalize the GHHS GAssemblyGroupGHHSFinalizer(mCreateAssemblyGroupResult); #endregion return(mCreateAssemblyGroupResult.GAssemblyGroup); }
public static IGAssemblyGroup MFileSystemWatcherGHS(string gAssemblyGroupName, string subDirectoryForGeneratedFiles = default, string baseNamespaceName = default, bool hasInterfaces = true, IGPatternReplacement gPatternReplacement = default) { IGPatternReplacement _gPatternReplacement = gPatternReplacement == default ? new GPatternReplacement() : gPatternReplacement; var mCreateAssemblyGroupResult = MAssemblyGroupGHHSConstructor(gAssemblyGroupName, subDirectoryForGeneratedFiles, baseNamespaceName, hasInterfaces, _gPatternReplacement); #region Initial StateMachine Configuration mCreateAssemblyGroupResult.GPrimaryConstructorBase.GStateConfiguration.GDOTGraphStatements.Add( @" WaitingForInitialization -> WaitingForARequestForAFileSystemWatcher [label = ""InitializationCompleteReceived""] WaitingForARequestForAFileSystemWatcher -> RespondingToARequestForAFileSystemWatcher [label = ""FileSystemWatcherRequested""] RespondingToARequestForAFileSystemWatcher -> WaitingForARequestForAFileSystemWatcher [label = ""FileSystemWatcherAllocatedAndSent""] RespondingToARequestForAFileSystemWatcher -> WaitingForARequestForAFileSystemWatcher [label = ""CancellationTokenActivated""] WaitingForARequestForAFileSystemWatcher -> ServiceFaulted [label = ""ExceptionCaught""] RespondingToARequestForAFileSystemWatcher ->ServiceFaulted [label = ""ExceptionCaught""] WaitingForARequestForAFileSystemWatcher ->ShutdownStarted [label = ""CancellationTokenActivated""] RespondingToARequestForAFileSystemWatcher ->ShutdownStarted [label = ""StopAsyncActivated""] " ); #endregion #region Add UsingGroups to the Titular Derived and Titular Base CompilationUnits #region Add UsingGroups common to both the Titular Derived and Titular Base CompilationUnits var gUsingGroup = new GUsingGroup( $"UsingGroup common to both {mCreateAssemblyGroupResult.GTitularDerivedCompilationUnit.GName} and {mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GName}"); foreach (var gName in new List <string>() { "System.IO" }) { var gUsing = new GUsing(gName); gUsingGroup.GUsings.Add(gUsing.Philote, gUsing); } mCreateAssemblyGroupResult.GTitularDerivedCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); #endregion #region Add UsingGroups specific to the Titular Base CompilationUnit gUsingGroup = new GUsingGroup( $"UsingGroup specific to {mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GName}"); foreach (var gName in new List <string>() { "System.IO" }) { var gUsing = new GUsing(gName); gUsingGroup.GUsings.Add(gUsing.Philote, gUsing); } mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); #endregion #endregion #region Injected PropertyGroup For ConsoleSinkAndConsoleSource #endregion #region Add the MethodGroup for this service var gMethodGroup = new GMethodGroup( gName: $"MethodGroup specific to {mCreateAssemblyGroupResult.GClassBase.GName}"); var gMethod = MCreateRequestAFileSystemWatcher(); gMethodGroup.GMethods.Add(gMethod.Philote, gMethod); mCreateAssemblyGroupResult.GClassBase.AddMethodGroup(gMethodGroup); #endregion #region Add References used by the Titular Derived and Titular Base CompilationUnits to the ProjectUnit #region Add References used by both the Titular Derived and Titular Base CompilationUnits #endregion #region Add References unique to the Titular Base CompilationUnit #endregion #endregion /*******************************************************************************/ #region Update the Interface Assembly for this service #region Add UsingGroups for the Titular Derived Interface and Titular Base Interface #region Add UsingGroups common to both the Titular Derived Interface and the Titular Base Interface gUsingGroup = new GUsingGroup($"UsingGroups common to both {mCreateAssemblyGroupResult.GTitularInterfaceDerivedCompilationUnit.GName} and {mCreateAssemblyGroupResult.GTitularInterfaceBaseCompilationUnit.GName}"); foreach (var gName in new List <string>() { "System.IO", }) { var gUsing = new GUsing(gName); gUsingGroup.GUsings.Add(gUsing.Philote, gUsing); } mCreateAssemblyGroupResult.GTitularInterfaceDerivedCompilationUnit.GUsingGroups.Add(gUsingGroup.Philote, gUsingGroup); mCreateAssemblyGroupResult.GTitularInterfaceBaseCompilationUnit.GUsingGroups.Add(gUsingGroup.Philote, gUsingGroup); #endregion #region Add UsingGroups specific to the Titular Base Interface #endregion #endregion #region Add References for the Titular Interface ProjectUnit #region Add References common to both the Titular Derived Interface and Titular Base Interface #endregion #region Add References unique to the Titular Base Interface CompilationUnit #endregion #endregion #endregion #region Finalize the GHHS GAssemblyGroupGHHSFinalizer(mCreateAssemblyGroupResult); #endregion return(mCreateAssemblyGroupResult.GAssemblyGroup); }
public static IGAssemblyGroup MConsoleMonitorGHS(string gAssemblyGroupName, string subDirectoryForGeneratedFiles = default, string baseNamespaceName = default, bool hasInterfaces = true, IGPatternReplacement gPatternReplacement = default) { IGPatternReplacement _gPatternReplacement = gPatternReplacement == default ? new GPatternReplacement() : gPatternReplacement; var mCreateAssemblyGroupResult = MAssemblyGroupGHHSConstructor(gAssemblyGroupName, subDirectoryForGeneratedFiles, baseNamespaceName, hasInterfaces, _gPatternReplacement); #region Initial StateMachine Configuration mCreateAssemblyGroupResult.GPrimaryConstructorBase.GStateConfiguration.GDOTGraphStatements.Add( @" WaitingForInitialization ->BlockingOnConsoleInReadLineAsync [label = ""InitializationCompleteReceived""] WaitingForRequestToWriteSomething -> WaitingForWriteToComplete [label = ""WriteStarted""] WaitingForWriteToComplete -> WaitingForRequestToWriteSomething [label = ""WriteFinished""] WaitingForWriteToComplete -> WaitingForRequestToWriteSomething [label = ""CancellationTokenActivated""] WaitingForRequestToWriteSomething -> ServiceFaulted [label = ""ExceptionCaught""] WaitingForWriteToComplete ->ServiceFaulted [label = ""ExceptionCaught""] WaitingForRequestToWriteSomething ->ShutdownStarted [label = ""CancellationTokenActivated""] WaitingForRequestToWriteSomething ->ShutdownStarted [label = ""StopAsyncActivated""] WaitingForWriteToComplete ->ShutdownStarted [label = ""StopAsyncActivated""] " ); #endregion #region Add UsingGroups to the Titular Derived and Titular Base CompilationUnits #region Add UsingGroups common to both the Titular Derived and Titular Base CompilationUnits var gUsingGroup = new GUsingGroup( $"UsingGroup common to both {mCreateAssemblyGroupResult.GTitularDerivedCompilationUnit.GName} and {mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GName}"); foreach (var gName in new List <string>() { "ATAP.Utilities.GenericHostServices.ConsoleSourceGHS", "ATAP.Utilities.GenericHostServices.ConsoleSinkGHS", }) { var gUsing = new GUsing(gName); gUsingGroup.GUsings.Add(gUsing.Philote, gUsing); } mCreateAssemblyGroupResult.GTitularDerivedCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); #endregion #region Add UsingGroups specific to the Titular Base CompilationUnit gUsingGroup = new GUsingGroup( $"UsingGroup specific to {mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GName}"); foreach (var gName in new List <string>() { "System.Reactive.Linq", "System.Reactive.Concurrency", $"{baseNamespaceName}ConsoleSinkGHS", $"{baseNamespaceName}ConsoleSourceGHS" }) { var gUsing = new GUsing(gName); gUsingGroup.GUsings.Add(gUsing.Philote, gUsing); } mCreateAssemblyGroupResult.GTitularBaseCompilationUnit.GUsingGroups .Add(gUsingGroup.Philote, gUsingGroup); #endregion #endregion #region Injected PropertyGroup For ConsoleSinkAndConsoleSource var gPropertyGroup = new GPropertyGroup("Injected Property for ConsoleSinkGHS and ConsoleSourceGHS"); mCreateAssemblyGroupResult.GClassBase.AddPropertyGroups(gPropertyGroup); foreach (var o in new List <string>() { "ConsoleSourceGHS", "ConsoleSinkGHS" }) { mCreateAssemblyGroupResult.GClassBase.AddTConstructorAutoPropertyGroup( mCreateAssemblyGroupResult.GPrimaryConstructorBase.Philote, o, gPropertyGroupId: gPropertyGroup.Philote); } #endregion #region Add the MethodGroup for this service var gMethodGroup = new GMethodGroup( gName: $"MethodGroup specific to {mCreateAssemblyGroupResult.GClassBase.GName}"); IGMethod gMethod; gMethod = CreateConsoleSourceReadLineAsyncAsObservableMethod(); gMethodGroup.GMethods.Add(gMethod.Philote, gMethod); gMethod = MCreateWriteMethodInConsoleMonitor(); gMethodGroup.GMethods.Add(gMethod.Philote, gMethod); //gMethod = MCreateWriteAsyncMethodInConsoleMonitor(); //gMethodGroup.GMethods.Add(gMethod.Philote, gMethod); mCreateAssemblyGroupResult.GClassBase.AddMethodGroup(gMethodGroup); #endregion #region Add References used by the Titular Derived and Titular Base CompilationUnits to the ProjectUnit #region Add References used by both the Titular Derived and Titular Base CompilationUnits foreach (var o in new List <IGItemGroupInProjectUnit>() { ReactiveUtilitiesReferencesItemGroupInProjectUnit(), new GItemGroupInProjectUnit( "References used by both the {Derived} and {Base}", "References to the ConsoleSourceGHS and ConsoleSinkGHS Interfaces, used by both the used by both the {Derived CompilationUnit} and {Base CompilationUnit}", new GBody(new List <string>() { "<PackageReference Include=\"ConsoleSourceGHS.Interfaces\" />", "<PackageReference Include=\"ConsoleSinkGHS.Interfaces\" />", })) } ) { mCreateAssemblyGroupResult.GTitularAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits .Add(o.Philote, o); } #endregion #region Add References unique to the Titular Base CompilationUnit foreach (var o in new List <IGItemGroupInProjectUnit>() { } ) { mCreateAssemblyGroupResult.GTitularAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits .Add(o.Philote, o); } #endregion #endregion /*******************************************************************************/ #region Update the Interface Assembly for this service #region Add UsingGroups for the Titular Derived Interface CompilationUnit and Titular Base Interface CompilationUnit #region Add UsingGroups common to both the Titular Derived Interface CompilationUnit and the Titular Base Interface CompilationUnit gUsingGroup = new GUsingGroup( $"UsingGroups common to both {mCreateAssemblyGroupResult.GTitularInterfaceDerivedCompilationUnit.GName} and {mCreateAssemblyGroupResult.GTitularInterfaceBaseCompilationUnit.GName}"); foreach (var gName in new List <string>() { $"{baseNamespaceName}ConsoleSinkGHS", $"{baseNamespaceName}ConsoleSourceGHS" }) { var gUsing = new GUsing(gName); gUsingGroup.GUsings.Add(gUsing.Philote, gUsing); } mCreateAssemblyGroupResult.GTitularInterfaceDerivedCompilationUnit.GUsingGroups.Add(gUsingGroup.Philote, gUsingGroup); mCreateAssemblyGroupResult.GTitularInterfaceBaseCompilationUnit.GUsingGroups.Add(gUsingGroup.Philote, gUsingGroup); #endregion #region Add UsingGroups specific to the Titular Base Interface #endregion #endregion #region Add References for the Titular Interface ProjectUnit #region Add References common to both the Titular Derived Interface and Titular Base Interface foreach (var o in new List <IGItemGroupInProjectUnit>() { ReactiveUtilitiesReferencesItemGroupInProjectUnit(), new GItemGroupInProjectUnit( "References used by both the {Derived} and {Base}", "References to the ConsoleSourceGHS and ConsoleSinkGHS Interfaces, used by both the used by both the {Derived CompilationUnit} and {Base CompilationUnit}", new GBody(new List <string>() { "<PackageReference Include=\"ConsoleSourceGHS.Interfaces\" />", "<PackageReference Include=\"ConsoleSinkGHS.Interfaces\" />", })), } ) { mCreateAssemblyGroupResult.gTitularInterfaceAssemblyUnit.GProjectUnit.GItemGroupInProjectUnits .Add(o.Philote, o); } #endregion #region Add References unique to the Titular Base Interface CompilationUnit #endregion #endregion #endregion #region Finalize the GHHS GAssemblyGroupGHHSFinalizer(mCreateAssemblyGroupResult); #endregion return(mCreateAssemblyGroupResult.GAssemblyGroup); }