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);
        }
Exemple #4
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
        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);
        }