From fbf96f29acff7e6649941881358cb6ca6563ffce Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Wed, 13 Apr 2022 14:51:59 +0100 Subject: [PATCH 01/34] Add .net platform C# solution generation Signed-off-by: Hamza JGUERIM --- .../vlingo/xoom/designer/codegen/Label.java | 4 +- .../csharp/CsharpTemplateStandard.java | 63 +++++++++++++++++++ .../designer/codegen/csharp/Template.java | 21 +++++++ .../ApplicationSettingsGenerationStep.java | 50 +++++++++++++++ .../codegen/java/TemplateParameter.java | 4 +- .../codegen/c_sharp/ActorSettings.ftl | 37 +++++++++++ .../resources/codegen/c_sharp/Program.ftl | 0 .../resources/codegen/c_sharp/Project.ftl | 13 ++++ .../resources/codegen/c_sharp/Solution.ftl | 22 +++++++ ...ApplicationSettingsGenerationStepTest.java | 47 ++++++++++++++ .../text-expectations/c_sharp/project.text | 13 ++++ .../text-expectations/c_sharp/solution.text | 22 +++++++ .../c_sharp/xoom-actors.text | 37 +++++++++++ 13 files changed, 331 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java create mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/csharp/Template.java create mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java create mode 100644 src/main/resources/codegen/c_sharp/ActorSettings.ftl create mode 100644 src/main/resources/codegen/c_sharp/Program.ftl create mode 100644 src/main/resources/codegen/c_sharp/Project.ftl create mode 100644 src/main/resources/codegen/c_sharp/Solution.ftl create mode 100644 src/test/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStepTest.java create mode 100644 src/test/resources/text-expectations/c_sharp/project.text create mode 100644 src/test/resources/text-expectations/c_sharp/solution.text create mode 100644 src/test/resources/text-expectations/c_sharp/xoom-actors.text diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/Label.java b/src/main/java/io/vlingo/xoom/designer/codegen/Label.java index b1e4ca3b..f0b9af86 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/Label.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/Label.java @@ -83,7 +83,9 @@ public enum Label implements ParameterLabel { VALUE_OBJECT("valueObject"), AGGREGATE_STATE("aggregateState"), VALUE_OBJECT_FIELD("valueObjectField"), - UI_TYPE("uiType"); + UI_TYPE("uiType"), + SDK_VERSION("sdkVersion"), + VLINGO_VERSION("vlingoVersion"); @SuppressWarnings("unused") private final String key; diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java new file mode 100644 index 00000000..1dd57ccd --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java @@ -0,0 +1,63 @@ +package io.vlingo.xoom.designer.codegen.csharp; + +import io.vlingo.xoom.codegen.template.TemplateParameters; +import io.vlingo.xoom.codegen.template.TemplateStandard; + +import java.util.function.BiFunction; +import java.util.function.Function; + +import static io.vlingo.xoom.designer.codegen.java.TemplateParameter.APPLICATION_NAME; + +public enum CsharpTemplateStandard implements TemplateStandard { + + SOLUTION_SETTINGS(parameters -> Template.SOLUTION_SETTINGS.filename, + (name, parameters) -> parameters.find(APPLICATION_NAME) + ".sln"), + + PROJECT_SETTINGS(parameters -> Template.PROJECT_SETTINGS.filename, + (name, parameters) -> parameters.find(APPLICATION_NAME) + ".csproj"), + + ACTOR_SETTINGS(parameters -> Template.ACTOR_SETTINGS.filename, + (name, parameters) -> "vlingo-actors.json"); + + private final Function templateFileRetriever; + private final BiFunction nameResolver; + + CsharpTemplateStandard(final Function templateFileRetriever) { + this(templateFileRetriever, (name, parameters) -> name); + } + + CsharpTemplateStandard(final Function templateFileRetriever, + final BiFunction nameResolver) { + this.templateFileRetriever = templateFileRetriever; + this.nameResolver = nameResolver; + } + + public String retrieveTemplateFilename(final TemplateParameters parameters) { + return templateFileRetriever.apply(parameters); + } + + public String resolveClassname() { + return resolveClassname(""); + } + + public String resolveClassname(final String name) { + return resolveClassname(name, null); + } + + public String resolveClassname(final TemplateParameters parameters) { + return resolveClassname(null, parameters); + } + + public String resolveClassname(final String name, final TemplateParameters parameters) { + return this.nameResolver.apply(name, parameters); + } + + public String resolveFilename(final TemplateParameters parameters) { + return resolveFilename(null, parameters); + } + + public String resolveFilename(final String name, final TemplateParameters parameters) { + return this.nameResolver.apply(name, parameters); + } + +} diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/Template.java b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/Template.java new file mode 100644 index 00000000..f7ba2a02 --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/Template.java @@ -0,0 +1,21 @@ +// Copyright © 2012-2021 VLINGO LABS. All rights reserved. +// +// This Source Code Form is subject to the terms of the +// Mozilla Public License, v. 2.0. If a copy of the MPL +// was not distributed with this file, You can obtain +// one at https://mozilla.org/MPL/2.0/. + +package io.vlingo.xoom.designer.codegen.csharp; + +public enum Template { + SOLUTION_SETTINGS("Solution"), + PROJECT_SETTINGS("Project"), + ACTOR_SETTINGS("ActorSettings"); + + public final String filename; + + Template(final String filename) { + this.filename = filename; + } + +} diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java new file mode 100644 index 00000000..177ce951 --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java @@ -0,0 +1,50 @@ +// Copyright © 2012-2021 VLINGO LABS. All rights reserved. +// +// This Source Code Form is subject to the terms of the +// Mozilla Public License, v. 2.0. If a copy of the MPL +// was not distributed with this file, You can obtain +// one at https://mozilla.org/MPL/2.0/. +package io.vlingo.xoom.designer.codegen.csharp.applicationsettings; + +import io.vlingo.xoom.codegen.CodeGenerationContext; +import io.vlingo.xoom.codegen.dialect.Dialect; +import io.vlingo.xoom.codegen.template.BasicTemplateData; +import io.vlingo.xoom.codegen.template.TemplateData; +import io.vlingo.xoom.codegen.template.TemplateParameters; +import io.vlingo.xoom.codegen.template.TemplateProcessingStep; +import io.vlingo.xoom.designer.codegen.Label; +import io.vlingo.xoom.designer.codegen.csharp.CsharpTemplateStandard; +import io.vlingo.xoom.designer.codegen.java.TemplateParameter; + +import java.util.Arrays; +import java.util.List; + +public class ApplicationSettingsGenerationStep extends TemplateProcessingStep { + + @Override + protected List buildTemplatesData(final CodeGenerationContext context) { + final String appName = context.parameters().retrieveValue(Label.APPLICATION_NAME); + final String sdkVersion = context.parameters().retrieveValue(Label.SDK_VERSION); + final String vlingoVersion = context.parameters().retrieveValue(Label.VLINGO_VERSION); + + final TemplateData solutionSettings = + BasicTemplateData.of(CsharpTemplateStandard.SOLUTION_SETTINGS, + TemplateParameters.with(TemplateParameter.APPLICATION_NAME, appName)); + + final TemplateData projectSettings = + BasicTemplateData.of(CsharpTemplateStandard.PROJECT_SETTINGS, + TemplateParameters.with(TemplateParameter.APPLICATION_NAME, appName) + .and(TemplateParameter.SDK_Version, sdkVersion) + .and(TemplateParameter.VLINGO_VERSION, vlingoVersion)); + + final TemplateData actorSettings = + BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS); + + return Arrays.asList(solutionSettings, projectSettings, actorSettings); + } + + @Override + protected Dialect resolveDialect(CodeGenerationContext context) { + return Dialect.withName(context.parameters().retrieveValue(Label.DIALECT)); + } +} diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java index 8991d3aa..074888e5 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java @@ -169,7 +169,9 @@ public enum TemplateParameter implements ParameterKey { DEPLOYMENT_SETTINGS("deploymentSettings"), KUBERNETES_POD_NAME("kubernetesPodName"), KUBERNETES_IMAGE("kubernetesImage"), - DOCKERFILE("dockerfile"); + DOCKERFILE("dockerfile"), + SDK_Version("sdkVersion"), + VLINGO_VERSION("vlingoVersion"); public final String key; diff --git a/src/main/resources/codegen/c_sharp/ActorSettings.ftl b/src/main/resources/codegen/c_sharp/ActorSettings.ftl new file mode 100644 index 00000000..935a9480 --- /dev/null +++ b/src/main/resources/codegen/c_sharp/ActorSettings.ftl @@ -0,0 +1,37 @@ +{ + "plugin": { + "name": { + "queueMailbox": true, + "consoleLogger": true + }, + "queueMailbox": { + "classname": "Vlingo.Xoom.Actors.Plugin.Mailbox.ConcurrentQueue.ConcurrentQueueMailboxPlugin", + "defaultMailbox": true, + "numberOfDispatchersFactor": 1, + "dispatcherThrottlingCount": 10 + }, + "consoleLogger": { + "classname": "Vlingo.Xoom.Actors.Plugin.Logging.Console.ConsoleLoggerPlugin", + "name": "vlingo-net/streams", + "defaultLogger": true + }, + "jdkLogger": { + "handler": { + "name": "vlingo", + "level": "ALL" + } + } + }, + "proxy": { + "generated": { + "classes": { + "main": "target/classes/", + "test": "target/test-classes/" + }, + "sources": { + "main": "target/generated-sources/", + "test": "target/generated-test-sources/" + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/codegen/c_sharp/Program.ftl b/src/main/resources/codegen/c_sharp/Program.ftl new file mode 100644 index 00000000..e69de29b diff --git a/src/main/resources/codegen/c_sharp/Project.ftl b/src/main/resources/codegen/c_sharp/Project.ftl new file mode 100644 index 00000000..24ee1a3e --- /dev/null +++ b/src/main/resources/codegen/c_sharp/Project.ftl @@ -0,0 +1,13 @@ + + + + Exe + ${sdkVersion} + enable + enable + + + + + + diff --git a/src/main/resources/codegen/c_sharp/Solution.ftl b/src/main/resources/codegen/c_sharp/Solution.ftl new file mode 100644 index 00000000..615cfcd1 --- /dev/null +++ b/src/main/resources/codegen/c_sharp/Solution.ftl @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "${appName}", "${appName}\${appName}.csproj", "{432CF1A8-D025-4F2F-91A9-5716BD1A2587}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.Build.0 = Debug|Any CPU + {432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Release|Any CPU.ActiveCfg = Release|Any CPU + {432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStepTest.java new file mode 100644 index 00000000..9005075e --- /dev/null +++ b/src/test/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStepTest.java @@ -0,0 +1,47 @@ +package io.vlingo.xoom.designer.codegen.csharp.applicationsettings; + +import io.vlingo.xoom.codegen.CodeGenerationContext; +import io.vlingo.xoom.codegen.TextExpectation; +import io.vlingo.xoom.codegen.content.Content; +import io.vlingo.xoom.codegen.dialect.Dialect; +import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter; +import io.vlingo.xoom.codegen.parameter.CodeGenerationParameters; +import io.vlingo.xoom.designer.codegen.Label; +import io.vlingo.xoom.designer.codegen.csharp.CsharpTemplateStandard; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ApplicationSettingsGenerationStepTest { + + @Test + public void testThatSolutionIsGenerated() { + + final String namespace = "Io.Vlingo.Xoomapp"; + final String appName = "Xoomapp"; + final String sdkVersion = "net6.0"; + final String vlingoVersion = "1.9.3"; + + final CodeGenerationParameters parameters = CodeGenerationParameters.from(CodeGenerationParameter.of(Label.PACKAGE, namespace), + CodeGenerationParameter.of(Label.APPLICATION_NAME, appName), + CodeGenerationParameter.of(Label.SDK_VERSION, sdkVersion), + CodeGenerationParameter.of(Label.VLINGO_VERSION, vlingoVersion), + CodeGenerationParameter.of(Label.DIALECT, Dialect.C_SHARP)); + + final CodeGenerationContext context = CodeGenerationContext.with(parameters); + + new ApplicationSettingsGenerationStep().process(context); + + final Content solutionSettings = + context.findContent(CsharpTemplateStandard.SOLUTION_SETTINGS, "Xoomapp"); + + final Content projectSettings = + context.findContent(CsharpTemplateStandard.PROJECT_SETTINGS, "Xoomapp"); + + final Content actorSettings = + context.findContent(CsharpTemplateStandard.ACTOR_SETTINGS, "vlingo-actors"); + + Assertions.assertTrue(solutionSettings.contains(TextExpectation.onCSharp().read("solution"))); + Assertions.assertTrue(projectSettings.contains(TextExpectation.onCSharp().read("project"))); + Assertions.assertTrue(actorSettings.contains(TextExpectation.onCSharp().read("xoom-actors"))); + } +} diff --git a/src/test/resources/text-expectations/c_sharp/project.text b/src/test/resources/text-expectations/c_sharp/project.text new file mode 100644 index 00000000..535b9253 --- /dev/null +++ b/src/test/resources/text-expectations/c_sharp/project.text @@ -0,0 +1,13 @@ + + + + Exe + net6.0 + enable + enable + + + + + + diff --git a/src/test/resources/text-expectations/c_sharp/solution.text b/src/test/resources/text-expectations/c_sharp/solution.text new file mode 100644 index 00000000..2462bf65 --- /dev/null +++ b/src/test/resources/text-expectations/c_sharp/solution.text @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xoomapp", "Xoomapp\Xoomapp.csproj", "{432CF1A8-D025-4F2F-91A9-5716BD1A2587}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.Build.0 = Debug|Any CPU + {432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Release|Any CPU.ActiveCfg = Release|Any CPU + {432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/src/test/resources/text-expectations/c_sharp/xoom-actors.text b/src/test/resources/text-expectations/c_sharp/xoom-actors.text new file mode 100644 index 00000000..935a9480 --- /dev/null +++ b/src/test/resources/text-expectations/c_sharp/xoom-actors.text @@ -0,0 +1,37 @@ +{ + "plugin": { + "name": { + "queueMailbox": true, + "consoleLogger": true + }, + "queueMailbox": { + "classname": "Vlingo.Xoom.Actors.Plugin.Mailbox.ConcurrentQueue.ConcurrentQueueMailboxPlugin", + "defaultMailbox": true, + "numberOfDispatchersFactor": 1, + "dispatcherThrottlingCount": 10 + }, + "consoleLogger": { + "classname": "Vlingo.Xoom.Actors.Plugin.Logging.Console.ConsoleLoggerPlugin", + "name": "vlingo-net/streams", + "defaultLogger": true + }, + "jdkLogger": { + "handler": { + "name": "vlingo", + "level": "ALL" + } + } + }, + "proxy": { + "generated": { + "classes": { + "main": "target/classes/", + "test": "target/test-classes/" + }, + "sources": { + "main": "target/generated-sources/", + "test": "target/generated-test-sources/" + } + } + } +} \ No newline at end of file From 61b8a3a11067bf939750024074ebb35d17845d7b Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Wed, 13 Apr 2022 18:23:56 +0100 Subject: [PATCH 02/34] Add platform settings based generation Signed-off-by: Hamza JGUERIM --- .../vlingo/xoom/designer/Configuration.java | 99 ++++++++++--------- .../ApplicationSettingsGenerationStep.java | 4 +- .../restapi/ModelProcessingResource.java | 8 +- .../restapi/data/DesignerModel.java | 4 +- .../restapi/data/PlatformSettingsData.java | 13 +++ ...GenerationParameterValidationStepTest.java | 28 +++++- .../data/CodeGenerationContextMapperTest.java | 51 +++++++++- .../restapi/data/DesignerModelTest.java | 8 +- .../ProjectionGenerationReportTest.java | 8 +- 9 files changed, 162 insertions(+), 61 deletions(-) create mode 100644 src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java diff --git a/src/main/java/io/vlingo/xoom/designer/Configuration.java b/src/main/java/io/vlingo/xoom/designer/Configuration.java index 50434b94..58134c35 100644 --- a/src/main/java/io/vlingo/xoom/designer/Configuration.java +++ b/src/main/java/io/vlingo/xoom/designer/Configuration.java @@ -1,10 +1,7 @@ package io.vlingo.xoom.designer; import io.vlingo.xoom.codegen.CodeGenerationStep; -import io.vlingo.xoom.codegen.content.CodeElementFormatter; import io.vlingo.xoom.codegen.content.ContentCreationStep; -import io.vlingo.xoom.codegen.dialect.Dialect; -import io.vlingo.xoom.codegen.dialect.ReservedWordsHandler; import io.vlingo.xoom.common.Tuple2; import io.vlingo.xoom.designer.codegen.CodeGenerationParameterValidationStep; import io.vlingo.xoom.designer.codegen.StagingFolderCleanUpStep; @@ -65,53 +62,63 @@ public class Configuration { private static final Duration DEFAULT_REQUEST_COUNT_EXPIRATION = Duration.ofSeconds(1); public static void load() { - final CodeElementFormatter codeElementFormatter = - CodeElementFormatter.with(Dialect.findDefault(), - ReservedWordsHandler.usingSuffix("_")); - - ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter); - ComponentRegistry.register("codeGenerationSteps",codeGenerationSteps()); + ComponentRegistry.register("codeGenerationSteps", codeGenerationSteps()); + ComponentRegistry.register("cSharpCodeGenerationSteps", cSharpCodeGenerationSteps()); } private static List codeGenerationSteps() { return Arrays.asList( - //Preliminary - new CodeGenerationParameterValidationStep(), - new MainClassResolverStep(), - new StagingFolderCleanUpStep(Phase.PRE_GENERATION), - new TemporaryTaskFolderCreationStep(), - //Java - new ReadmeFileGenerationStep(), - new ApplicationSettingsGenerationStep(), - new ValueObjectGenerationStep(), - new ModelGenerationStep(), - new DataObjectGenerationStep(), - new ProjectionGenerationStep(), - new StorageGenerationStep(), - new RestResourceGenerationStep(), - new AutoDispatchMappingGenerationStep(), - new ExchangeGenerationStep(), - new SchemataGenerationStep(), - new BootstrapGenerationStep(), - new EntityUnitTestGenerationStep(), - new QueriesUnitTestGenerationStep(), - new ProjectionUnitTestGenerationStep(), - new RestResourceAbstractUnitTestGenerationStep(), - new RestResourceUnitTestGenerationStep(), - new ClusterSettingsGenerationStep(), - new DesignerModelGenerationStep(), - new DockerfileGenerationStep(), - new KubernetesManifestFileGenerationStep(), - //React - new StaticFilesGenerationStep(), - new LayoutGenerationStep(), - new AggregateManagementGenerationStep(), - //Concluding - new ContentCreationStep(), - new MavenWrapperInstallationStep(), - new SchemaPushStep(withType(CommandExecutionProcess.class)), - new SchemaPullStep(withType(CommandExecutionProcess.class)), - new StagingFolderCleanUpStep(Phase.POST_GENERATION) + //Preliminary + new CodeGenerationParameterValidationStep(), + new MainClassResolverStep(), + new StagingFolderCleanUpStep(Phase.PRE_GENERATION), + new TemporaryTaskFolderCreationStep(), + //Java + new ReadmeFileGenerationStep(), + new ApplicationSettingsGenerationStep(), + new ValueObjectGenerationStep(), + new ModelGenerationStep(), + new DataObjectGenerationStep(), + new ProjectionGenerationStep(), + new StorageGenerationStep(), + new RestResourceGenerationStep(), + new AutoDispatchMappingGenerationStep(), + new ExchangeGenerationStep(), + new SchemataGenerationStep(), + new BootstrapGenerationStep(), + new EntityUnitTestGenerationStep(), + new QueriesUnitTestGenerationStep(), + new ProjectionUnitTestGenerationStep(), + new RestResourceAbstractUnitTestGenerationStep(), + new RestResourceUnitTestGenerationStep(), + new ClusterSettingsGenerationStep(), + new DesignerModelGenerationStep(), + new DockerfileGenerationStep(), + new KubernetesManifestFileGenerationStep(), + //React + new StaticFilesGenerationStep(), + new LayoutGenerationStep(), + new AggregateManagementGenerationStep(), + //Concluding + new ContentCreationStep(), + new MavenWrapperInstallationStep(), + new SchemaPushStep(withType(CommandExecutionProcess.class)), + new SchemaPullStep(withType(CommandExecutionProcess.class)), + new StagingFolderCleanUpStep(Phase.POST_GENERATION) + ); + } + + private static List cSharpCodeGenerationSteps() { + return Arrays.asList( + //Preliminary + new CodeGenerationParameterValidationStep(), + new StagingFolderCleanUpStep(Phase.PRE_GENERATION), + new TemporaryTaskFolderCreationStep(), + //C# + new io.vlingo.xoom.designer.codegen.csharp.applicationsettings.ApplicationSettingsGenerationStep(), + //Concluding + new ContentCreationStep(), + new StagingFolderCleanUpStep(Phase.POST_GENERATION) ); } diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java index 177ce951..79083a95 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java @@ -34,11 +34,13 @@ protected List buildTemplatesData(final CodeGenerationContext cont final TemplateData projectSettings = BasicTemplateData.of(CsharpTemplateStandard.PROJECT_SETTINGS, TemplateParameters.with(TemplateParameter.APPLICATION_NAME, appName) + .and(TemplateParameter.PACKAGE_NAME, appName) .and(TemplateParameter.SDK_Version, sdkVersion) .and(TemplateParameter.VLINGO_VERSION, vlingoVersion)); final TemplateData actorSettings = - BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS); + BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS, + TemplateParameters.with(TemplateParameter.PACKAGE_NAME, appName)); return Arrays.asList(solutionSettings, projectSettings, actorSettings); } diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java index b2acdbea..f726a6d3 100644 --- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java +++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java @@ -36,7 +36,7 @@ public class ModelProcessingResource extends DynamicResourceHandler { private final Logger logger; private final GenerationTarget generationTarget; - private final ModelProcessingManager modelProcessingManager; + private ModelProcessingManager modelProcessingManager; private final ModelProcessingInformation modelProcessingInformation; public static final String REFUSE_REQUEST_URI = "/api/model-processing/request-refusal"; @@ -45,10 +45,14 @@ public ModelProcessingResource(final Stage stage) { this.logger = stage().world().defaultLogger(); this.generationTarget = ComponentRegistry.withType(GenerationTarget.class); this.modelProcessingInformation = ModelProcessingInformation.from(generationTarget); - this.modelProcessingManager = new ModelProcessingManager(ComponentRegistry.withName("codeGenerationSteps")); } public Completes startGeneration(final DesignerModel model) { + if(model.platformSettings.lang.equalsIgnoreCase("java")) + this.modelProcessingManager = new ModelProcessingManager(ComponentRegistry.withName("codeGenerationSteps")); + else + this.modelProcessingManager = new ModelProcessingManager(ComponentRegistry.withName("cSharpCodeGenerationSteps")); + return modelProcessingManager.generate(model, modelProcessingInformation, logger).andThenTo(scene -> { final Response.Status responseStatus = scene.isFailed() ? InternalServerError : Ok; return Completes.withSuccess(Response.of(responseStatus, serialized(scene.report))); diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModel.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModel.java index 493cd35d..14d2b97b 100644 --- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModel.java +++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModel.java @@ -14,6 +14,7 @@ public class DesignerModel { + public final PlatformSettingsData platformSettings; public final ContextSettingsData context; public final ModelSettingsData model; public final DeploymentSettingsData deployment; @@ -25,7 +26,7 @@ public class DesignerModel { public final String generateUIWith; public final Boolean generateUI; - public DesignerModel(final ContextSettingsData context, + public DesignerModel(PlatformSettingsData platformSettings, final ContextSettingsData context, final ModelSettingsData model, final DeploymentSettingsData deployment, final SchemataSettingsData schemata, @@ -34,6 +35,7 @@ public DesignerModel(final ContextSettingsData context, final Boolean useAutoDispatch, final Boolean generateUI, final String generateUIWith) { + this.platformSettings = platformSettings; this.context = context; this.model = model; this.schemata = schemata; diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java new file mode 100644 index 00000000..08eded55 --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java @@ -0,0 +1,13 @@ +package io.vlingo.xoom.designer.infrastructure.restapi.data; + +public class PlatformSettingsData { +public final String platform; +public final String lang; +public final String sdkVersion; + + public PlatformSettingsData(String platform, String lang, String sdkVersion) { + this.platform = platform; + this.lang = lang; + this.sdkVersion = sdkVersion; + } +} diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java index f9fb3673..bab35278 100644 --- a/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java +++ b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java @@ -17,15 +17,16 @@ public class CodeGenerationParameterValidationStepTest { - @Test - public void testThatParametersAreValidated() { + @Test() + public void testThatJavaParametersAreValidated() { + final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "8"); final CodeElementFormatter codeElementFormatter = - CodeElementFormatter.with(Dialect.findDefault(), ReservedWordsHandler.usingSuffix("_")); + CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_")); ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter); final DesignerModel data = - new DesignerModel(contextSettingsData(), modelSettingsData(), + new DesignerModel(platform, contextSettingsData(), modelSettingsData(), deploymentSettingsData(), schemataSettingsData(), "/home/projects", true, false, false, ""); @@ -35,6 +36,25 @@ public void testThatParametersAreValidated() { assertDoesNotThrow(() -> new CodeGenerationParameterValidationStep().process(context)); } + @Test() + public void testThatCsharpParametersAreValidated() { + final PlatformSettingsData platform = new PlatformSettingsData(".NET", "C_SHARP", "net6.0"); + final CodeElementFormatter codeElementFormatter = + CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_")); + + ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter); + + final DesignerModel data = + new DesignerModel(platform, contextSettingsData(), modelSettingsData(), + deploymentSettingsData(), schemataSettingsData(), + "/home/projects", true, false, false, ""); + + final CodeGenerationContext context = + CodeGenerationContextMapper.map(data, GenerationTarget.FILESYSTEM, Logger.noOpLogger()); + + assertDoesNotThrow(() -> new CodeGenerationParameterValidationStep().process(context)); + } + private ContextSettingsData contextSettingsData() { return new ContextSettingsData("io.vlingo", "xoomapp", "1.0.0", "io.vlingo.xoomapp"); diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java index c8592919..bb6f26f3 100644 --- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java +++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java @@ -29,14 +29,15 @@ public class CodeGenerationContextMapperTest { @Test - public void testThatTaskExecutionContextIsMapped() { + public void testThatJavaTaskExecutionContextIsMapped() { + final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "8"); final CodeElementFormatter codeElementFormatter = - CodeElementFormatter.with(Dialect.findDefault(), ReservedWordsHandler.usingSuffix("_")); + CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_")); ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter); final DesignerModel data = - new DesignerModel(contextSettingsData(), modelSettingsData(), + new DesignerModel(platform, contextSettingsData(), modelSettingsData(), deploymentSettingsData(), schemataSettingsData(), "/home/projects", true, false, false, ""); final CodeGenerationParameters codeGenerationParameters = @@ -48,6 +49,25 @@ public void testThatTaskExecutionContextIsMapped() { assertExchangeParameters(codeGenerationParameters); } + @Test + public void testThatCsharpTaskExecutionContextIsMapped() { + final PlatformSettingsData platform = new PlatformSettingsData(".NET", "C_SHARP", "net6.0"); + final CodeElementFormatter codeElementFormatter = + CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_")); + + ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter); + + // For now c# model support only platform and context settings + final DesignerModel data = + new DesignerModel(platform, contextSettingsData(), modelSettingsData(), + deploymentSettingsData(), schemataSettingsData(), "/home/projects", true, false, false, ""); + + final CodeGenerationParameters codeGenerationParameters = + CodeGenerationContextMapper.map(data, GenerationTarget.FILESYSTEM, Logger.noOpLogger()).parameters(); + + assertCsharpStructuralOptions(codeGenerationParameters); + } + private void assertStructuralOptions(final CodeGenerationParameters codeGenerationParameters) { final DeploymentSettings deploymentSettings = codeGenerationParameters.retrieveObject(DEPLOYMENT_SETTINGS); Assertions.assertEquals("io.vlingo", codeGenerationParameters.retrieveValue(GROUP_ID)); @@ -60,6 +80,11 @@ private void assertStructuralOptions(final CodeGenerationParameters codeGenerati Assertions.assertEquals("", deploymentSettings.kubernetesPod); Assertions.assertNotNull(codeGenerationParameters.retrieveValue(DESIGNER_MODEL_JSON)); Assertions.assertTrue(codeGenerationParameters.retrieveValue(DESIGNER_MODEL_JSON).startsWith("{\n" + + " \"platformSettings\": {\n" + + " \"platform\": \"JVM\",\n" + + " \"lang\": \"Java\",\n" + + " \"sdkVersion\": \"8\"\n" + + " },\n" + " \"context\": {\n" + " \"groupId\": \"io.vlingo\",\n" + " \"artifactId\": \"xoomapp\",\n" + @@ -68,6 +93,26 @@ private void assertStructuralOptions(final CodeGenerationParameters codeGenerati " },\n")); } + private void assertCsharpStructuralOptions(final CodeGenerationParameters codeGenerationParameters) { + Assertions.assertEquals("io.vlingo", codeGenerationParameters.retrieveValue(GROUP_ID)); + Assertions.assertEquals("xoomapp", codeGenerationParameters.retrieveValue(ARTIFACT_ID)); + Assertions.assertEquals("1.0", codeGenerationParameters.retrieveValue(ARTIFACT_VERSION)); + Assertions.assertEquals("{{XOOM_VERSION}}", codeGenerationParameters.retrieveValue(XOOM_VERSION)); + Assertions.assertNotNull(codeGenerationParameters.retrieveValue(DESIGNER_MODEL_JSON)); + Assertions.assertTrue(codeGenerationParameters.retrieveValue(DESIGNER_MODEL_JSON).startsWith("{\n" + + " \"platformSettings\": {\n" + + " \"platform\": \".NET\",\n" + + " \"lang\": \"C_SHARP\",\n" + + " \"sdkVersion\": \"net6.0\"\n" + + " },\n" + + " \"context\": {\n" + + " \"groupId\": \"io.vlingo\",\n" + + " \"artifactId\": \"xoomapp\",\n" + + " \"artifactVersion\": \"1.0\",\n" + + " \"packageName\": \"io.vlingo.xoomapp\"\n" + + " },\n")); + } + private void assertPersistenceParameters(final CodeGenerationParameters codeGenerationParameters) { Assertions.assertEquals("true", codeGenerationParameters.retrieveValue(CQRS)); Assertions.assertEquals("IN_MEMORY", codeGenerationParameters.retrieveValue(DATABASE)); diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java index 321517c1..55c02360 100644 --- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java +++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java @@ -18,7 +18,7 @@ public class DesignerModelTest { @Test public void testThatGenerationSettingsDataIsValidated() { final DesignerModel data = - new DesignerModel(contextSettingsData(), modelSettingsData(), + new DesignerModel(platformSettingsData(), contextSettingsData(), modelSettingsData(), deploymentSettingsData(), schemataSettingsData(), "/home/projects", true, false, false, ""); @@ -28,7 +28,7 @@ public void testThatGenerationSettingsDataIsValidated() { @Test public void testThatGenerationSettingsDataValidationFailsDueToRecursiveValueObject() { final DesignerModel data = - new DesignerModel(contextSettingsData(), invalidModelSettingsData(), + new DesignerModel(platformSettingsData(), contextSettingsData(), invalidModelSettingsData(), deploymentSettingsData(), schemataSettingsData(), "/home/projects", true, false, false, ""); final List errors = data.validate(); @@ -36,6 +36,10 @@ public void testThatGenerationSettingsDataValidationFailsDueToRecursiveValueObje Assertions.assertEquals("Recursive Value Object relationship", errors.get(0)); } + private PlatformSettingsData platformSettingsData() { + return new PlatformSettingsData("JVM", "Java", "8"); + } + private ContextSettingsData contextSettingsData() { return new ContextSettingsData("io.vlingo", "xoomapp", "1.0.0", "io.vlingo.xoomapp"); diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java index 9e9ecc31..8bf4c144 100644 --- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java +++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java @@ -20,13 +20,13 @@ public class ProjectionGenerationReportTest { private static final String stacktraceLabel = "
**Stacktrace**:
";
   private static final String designerModelLabel = "
**Designer Model**:
";
   private static final String expectedExceptionMessage = "io.vlingo.xoom.codegen.CodeGenerationException: Unable to generate project";
-  private static final String expectedModelFirstNode = "{\"context\":{\"groupId\":\"io.vlingo\",\"artifactId\":\"xoomapp\",\"artifactVersion\":\"1.0\",\"packageName\":\"io.vlingo.xoomapp\"}";
+  private static final String expectedModelFirstNode = "{\"platformSettings\":{\"platform\":\"JVM\",\"lang\":\"Java\",\"sdkVersion\":\"8\"},\"context\":{\"groupId\":\"io.vlingo\",\"artifactId\":\"xoomapp\",\"artifactVersion\":\"1.0\",\"packageName\":\"io.vlingo.xoomapp\"}";
   private static final String expectedAction = "**Action**: Project Generation";
 
   @Test
   public void testThatCodeGenFailureReportIsCreated() {
     final DesignerModel data =
-            new DesignerModel(contextSettingsData(), modelSettingsData(),
+            new DesignerModel(platformSettingsData(), contextSettingsData(), modelSettingsData(),
                     deploymentSettingsData(), schemataSettingsData(), "/home/projects", true, false, false, "");
 
     final ModelProcessingReport report =
@@ -44,6 +44,10 @@ public void testThatCodeGenFailureReportIsCreated() {
     Assertions.assertTrue(report.details.substring(stacktraceIndex).startsWith(expectedExceptionMessage));
   }
 
+  private PlatformSettingsData platformSettingsData() {
+    return new PlatformSettingsData("JVM", "Java", "8");
+  }
+
   private ContextSettingsData contextSettingsData() {
     return new ContextSettingsData("io.vlingo", "xoomapp",
             "1.0", "io.vlingo.xoomapp");

From 1d9d515dfaedc32cd7039dfe527f4d7f077f4cd4 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Wed, 13 Apr 2022 18:30:24 +0100
Subject: [PATCH 03/34] Replace test template setting java sdk version

Signed-off-by: Hamza JGUERIM 
---
 .../codegen/CodeGenerationParameterValidationStepTest.java    | 2 +-
 .../restapi/data/CodeGenerationContextMapperTest.java         | 4 ++--
 .../infrastructure/restapi/data/DesignerModelTest.java        | 2 +-
 .../restapi/report/ProjectionGenerationReportTest.java        | 4 ++--
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java
index bab35278..1d50f510 100644
--- a/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java
@@ -19,7 +19,7 @@ public class CodeGenerationParameterValidationStepTest {
 
   @Test()
   public void testThatJavaParametersAreValidated() {
-    final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "8");
+    final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "1.8");
     final CodeElementFormatter codeElementFormatter =
             CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_"));
 
diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java
index bb6f26f3..168ac406 100644
--- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java
@@ -30,7 +30,7 @@ public class CodeGenerationContextMapperTest {
 
   @Test
   public void testThatJavaTaskExecutionContextIsMapped() {
-    final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "8");
+    final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "1.8");
     final CodeElementFormatter codeElementFormatter =
             CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_"));
 
@@ -83,7 +83,7 @@ private void assertStructuralOptions(final CodeGenerationParameters codeGenerati
             "  \"platformSettings\": {\n" +
             "    \"platform\": \"JVM\",\n" +
             "    \"lang\": \"Java\",\n" +
-            "    \"sdkVersion\": \"8\"\n" +
+            "    \"sdkVersion\": \"1.8\"\n" +
             "  },\n" +
             "  \"context\": {\n" +
             "    \"groupId\": \"io.vlingo\",\n" +
diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java
index 55c02360..abc5409f 100644
--- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java
@@ -37,7 +37,7 @@ public void testThatGenerationSettingsDataValidationFailsDueToRecursiveValueObje
   }
 
   private PlatformSettingsData platformSettingsData() {
-    return new PlatformSettingsData("JVM", "Java", "8");
+    return new PlatformSettingsData("JVM", "Java", "1.8");
   }
 
   private ContextSettingsData contextSettingsData() {
diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java
index 8bf4c144..67308aca 100644
--- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java
@@ -20,7 +20,7 @@ public class ProjectionGenerationReportTest {
   private static final String stacktraceLabel = "
**Stacktrace**:
";
   private static final String designerModelLabel = "
**Designer Model**:
";
   private static final String expectedExceptionMessage = "io.vlingo.xoom.codegen.CodeGenerationException: Unable to generate project";
-  private static final String expectedModelFirstNode = "{\"platformSettings\":{\"platform\":\"JVM\",\"lang\":\"Java\",\"sdkVersion\":\"8\"},\"context\":{\"groupId\":\"io.vlingo\",\"artifactId\":\"xoomapp\",\"artifactVersion\":\"1.0\",\"packageName\":\"io.vlingo.xoomapp\"}";
+  private static final String expectedModelFirstNode = "{\"platformSettings\":{\"platform\":\"JVM\",\"lang\":\"Java\",\"sdkVersion\":\"1.8\"},\"context\":{\"groupId\":\"io.vlingo\",\"artifactId\":\"xoomapp\",\"artifactVersion\":\"1.0\",\"packageName\":\"io.vlingo.xoomapp\"}";
   private static final String expectedAction = "**Action**: Project Generation";
 
   @Test
@@ -45,7 +45,7 @@ public void testThatCodeGenFailureReportIsCreated() {
   }
 
   private PlatformSettingsData platformSettingsData() {
-    return new PlatformSettingsData("JVM", "Java", "8");
+    return new PlatformSettingsData("JVM", "Java", "1.8");
   }
 
   private ContextSettingsData contextSettingsData() {

From e4d3a3670d0e1ba2b418b34bee63bb7fa4eaa840 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Wed, 13 Apr 2022 22:16:33 +0100
Subject: [PATCH 04/34] Fix default code formatter component registration

Signed-off-by: Hamza JGUERIM 
---
 .../infrastructure/restapi/ModelProcessingResource.java  | 9 +++++++++
 .../restapi/data/CodeGenerationContextMapper.java        | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java
index f726a6d3..74caec7c 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java
@@ -9,6 +9,9 @@
 
 import io.vlingo.xoom.actors.Logger;
 import io.vlingo.xoom.actors.Stage;
+import io.vlingo.xoom.codegen.content.CodeElementFormatter;
+import io.vlingo.xoom.codegen.dialect.Dialect;
+import io.vlingo.xoom.codegen.dialect.ReservedWordsHandler;
 import io.vlingo.xoom.common.Completes;
 import io.vlingo.xoom.designer.ModelProcessingInformation;
 import io.vlingo.xoom.designer.ModelProcessingManager;
@@ -48,6 +51,12 @@ public ModelProcessingResource(final Stage stage) {
   }
 
   public Completes startGeneration(final DesignerModel model) {
+    final CodeElementFormatter codeElementFormatter =
+            CodeElementFormatter.with(Dialect.withName(model.platformSettings.lang.toUpperCase()),
+                    ReservedWordsHandler.usingSuffix("_"));
+
+    ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter);
+
     if(model.platformSettings.lang.equalsIgnoreCase("java"))
       this.modelProcessingManager = new ModelProcessingManager(ComponentRegistry.withName("codeGenerationSteps"));
     else
diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
index 441a8f66..15351b71 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
@@ -50,7 +50,7 @@ private CodeGenerationContextMapper(final DesignerModel data,
                                       final Logger logger) {
     this.data = data;
     this.generationTarget = generationTarget;
-    this.parameters = CodeGenerationParameters.from(DIALECT, Dialect.JAVA);
+    this.parameters = CodeGenerationParameters.from(DIALECT, Dialect.withName(data.platformSettings.lang.toUpperCase()));
     this.context = CodeGenerationContextFactory.build(logger, parameters);
     this.formatter = ComponentRegistry.withName("defaultCodeFormatter");
     this.logger = logger;

From 486edee558baee421e909ecda086b7b00258fa99 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 14 Apr 2022 16:31:41 +0100
Subject: [PATCH 05/34] Refactoring to codegen

Signed-off-by: Hamza JGUERIM 
---
 .../vlingo/xoom/designer/Configuration.java   |   4 +-
 .../ApplicationSettingsDataFactory.java       |  19 +++
 .../ApplicationSettingsGenerationStep.java    |  38 ++++++
 .../CsharpApplicationSettingsDataFactory.java |  47 ++++++++
 .../JavaApplicationSettingsDataFactory.java   |  61 ++++++++++
 .../ApplicationSettingsGenerationStep.java    |  52 --------
 .../ApplicationSettingsGenerationStep.java    |  65 ----------
 ...ApplicationSettingsGenerationStepTest.java | 113 ++++++++++++++++++
 ...ApplicationSettingsGenerationStepTest.java |  47 --------
 ...ApplicationSettingsGenerationStepTest.java |  90 --------------
 10 files changed, 280 insertions(+), 256 deletions(-)
 create mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsDataFactory.java
 create mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java
 create mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsDataFactory.java
 create mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsDataFactory.java
 delete mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java
 delete mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStep.java
 create mode 100644 src/test/java/io/vlingo/xoom/designer/codegen/ApplicationSettingsGenerationStepTest.java
 delete mode 100644 src/test/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStepTest.java
 delete mode 100644 src/test/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStepTest.java

diff --git a/src/main/java/io/vlingo/xoom/designer/Configuration.java b/src/main/java/io/vlingo/xoom/designer/Configuration.java
index 58134c35..2704f612 100644
--- a/src/main/java/io/vlingo/xoom/designer/Configuration.java
+++ b/src/main/java/io/vlingo/xoom/designer/Configuration.java
@@ -7,7 +7,7 @@
 import io.vlingo.xoom.designer.codegen.StagingFolderCleanUpStep;
 import io.vlingo.xoom.designer.codegen.StagingFolderCleanUpStep.Phase;
 import io.vlingo.xoom.designer.codegen.TemporaryTaskFolderCreationStep;
-import io.vlingo.xoom.designer.codegen.java.applicationsettings.ApplicationSettingsGenerationStep;
+import io.vlingo.xoom.designer.codegen.applicationsettings.ApplicationSettingsGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.autodispatch.AutoDispatchMappingGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.bootstrap.BootstrapGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.clustersettings.ClusterSettingsGenerationStep;
@@ -115,7 +115,7 @@ private static List cSharpCodeGenerationSteps() {
         new StagingFolderCleanUpStep(Phase.PRE_GENERATION),
         new TemporaryTaskFolderCreationStep(),
         //C#
-        new io.vlingo.xoom.designer.codegen.csharp.applicationsettings.ApplicationSettingsGenerationStep(),
+        new ApplicationSettingsGenerationStep(),
         //Concluding
         new ContentCreationStep(),
         new StagingFolderCleanUpStep(Phase.POST_GENERATION)
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsDataFactory.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsDataFactory.java
new file mode 100644
index 00000000..76ebad34
--- /dev/null
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsDataFactory.java
@@ -0,0 +1,19 @@
+package io.vlingo.xoom.designer.codegen.applicationsettings;
+
+import io.vlingo.xoom.codegen.template.TemplateData;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class ApplicationSettingsDataFactory {
+
+  abstract List projectSettings();
+
+  abstract TemplateData actorSettings();
+
+  protected List generate() {
+    final List result = new ArrayList<>(projectSettings());
+    result.add(actorSettings());
+    return result;
+  }
+}
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java
new file mode 100644
index 00000000..16107872
--- /dev/null
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java
@@ -0,0 +1,38 @@
+// Copyright © 2012-2021 VLINGO LABS. All rights reserved.
+//
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v. 2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain
+// one at https://mozilla.org/MPL/2.0/.
+package io.vlingo.xoom.designer.codegen.applicationsettings;
+
+import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
+import io.vlingo.xoom.codegen.template.TemplateData;
+import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
+import io.vlingo.xoom.designer.codegen.Label;
+
+import java.util.List;
+
+public class ApplicationSettingsGenerationStep extends TemplateProcessingStep {
+
+  @Override
+  protected List buildTemplatesData(final CodeGenerationContext context) {
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+
+    ApplicationSettingsDataFactory applicationSettingsDataFactory;
+    if(dialectName.isEmpty() || Dialect.withName(dialectName).isJava()) {
+      applicationSettingsDataFactory = new JavaApplicationSettingsDataFactory(context);
+    } else {
+      applicationSettingsDataFactory = new CsharpApplicationSettingsDataFactory(context);
+    }
+
+    return applicationSettingsDataFactory.generate();
+  }
+
+  @Override
+  protected Dialect resolveDialect(CodeGenerationContext context) {
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return dialectName.isEmpty()? super.resolveDialect(context) : Dialect.withName(dialectName);
+  }
+}
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsDataFactory.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsDataFactory.java
new file mode 100644
index 00000000..ec4e2ef4
--- /dev/null
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsDataFactory.java
@@ -0,0 +1,47 @@
+package io.vlingo.xoom.designer.codegen.applicationsettings;
+
+import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.template.BasicTemplateData;
+import io.vlingo.xoom.codegen.template.TemplateData;
+import io.vlingo.xoom.codegen.template.TemplateParameters;
+import io.vlingo.xoom.designer.codegen.Label;
+import io.vlingo.xoom.designer.codegen.csharp.CsharpTemplateStandard;
+import io.vlingo.xoom.designer.codegen.java.TemplateParameter;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class CsharpApplicationSettingsDataFactory extends ApplicationSettingsDataFactory {
+
+  private final CodeGenerationContext context;
+
+  public CsharpApplicationSettingsDataFactory(CodeGenerationContext context) {
+    this.context = context;
+  }
+
+  @Override
+  List projectSettings() {
+    final String appName = context.parameters().retrieveValue(Label.APPLICATION_NAME);
+    final String sdkVersion = context.parameters().retrieveValue(Label.SDK_VERSION);
+    final String vlingoVersion = context.parameters().retrieveValue(Label.VLINGO_VERSION);
+
+    final TemplateData solutionSettings = BasicTemplateData.of(CsharpTemplateStandard.SOLUTION_SETTINGS,
+        TemplateParameters.with(TemplateParameter.APPLICATION_NAME, appName));
+
+    final TemplateData projectSettings = BasicTemplateData.of(CsharpTemplateStandard.PROJECT_SETTINGS,
+        TemplateParameters.with(TemplateParameter.APPLICATION_NAME, appName)
+        .and(TemplateParameter.PACKAGE_NAME, appName)
+        .and(TemplateParameter.SDK_Version, sdkVersion)
+        .and(TemplateParameter.VLINGO_VERSION, vlingoVersion));
+
+    return Arrays.asList(solutionSettings, projectSettings);
+  }
+
+  @Override
+  TemplateData actorSettings() {
+    final String appName = context.parameters().retrieveValue(Label.APPLICATION_NAME);
+
+    return BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS, TemplateParameters.with(TemplateParameter.PACKAGE_NAME, appName));
+  }
+
+}
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsDataFactory.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsDataFactory.java
new file mode 100644
index 00000000..ba433f4c
--- /dev/null
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsDataFactory.java
@@ -0,0 +1,61 @@
+package io.vlingo.xoom.designer.codegen.applicationsettings;
+
+import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.template.BasicTemplateData;
+import io.vlingo.xoom.codegen.template.TemplateData;
+import io.vlingo.xoom.codegen.template.TemplateParameters;
+import io.vlingo.xoom.designer.codegen.Label;
+import io.vlingo.xoom.designer.codegen.java.DeploymentSettings;
+import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
+import io.vlingo.xoom.designer.codegen.java.TemplateParameter;
+import io.vlingo.xoom.designer.codegen.java.TurboSettings;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class JavaApplicationSettingsDataFactory extends ApplicationSettingsDataFactory {
+
+  private final CodeGenerationContext context;
+
+  public JavaApplicationSettingsDataFactory(CodeGenerationContext context) {
+    this.context = context;
+  }
+
+  @Override
+  List projectSettings() {
+    final TemplateData logbackSettings = BasicTemplateData.of(JavaTemplateStandard.LOGBACK_SETTINGS,
+        TemplateParameters.with(TemplateParameter.RESOURCE_FILE, true));
+
+    final TemplateData turboSettings = turboSettingsData(context);
+    final TemplateData mavenSettings = mavenSettingsData(context);
+
+    return Arrays.asList(turboSettings, mavenSettings, logbackSettings);
+  }
+
+  @Override
+  TemplateData actorSettings() {
+    return BasicTemplateData.of(JavaTemplateStandard.ACTOR_SETTINGS,
+        TemplateParameters.with(TemplateParameter.RESOURCE_FILE, true));
+  }
+
+  private TemplateData turboSettingsData(final CodeGenerationContext context) {
+    final TurboSettings turboSettings = context.parameterObjectOf(Label.TURBO_SETTINGS);
+
+    final DeploymentSettings deploymentSettings = context.parameterObjectOf(Label.DEPLOYMENT_SETTINGS);
+
+    return BasicTemplateData.of(JavaTemplateStandard.TURBO_SETTINGS,
+        TemplateParameters.with(TemplateParameter.TURBO_SETTINGS, turboSettings)
+        .and(TemplateParameter.DEPLOYMENT_SETTINGS, deploymentSettings)
+        .and(TemplateParameter.RESOURCE_FILE, true));
+  }
+
+  private TemplateData mavenSettingsData(final CodeGenerationContext context) {
+    return BasicTemplateData.of(JavaTemplateStandard.MAVEN_SETTINGS,
+        TemplateParameters.with(TemplateParameter.POM_FILE, true)
+        .and(TemplateParameter.GROUP_ID, context.parameterOf(Label.GROUP_ID))
+        .and(TemplateParameter.ARTIFACT_ID, context.parameterOf(Label.ARTIFACT_ID))
+        .and(TemplateParameter.ARTIFACT_VERSION, context.parameterOf(Label.ARTIFACT_VERSION))
+        .and(TemplateParameter.XOOM_VERSION, context.parameterOf(Label.XOOM_VERSION))
+        .and(TemplateParameter.APPLICATION_MAIN_CLASS, context.parameterOf(Label.APPLICATION_MAIN_CLASS)));
+  }
+}
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java
deleted file mode 100644
index 79083a95..00000000
--- a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStep.java
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright © 2012-2021 VLINGO LABS. All rights reserved.
-//
-// This Source Code Form is subject to the terms of the
-// Mozilla Public License, v. 2.0. If a copy of the MPL
-// was not distributed with this file, You can obtain
-// one at https://mozilla.org/MPL/2.0/.
-package io.vlingo.xoom.designer.codegen.csharp.applicationsettings;
-
-import io.vlingo.xoom.codegen.CodeGenerationContext;
-import io.vlingo.xoom.codegen.dialect.Dialect;
-import io.vlingo.xoom.codegen.template.BasicTemplateData;
-import io.vlingo.xoom.codegen.template.TemplateData;
-import io.vlingo.xoom.codegen.template.TemplateParameters;
-import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
-import io.vlingo.xoom.designer.codegen.Label;
-import io.vlingo.xoom.designer.codegen.csharp.CsharpTemplateStandard;
-import io.vlingo.xoom.designer.codegen.java.TemplateParameter;
-
-import java.util.Arrays;
-import java.util.List;
-
-public class ApplicationSettingsGenerationStep extends TemplateProcessingStep {
-
-  @Override
-  protected List buildTemplatesData(final CodeGenerationContext context) {
-    final String appName = context.parameters().retrieveValue(Label.APPLICATION_NAME);
-    final String sdkVersion = context.parameters().retrieveValue(Label.SDK_VERSION);
-    final String vlingoVersion = context.parameters().retrieveValue(Label.VLINGO_VERSION);
-
-    final TemplateData solutionSettings =
-        BasicTemplateData.of(CsharpTemplateStandard.SOLUTION_SETTINGS,
-            TemplateParameters.with(TemplateParameter.APPLICATION_NAME, appName));
-
-    final TemplateData projectSettings =
-        BasicTemplateData.of(CsharpTemplateStandard.PROJECT_SETTINGS,
-            TemplateParameters.with(TemplateParameter.APPLICATION_NAME, appName)
-                .and(TemplateParameter.PACKAGE_NAME, appName)
-                .and(TemplateParameter.SDK_Version, sdkVersion)
-                .and(TemplateParameter.VLINGO_VERSION, vlingoVersion));
-
-    final TemplateData actorSettings =
-        BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS,
-            TemplateParameters.with(TemplateParameter.PACKAGE_NAME, appName));
-
-    return Arrays.asList(solutionSettings, projectSettings, actorSettings);
-  }
-
-  @Override
-  protected Dialect resolveDialect(CodeGenerationContext context) {
-    return Dialect.withName(context.parameters().retrieveValue(Label.DIALECT));
-  }
-}
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStep.java
deleted file mode 100644
index 7155249a..00000000
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStep.java
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright © 2012-2021 VLINGO LABS. All rights reserved.
-//
-// This Source Code Form is subject to the terms of the
-// Mozilla Public License, v. 2.0. If a copy of the MPL
-// was not distributed with this file, You can obtain
-// one at https://mozilla.org/MPL/2.0/.
-package io.vlingo.xoom.designer.codegen.java.applicationsettings;
-
-import io.vlingo.xoom.codegen.CodeGenerationContext;
-import io.vlingo.xoom.codegen.template.BasicTemplateData;
-import io.vlingo.xoom.codegen.template.TemplateData;
-import io.vlingo.xoom.codegen.template.TemplateParameters;
-import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
-import io.vlingo.xoom.designer.codegen.Label;
-import io.vlingo.xoom.designer.codegen.java.DeploymentSettings;
-import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
-import io.vlingo.xoom.designer.codegen.java.TemplateParameter;
-import io.vlingo.xoom.designer.codegen.java.TurboSettings;
-
-import java.util.Arrays;
-import java.util.List;
-
-public class ApplicationSettingsGenerationStep extends TemplateProcessingStep {
-
-  @Override
-  protected List buildTemplatesData(final CodeGenerationContext context) {
-    final TemplateData actorSettings =
-            BasicTemplateData.of(JavaTemplateStandard.ACTOR_SETTINGS,
-                    TemplateParameters.with(TemplateParameter.RESOURCE_FILE, true));
-
-    final TemplateData logbackSettings =
-            BasicTemplateData.of(JavaTemplateStandard.LOGBACK_SETTINGS,
-                    TemplateParameters.with(TemplateParameter.RESOURCE_FILE, true));
-
-    return Arrays.asList(turboSettingsData(context), mavenSettingsData(context),
-            actorSettings, logbackSettings);
-  }
-
-  private TemplateData turboSettingsData(final CodeGenerationContext context) {
-    final TurboSettings turboSettings =
-            context.parameterObjectOf(Label.TURBO_SETTINGS);
-
-    final DeploymentSettings deploymentSettings =
-            context.parameterObjectOf(Label.DEPLOYMENT_SETTINGS);
-
-    final TemplateParameters turboSettingsTemplateParameters =
-            TemplateParameters.with(TemplateParameter.TURBO_SETTINGS, turboSettings)
-                    .and(TemplateParameter.DEPLOYMENT_SETTINGS, deploymentSettings)
-                    .and(TemplateParameter.RESOURCE_FILE, true);
-
-    return BasicTemplateData.of(JavaTemplateStandard.TURBO_SETTINGS, turboSettingsTemplateParameters);
-  }
-
-  private TemplateData mavenSettingsData(final CodeGenerationContext context) {
-    final TemplateParameters parameters =
-            TemplateParameters.with(TemplateParameter.POM_FILE, true)
-                    .and(TemplateParameter.GROUP_ID, context.parameterOf(Label.GROUP_ID))
-                    .and(TemplateParameter.ARTIFACT_ID, context.parameterOf(Label.ARTIFACT_ID))
-                    .and(TemplateParameter.ARTIFACT_VERSION, context.parameterOf(Label.ARTIFACT_VERSION))
-                    .and(TemplateParameter.XOOM_VERSION, context.parameterOf(Label.XOOM_VERSION))
-                    .and(TemplateParameter.APPLICATION_MAIN_CLASS, context.parameterOf(Label.APPLICATION_MAIN_CLASS));
-
-    return BasicTemplateData.of(JavaTemplateStandard.MAVEN_SETTINGS, parameters);
-  }
-}
diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/ApplicationSettingsGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/ApplicationSettingsGenerationStepTest.java
new file mode 100644
index 00000000..757c4819
--- /dev/null
+++ b/src/test/java/io/vlingo/xoom/designer/codegen/ApplicationSettingsGenerationStepTest.java
@@ -0,0 +1,113 @@
+package io.vlingo.xoom.designer.codegen;
+
+import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.TextExpectation;
+import io.vlingo.xoom.codegen.content.Content;
+import io.vlingo.xoom.codegen.dialect.Dialect;
+import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
+import io.vlingo.xoom.codegen.parameter.CodeGenerationParameters;
+import io.vlingo.xoom.designer.codegen.applicationsettings.ApplicationSettingsGenerationStep;
+import io.vlingo.xoom.designer.codegen.csharp.CsharpTemplateStandard;
+import io.vlingo.xoom.designer.codegen.java.DeploymentSettings;
+import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
+import io.vlingo.xoom.designer.codegen.java.TurboSettings;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class ApplicationSettingsGenerationStepTest extends CodeGenerationTest {
+
+  @Test
+  public void testThatCustomTurboSettingsAreGenerated() {
+    final DeploymentSettings deploymentSettings =
+        DeploymentSettings.with(DeploymentType.KUBERNETES, "xoom-app",
+            "xoom-app-img", "xoom-app-pod", 9898);
+
+    final CodeGenerationParameters parameters =
+        CodeGenerationParameters.from(Label.TURBO_SETTINGS, TurboSettings.with(18081, 9191))
+            .add(CodeGenerationParameter.ofObject(Label.DEPLOYMENT_SETTINGS, deploymentSettings));
+
+    final CodeGenerationContext context = CodeGenerationContext.with(parameters);
+
+    new ApplicationSettingsGenerationStep().process(context);
+
+    final Content turboSettings =
+        context.findContent(JavaTemplateStandard.TURBO_SETTINGS, "xoom-turbo");
+
+    final Content actorSettings =
+        context.findContent(JavaTemplateStandard.ACTOR_SETTINGS, "xoom-actors");
+
+    final Content logbackSettings =
+        context.findContent(JavaTemplateStandard.LOGBACK_SETTINGS, "logback");
+
+    final Content mavenSettings =
+        context.findContent(JavaTemplateStandard.MAVEN_SETTINGS, "pom");
+
+    Assertions.assertTrue(turboSettings.contains(TextExpectation.onJava().read("custom-xoom-turbo")));
+    Assertions.assertTrue(actorSettings.contains(TextExpectation.onJava().read("xoom-actors")));
+    Assertions.assertTrue(logbackSettings.contains(TextExpectation.onJava().read("logback")));
+    Assertions.assertTrue(mavenSettings.contains(TextExpectation.onJava().read("pom")));
+  }
+
+  @Test
+  public void testThatDefaultTurboSettingsAreGenerated() {
+    final DeploymentSettings deploymentSettings =
+        DeploymentSettings.with(DeploymentType.KUBERNETES, "xoom-app",
+            "xoom-app-img", "xoom-app-pod", 9898);
+
+    final CodeGenerationParameters parameters =
+        CodeGenerationParameters.from(Label.TURBO_SETTINGS, TurboSettings.with(0, 0))
+            .add(CodeGenerationParameter.ofObject(Label.DEPLOYMENT_SETTINGS, deploymentSettings));
+
+    final CodeGenerationContext context = CodeGenerationContext.with(parameters);
+
+    new ApplicationSettingsGenerationStep().process(context);
+
+    final Content turboSettings =
+        context.findContent(JavaTemplateStandard.TURBO_SETTINGS, "xoom-turbo");
+
+    final Content actorSettings =
+        context.findContent(JavaTemplateStandard.ACTOR_SETTINGS, "xoom-actors");
+
+    final Content logbackSettings =
+        context.findContent(JavaTemplateStandard.LOGBACK_SETTINGS, "logback");
+
+    final Content mavenSettings =
+        context.findContent(JavaTemplateStandard.MAVEN_SETTINGS, "pom");
+
+    Assertions.assertTrue(turboSettings.contains(TextExpectation.onJava().read("default-xoom-turbo")));
+    Assertions.assertTrue(actorSettings.contains(TextExpectation.onJava().read("xoom-actors")));
+    Assertions.assertTrue(logbackSettings.contains(TextExpectation.onJava().read("logback")));
+    Assertions.assertTrue(mavenSettings.contains(TextExpectation.onJava().read("pom")));
+  }
+
+  @Test
+  public void testThatCsharpSolutionIsGenerated() {
+    final String namespace = "Io.Vlingo.Xoomapp";
+    final String appName = "Xoomapp";
+    final String sdkVersion = "net6.0";
+    final String vlingoVersion = "1.9.3";
+
+    final CodeGenerationParameters parameters = CodeGenerationParameters.from(CodeGenerationParameter.of(Label.PACKAGE, namespace),
+            CodeGenerationParameter.of(Label.APPLICATION_NAME, appName),
+            CodeGenerationParameter.of(Label.SDK_VERSION, sdkVersion),
+            CodeGenerationParameter.of(Label.VLINGO_VERSION, vlingoVersion),
+            CodeGenerationParameter.of(Label.DIALECT, Dialect.C_SHARP));
+
+    final CodeGenerationContext context = CodeGenerationContext.with(parameters);
+
+    new ApplicationSettingsGenerationStep().process(context);
+
+    final Content solutionSettings =
+        context.findContent(CsharpTemplateStandard.SOLUTION_SETTINGS, "Xoomapp");
+
+    final Content projectSettings =
+        context.findContent(CsharpTemplateStandard.PROJECT_SETTINGS, "Xoomapp");
+
+    final Content actorSettings =
+        context.findContent(CsharpTemplateStandard.ACTOR_SETTINGS, "vlingo-actors");
+
+    Assertions.assertTrue(solutionSettings.contains(TextExpectation.onCSharp().read("solution")));
+    Assertions.assertTrue(projectSettings.contains(TextExpectation.onCSharp().read("project")));
+    Assertions.assertTrue(actorSettings.contains(TextExpectation.onCSharp().read("xoom-actors")));
+  }
+}
diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStepTest.java
deleted file mode 100644
index 9005075e..00000000
--- a/src/test/java/io/vlingo/xoom/designer/codegen/csharp/applicationsettings/ApplicationSettingsGenerationStepTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package io.vlingo.xoom.designer.codegen.csharp.applicationsettings;
-
-import io.vlingo.xoom.codegen.CodeGenerationContext;
-import io.vlingo.xoom.codegen.TextExpectation;
-import io.vlingo.xoom.codegen.content.Content;
-import io.vlingo.xoom.codegen.dialect.Dialect;
-import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
-import io.vlingo.xoom.codegen.parameter.CodeGenerationParameters;
-import io.vlingo.xoom.designer.codegen.Label;
-import io.vlingo.xoom.designer.codegen.csharp.CsharpTemplateStandard;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-public class ApplicationSettingsGenerationStepTest {
-
-  @Test
-  public void testThatSolutionIsGenerated() {
-
-    final String namespace = "Io.Vlingo.Xoomapp";
-    final String appName = "Xoomapp";
-    final String sdkVersion = "net6.0";
-    final String vlingoVersion = "1.9.3";
-
-    final CodeGenerationParameters parameters = CodeGenerationParameters.from(CodeGenerationParameter.of(Label.PACKAGE, namespace),
-            CodeGenerationParameter.of(Label.APPLICATION_NAME, appName),
-            CodeGenerationParameter.of(Label.SDK_VERSION, sdkVersion),
-            CodeGenerationParameter.of(Label.VLINGO_VERSION, vlingoVersion),
-            CodeGenerationParameter.of(Label.DIALECT, Dialect.C_SHARP));
-
-    final CodeGenerationContext context = CodeGenerationContext.with(parameters);
-
-    new ApplicationSettingsGenerationStep().process(context);
-
-    final Content solutionSettings =
-        context.findContent(CsharpTemplateStandard.SOLUTION_SETTINGS, "Xoomapp");
-
-    final Content projectSettings =
-        context.findContent(CsharpTemplateStandard.PROJECT_SETTINGS, "Xoomapp");
-
-    final Content actorSettings =
-        context.findContent(CsharpTemplateStandard.ACTOR_SETTINGS, "vlingo-actors");
-
-    Assertions.assertTrue(solutionSettings.contains(TextExpectation.onCSharp().read("solution")));
-    Assertions.assertTrue(projectSettings.contains(TextExpectation.onCSharp().read("project")));
-    Assertions.assertTrue(actorSettings.contains(TextExpectation.onCSharp().read("xoom-actors")));
-  }
-}
diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStepTest.java
deleted file mode 100644
index 24ec15e3..00000000
--- a/src/test/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStepTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright © 2012-2021 VLINGO LABS. All rights reserved.
-//
-// This Source Code Form is subject to the terms of the
-// Mozilla Public License, v. 2.0. If a copy of the MPL
-// was not distributed with this file, You can obtain
-// one at https://mozilla.org/MPL/2.0/.
-
-package io.vlingo.xoom.designer.codegen.java.applicationsettings;
-
-import io.vlingo.xoom.codegen.CodeGenerationContext;
-import io.vlingo.xoom.codegen.TextExpectation;
-import io.vlingo.xoom.codegen.content.Content;
-import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
-import io.vlingo.xoom.codegen.parameter.CodeGenerationParameters;
-import io.vlingo.xoom.designer.codegen.CodeGenerationTest;
-import io.vlingo.xoom.designer.codegen.DeploymentType;
-import io.vlingo.xoom.designer.codegen.Label;
-import io.vlingo.xoom.designer.codegen.java.DeploymentSettings;
-import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
-import io.vlingo.xoom.designer.codegen.java.TurboSettings;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-public class ApplicationSettingsGenerationStepTest extends CodeGenerationTest {
-
-  @Test
-  public void testThatCustomTurboSettingsAreGenerated() {
-    final DeploymentSettings deploymentSettings =
-            DeploymentSettings.with(DeploymentType.KUBERNETES, "xoom-app",
-                    "xoom-app-img", "xoom-app-pod", 9898);
-
-    final CodeGenerationParameters parameters =
-            CodeGenerationParameters.from(Label.TURBO_SETTINGS, TurboSettings.with(18081, 9191))
-                    .add(CodeGenerationParameter.ofObject(Label.DEPLOYMENT_SETTINGS, deploymentSettings));
-
-    final CodeGenerationContext context = CodeGenerationContext.with(parameters);
-
-    new ApplicationSettingsGenerationStep().process(context);
-
-    final Content turboSettings =
-            context.findContent(JavaTemplateStandard.TURBO_SETTINGS, "xoom-turbo");
-
-    final Content actorSettings =
-            context.findContent(JavaTemplateStandard.ACTOR_SETTINGS, "xoom-actors");
-
-    final Content logbackSettings =
-            context.findContent(JavaTemplateStandard.LOGBACK_SETTINGS, "logback");
-
-    final Content mavenSettings =
-            context.findContent(JavaTemplateStandard.MAVEN_SETTINGS, "pom");
-
-    Assertions.assertTrue(turboSettings.contains(TextExpectation.onJava().read("custom-xoom-turbo")));
-    Assertions.assertTrue(actorSettings.contains(TextExpectation.onJava().read("xoom-actors")));
-    Assertions.assertTrue(logbackSettings.contains(TextExpectation.onJava().read("logback")));
-    Assertions.assertTrue(mavenSettings.contains(TextExpectation.onJava().read("pom")));
-  }
-
-  @Test
-  public void testThatDefaultTurboSettingsAreGenerated() {
-    final DeploymentSettings deploymentSettings =
-            DeploymentSettings.with(DeploymentType.KUBERNETES, "xoom-app",
-                    "xoom-app-img", "xoom-app-pod", 9898);
-
-    final CodeGenerationParameters parameters =
-            CodeGenerationParameters.from(Label.TURBO_SETTINGS, TurboSettings.with(0, 0))
-                    .add(CodeGenerationParameter.ofObject(Label.DEPLOYMENT_SETTINGS, deploymentSettings));
-
-    final CodeGenerationContext context = CodeGenerationContext.with(parameters);
-
-    new ApplicationSettingsGenerationStep().process(context);
-
-    final Content turboSettings =
-            context.findContent(JavaTemplateStandard.TURBO_SETTINGS, "xoom-turbo");
-
-    final Content actorSettings =
-            context.findContent(JavaTemplateStandard.ACTOR_SETTINGS, "xoom-actors");
-
-    final Content logbackSettings =
-            context.findContent(JavaTemplateStandard.LOGBACK_SETTINGS, "logback");
-
-    final Content mavenSettings =
-            context.findContent(JavaTemplateStandard.MAVEN_SETTINGS, "pom");
-
-    Assertions.assertTrue(turboSettings.contains(TextExpectation.onJava().read("default-xoom-turbo")));
-    Assertions.assertTrue(actorSettings.contains(TextExpectation.onJava().read("xoom-actors")));
-    Assertions.assertTrue(logbackSettings.contains(TextExpectation.onJava().read("logback")));
-    Assertions.assertTrue(mavenSettings.contains(TextExpectation.onJava().read("pom")));
-  }
-
-}

From 08c220f0c4b085a3e5a3453e3de9a9b4df14dd5f Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 14 Apr 2022 16:38:09 +0100
Subject: [PATCH 06/34] Refactoring.

Signed-off-by: Hamza JGUERIM 
---
 ...tory.java => ApplicationSettingsData.java} |  2 +-
 .../ApplicationSettingsGenerationStep.java    | 22 +++++++++++++------
 ...ava => CsharpApplicationSettingsData.java} |  4 ++--
 ....java => JavaApplicationSettingsData.java} |  4 ++--
 4 files changed, 20 insertions(+), 12 deletions(-)
 rename src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/{ApplicationSettingsDataFactory.java => ApplicationSettingsData.java} (88%)
 rename src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/{CsharpApplicationSettingsDataFactory.java => CsharpApplicationSettingsData.java} (91%)
 rename src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/{JavaApplicationSettingsDataFactory.java => JavaApplicationSettingsData.java} (93%)

diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsDataFactory.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsData.java
similarity index 88%
rename from src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsDataFactory.java
rename to src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsData.java
index 76ebad34..f20208f1 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsDataFactory.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsData.java
@@ -5,7 +5,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public abstract class ApplicationSettingsDataFactory {
+public abstract class ApplicationSettingsData {
 
   abstract List projectSettings();
 
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java
index 16107872..03089e63 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java
@@ -18,21 +18,29 @@ public class ApplicationSettingsGenerationStep extends TemplateProcessingStep {
 
   @Override
   protected List buildTemplatesData(final CodeGenerationContext context) {
-    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return applicationSettingsDataFactory(context)
+        .generate();
+  }
+
+  private ApplicationSettingsData applicationSettingsDataFactory(CodeGenerationContext context) {
+    final String dialectName = dialectNameFrom(context);
 
-    ApplicationSettingsDataFactory applicationSettingsDataFactory;
+    ApplicationSettingsData applicationSettingsData;
     if(dialectName.isEmpty() || Dialect.withName(dialectName).isJava()) {
-      applicationSettingsDataFactory = new JavaApplicationSettingsDataFactory(context);
+      applicationSettingsData = new JavaApplicationSettingsData(context);
     } else {
-      applicationSettingsDataFactory = new CsharpApplicationSettingsDataFactory(context);
+      applicationSettingsData = new CsharpApplicationSettingsData(context);
     }
-
-    return applicationSettingsDataFactory.generate();
+    return applicationSettingsData;
   }
 
   @Override
   protected Dialect resolveDialect(CodeGenerationContext context) {
-    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    final String dialectName = dialectNameFrom(context);
     return dialectName.isEmpty()? super.resolveDialect(context) : Dialect.withName(dialectName);
   }
+
+  private String dialectNameFrom(CodeGenerationContext context) {
+    return context.parameters().retrieveValue(Label.DIALECT);
+  }
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsDataFactory.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
similarity index 91%
rename from src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsDataFactory.java
rename to src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
index ec4e2ef4..5dd34e3d 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsDataFactory.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
@@ -11,11 +11,11 @@
 import java.util.Arrays;
 import java.util.List;
 
-public class CsharpApplicationSettingsDataFactory extends ApplicationSettingsDataFactory {
+public class CsharpApplicationSettingsData extends ApplicationSettingsData {
 
   private final CodeGenerationContext context;
 
-  public CsharpApplicationSettingsDataFactory(CodeGenerationContext context) {
+  public CsharpApplicationSettingsData(CodeGenerationContext context) {
     this.context = context;
   }
 
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsDataFactory.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsData.java
similarity index 93%
rename from src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsDataFactory.java
rename to src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsData.java
index ba433f4c..2cefe920 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsDataFactory.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsData.java
@@ -13,11 +13,11 @@
 import java.util.Arrays;
 import java.util.List;
 
-public class JavaApplicationSettingsDataFactory extends ApplicationSettingsDataFactory {
+public class JavaApplicationSettingsData extends ApplicationSettingsData {
 
   private final CodeGenerationContext context;
 
-  public JavaApplicationSettingsDataFactory(CodeGenerationContext context) {
+  public JavaApplicationSettingsData(CodeGenerationContext context) {
     this.context = context;
   }
 

From b966cca4c0bb3c9bbf0d23cdb5928c41a39784af Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 14 Apr 2022 17:12:54 +0100
Subject: [PATCH 07/34] Add Readme file generation to application settings
 generation..

Signed-off-by: Hamza JGUERIM 
---
 .../vlingo/xoom/designer/Configuration.java   |  2 --
 .../ApplicationSettingsData.java              |  3 +-
 .../ApplicationSettingsGenerationStep.java    |  4 +--
 .../CsharpApplicationSettingsData.java        | 26 ++++++++++----
 .../JavaApplicationSettingsData.java          | 23 ++++++++++++
 .../java/readme/ReadmeFileGenerationStep.java | 33 -----------------
 src/main/resources/codegen/c_sharp/Readme.ftl |  1 +
 ...ApplicationSettingsGenerationStepTest.java | 23 ++++++++++--
 .../readme/ReadmeFileGenerationStepTest.java  | 35 -------------------
 .../text-expectations/c_sharp/readme.text     |  1 +
 10 files changed, 70 insertions(+), 81 deletions(-)
 delete mode 100644 src/main/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStep.java
 create mode 100644 src/main/resources/codegen/c_sharp/Readme.ftl
 rename src/test/java/io/vlingo/xoom/designer/codegen/{ => applicationsettings}/ApplicationSettingsGenerationStepTest.java (85%)
 delete mode 100644 src/test/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStepTest.java
 create mode 100644 src/test/resources/text-expectations/c_sharp/readme.text

diff --git a/src/main/java/io/vlingo/xoom/designer/Configuration.java b/src/main/java/io/vlingo/xoom/designer/Configuration.java
index 2704f612..d755c3e8 100644
--- a/src/main/java/io/vlingo/xoom/designer/Configuration.java
+++ b/src/main/java/io/vlingo/xoom/designer/Configuration.java
@@ -19,7 +19,6 @@
 import io.vlingo.xoom.designer.codegen.java.model.ModelGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.model.ValueObjectGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.projections.ProjectionGenerationStep;
-import io.vlingo.xoom.designer.codegen.java.readme.ReadmeFileGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.resource.RestResourceGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.schemata.SchemaPullStep;
 import io.vlingo.xoom.designer.codegen.java.schemata.SchemaPushStep;
@@ -74,7 +73,6 @@ private static List codeGenerationSteps() {
         new StagingFolderCleanUpStep(Phase.PRE_GENERATION),
         new TemporaryTaskFolderCreationStep(),
         //Java
-        new ReadmeFileGenerationStep(),
         new ApplicationSettingsGenerationStep(),
         new ValueObjectGenerationStep(),
         new ModelGenerationStep(),
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsData.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsData.java
index f20208f1..6c30f044 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsData.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsData.java
@@ -8,12 +8,13 @@
 public abstract class ApplicationSettingsData {
 
   abstract List projectSettings();
-
   abstract TemplateData actorSettings();
+  abstract TemplateData readmeFile();
 
   protected List generate() {
     final List result = new ArrayList<>(projectSettings());
     result.add(actorSettings());
+    result.add(readmeFile());
     return result;
   }
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java
index 03089e63..0793cc2a 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java
@@ -26,7 +26,7 @@ private ApplicationSettingsData applicationSettingsDataFactory(CodeGenerationCon
     final String dialectName = dialectNameFrom(context);
 
     ApplicationSettingsData applicationSettingsData;
-    if(dialectName.isEmpty() || Dialect.withName(dialectName).isJava()) {
+    if (dialectName.isEmpty() || Dialect.withName(dialectName).isJava()) {
       applicationSettingsData = new JavaApplicationSettingsData(context);
     } else {
       applicationSettingsData = new CsharpApplicationSettingsData(context);
@@ -37,7 +37,7 @@ private ApplicationSettingsData applicationSettingsDataFactory(CodeGenerationCon
   @Override
   protected Dialect resolveDialect(CodeGenerationContext context) {
     final String dialectName = dialectNameFrom(context);
-    return dialectName.isEmpty()? super.resolveDialect(context) : Dialect.withName(dialectName);
+    return dialectName.isEmpty() ? super.resolveDialect(context) : Dialect.withName(dialectName);
   }
 
   private String dialectNameFrom(CodeGenerationContext context) {
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
index 5dd34e3d..75373800 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
@@ -6,6 +6,7 @@
 import io.vlingo.xoom.codegen.template.TemplateParameters;
 import io.vlingo.xoom.designer.codegen.Label;
 import io.vlingo.xoom.designer.codegen.csharp.CsharpTemplateStandard;
+import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
 import io.vlingo.xoom.designer.codegen.java.TemplateParameter;
 
 import java.util.Arrays;
@@ -26,22 +27,35 @@ List projectSettings() {
     final String vlingoVersion = context.parameters().retrieveValue(Label.VLINGO_VERSION);
 
     final TemplateData solutionSettings = BasicTemplateData.of(CsharpTemplateStandard.SOLUTION_SETTINGS,
-        TemplateParameters.with(TemplateParameter.APPLICATION_NAME, appName));
+        namespaceFrom(TemplateParameter.APPLICATION_NAME));
 
     final TemplateData projectSettings = BasicTemplateData.of(CsharpTemplateStandard.PROJECT_SETTINGS,
-        TemplateParameters.with(TemplateParameter.APPLICATION_NAME, appName)
-        .and(TemplateParameter.PACKAGE_NAME, appName)
-        .and(TemplateParameter.SDK_Version, sdkVersion)
-        .and(TemplateParameter.VLINGO_VERSION, vlingoVersion));
+        namespaceFrom(TemplateParameter.APPLICATION_NAME)
+            .and(TemplateParameter.PACKAGE_NAME, appName)
+            .and(TemplateParameter.SDK_Version, sdkVersion)
+            .and(TemplateParameter.VLINGO_VERSION, vlingoVersion));
 
     return Arrays.asList(solutionSettings, projectSettings);
   }
 
   @Override
   TemplateData actorSettings() {
+
+    return BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS, namespaceFrom(TemplateParameter.PACKAGE_NAME));
+  }
+
+  private TemplateParameters namespaceFrom(TemplateParameter packageName) {
+    final String appName = context.parameters().retrieveValue(Label.APPLICATION_NAME);
+    return TemplateParameters.with(packageName, appName);
+  }
+
+  @Override
+  TemplateData readmeFile() {
     final String appName = context.parameters().retrieveValue(Label.APPLICATION_NAME);
 
-    return BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS, TemplateParameters.with(TemplateParameter.PACKAGE_NAME, appName));
+    final TemplateParameters templateParameters =
+        TemplateParameters.with(TemplateParameter.README_FILE, true).and(TemplateParameter.PACKAGE_NAME, appName);
+    return BasicTemplateData.of(JavaTemplateStandard.README, templateParameters);
   }
 
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsData.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsData.java
index 2cefe920..ba64c79f 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsData.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsData.java
@@ -4,6 +4,7 @@
 import io.vlingo.xoom.codegen.template.BasicTemplateData;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateParameters;
+import io.vlingo.xoom.codegen.template.TemplateStandard;
 import io.vlingo.xoom.designer.codegen.Label;
 import io.vlingo.xoom.designer.codegen.java.DeploymentSettings;
 import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
@@ -15,6 +16,17 @@
 
 public class JavaApplicationSettingsData extends ApplicationSettingsData {
 
+  public static final TemplateData NULL_TEMPLATE_DATA = new TemplateData() {
+    @Override
+    public TemplateParameters parameters() {
+      return TemplateParameters.empty();
+    }
+
+    @Override
+    public TemplateStandard standard() {
+      return JavaTemplateStandard.LOGBACK_SETTINGS; // Need to define none TemplateStandard
+    }
+  };
   private final CodeGenerationContext context;
 
   public JavaApplicationSettingsData(CodeGenerationContext context) {
@@ -38,8 +50,19 @@ TemplateData actorSettings() {
         TemplateParameters.with(TemplateParameter.RESOURCE_FILE, true));
   }
 
+  @Override
+  TemplateData readmeFile() {
+    final String packageName = context.parameters().retrieveValue(Label.PACKAGE);
+
+    final TemplateParameters templateParameters =
+        TemplateParameters.with(TemplateParameter.README_FILE, true).and(TemplateParameter.PACKAGE_NAME, packageName);
+    return BasicTemplateData.of(JavaTemplateStandard.README, templateParameters);
+  }
+
   private TemplateData turboSettingsData(final CodeGenerationContext context) {
     final TurboSettings turboSettings = context.parameterObjectOf(Label.TURBO_SETTINGS);
+    if(turboSettings == null)
+      return NULL_TEMPLATE_DATA;
 
     final DeploymentSettings deploymentSettings = context.parameterObjectOf(Label.DEPLOYMENT_SETTINGS);
 
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStep.java
deleted file mode 100644
index 08ab13cc..00000000
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStep.java
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright © 2012-2021 VLINGO LABS. All rights reserved.
-//
-// This Source Code Form is subject to the terms of the
-// Mozilla Public License, v. 2.0. If a copy of the MPL
-// was not distributed with this file, You can obtain
-// one at https://mozilla.org/MPL/2.0/.
-package io.vlingo.xoom.designer.codegen.java.readme;
-
-import io.vlingo.xoom.codegen.CodeGenerationContext;
-import io.vlingo.xoom.codegen.template.BasicTemplateData;
-import io.vlingo.xoom.codegen.template.TemplateData;
-import io.vlingo.xoom.codegen.template.TemplateParameters;
-import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
-import io.vlingo.xoom.designer.codegen.Label;
-import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
-import io.vlingo.xoom.designer.codegen.java.TemplateParameter;
-
-import java.util.Arrays;
-import java.util.List;
-
-public class ReadmeFileGenerationStep extends TemplateProcessingStep {
-
-  @Override
-  protected List buildTemplatesData(final CodeGenerationContext codeGenerationContext) {
-    final String packageName = codeGenerationContext.parameterOf(Label.PACKAGE);
-
-    final TemplateParameters templateParameters =
-            TemplateParameters.with(TemplateParameter.README_FILE, true).and(TemplateParameter.PACKAGE_NAME, packageName);
-
-    return Arrays.asList(BasicTemplateData.of(JavaTemplateStandard.README, templateParameters));
-  }
-
-}
diff --git a/src/main/resources/codegen/c_sharp/Readme.ftl b/src/main/resources/codegen/c_sharp/Readme.ftl
new file mode 100644
index 00000000..931406e3
--- /dev/null
+++ b/src/main/resources/codegen/c_sharp/Readme.ftl
@@ -0,0 +1 @@
+# ${packageName}
diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/ApplicationSettingsGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java
similarity index 85%
rename from src/test/java/io/vlingo/xoom/designer/codegen/ApplicationSettingsGenerationStepTest.java
rename to src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java
index 757c4819..82d753f7 100644
--- a/src/test/java/io/vlingo/xoom/designer/codegen/ApplicationSettingsGenerationStepTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java
@@ -1,4 +1,4 @@
-package io.vlingo.xoom.designer.codegen;
+package io.vlingo.xoom.designer.codegen.applicationsettings;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
 import io.vlingo.xoom.codegen.TextExpectation;
@@ -6,7 +6,9 @@
 import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameters;
-import io.vlingo.xoom.designer.codegen.applicationsettings.ApplicationSettingsGenerationStep;
+import io.vlingo.xoom.designer.codegen.CodeGenerationTest;
+import io.vlingo.xoom.designer.codegen.DeploymentType;
+import io.vlingo.xoom.designer.codegen.Label;
 import io.vlingo.xoom.designer.codegen.csharp.CsharpTemplateStandard;
 import io.vlingo.xoom.designer.codegen.java.DeploymentSettings;
 import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
@@ -106,8 +108,25 @@ public void testThatCsharpSolutionIsGenerated() {
     final Content actorSettings =
         context.findContent(CsharpTemplateStandard.ACTOR_SETTINGS, "vlingo-actors");
 
+    final Content readme =
+        context.findContent(JavaTemplateStandard.README, "README");
+
     Assertions.assertTrue(solutionSettings.contains(TextExpectation.onCSharp().read("solution")));
     Assertions.assertTrue(projectSettings.contains(TextExpectation.onCSharp().read("project")));
     Assertions.assertTrue(actorSettings.contains(TextExpectation.onCSharp().read("xoom-actors")));
+    Assertions.assertTrue(readme.contains(TextExpectation.onCSharp().read("readme")));
+  }
+
+  @Test
+  public void testThatReadmeFileIsGenerated() {
+    final CodeGenerationContext context =
+        CodeGenerationContext.with(CodeGenerationParameters.from(Label.PACKAGE, "io.vlingo.xoomapp"));
+
+    new ApplicationSettingsGenerationStep().process(context);
+
+    final Content readme =
+        context.findContent(JavaTemplateStandard.README, "README");
+
+    Assertions.assertTrue(readme.contains(TextExpectation.onJava().read("readme")));
   }
 }
diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStepTest.java
deleted file mode 100644
index e74d88ff..00000000
--- a/src/test/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStepTest.java
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright © 2012-2021 VLINGO LABS. All rights reserved.
-//
-// This Source Code Form is subject to the terms of the
-// Mozilla Public License, v. 2.0. If a copy of the MPL
-// was not distributed with this file, You can obtain
-// one at https://mozilla.org/MPL/2.0/.
-
-package io.vlingo.xoom.designer.codegen.java.readme;
-
-import io.vlingo.xoom.codegen.CodeGenerationContext;
-import io.vlingo.xoom.codegen.TextExpectation;
-import io.vlingo.xoom.codegen.content.Content;
-import io.vlingo.xoom.codegen.parameter.CodeGenerationParameters;
-import io.vlingo.xoom.designer.codegen.CodeGenerationTest;
-import io.vlingo.xoom.designer.codegen.Label;
-import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-public class ReadmeFileGenerationStepTest extends CodeGenerationTest {
-
-  @Test
-  public void testThatReadmeFileIsGenerated() {
-    final CodeGenerationContext context =
-            CodeGenerationContext.with(CodeGenerationParameters.from(Label.PACKAGE, "io.vlingo.xoomapp"));
-
-    new ReadmeFileGenerationStep().process(context);
-
-    final Content readme =
-            context.findContent(JavaTemplateStandard.README, "README");
-
-    Assertions.assertTrue(readme.contains(TextExpectation.onJava().read("readme")));
-  }
-
-}
diff --git a/src/test/resources/text-expectations/c_sharp/readme.text b/src/test/resources/text-expectations/c_sharp/readme.text
new file mode 100644
index 00000000..781f2eb5
--- /dev/null
+++ b/src/test/resources/text-expectations/c_sharp/readme.text
@@ -0,0 +1 @@
+# Xoomapp

From 3ae3774c916ba186c9392e23baedbbd0cb5b5e50 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 14 Apr 2022 17:49:16 +0100
Subject: [PATCH 08/34] Add shouldProcess based on dialect

Signed-off-by: Hamza JGUERIM 
---
 .../vlingo/xoom/designer/Configuration.java   | 23 ++++---------------
 .../AutoDispatchMappingGenerationStep.java    |  4 +++-
 .../bootstrap/BootstrapGenerationStep.java    |  7 ++++++
 .../dataobject/DataObjectGenerationStep.java  |  5 ++++
 .../DockerfileGenerationStep.java             |  4 +++-
 .../java/exchange/ExchangeGenerationStep.java |  6 ++++-
 .../java/model/ModelGenerationStep.java       |  4 +++-
 .../java/model/ValueObjectGenerationStep.java |  3 ++-
 .../projections/ProjectionGenerationStep.java |  5 +++-
 .../resource/RestResourceGenerationStep.java  |  4 +++-
 .../java/schemata/SchemataGenerationStep.java |  4 +++-
 .../java/storage/StorageGenerationStep.java   |  4 +++-
 .../entity/EntityUnitTestGenerationStep.java  |  6 +++++
 .../ProjectionUnitTestGenerationStep.java     |  5 +++-
 ...esourceAbstractUnitTestGenerationStep.java |  4 +++-
 .../RestResourceUnitTestGenerationStep.java   |  4 +++-
 .../restapi/ModelProcessingResource.java      |  8 ++-----
 17 files changed, 63 insertions(+), 37 deletions(-)

diff --git a/src/main/java/io/vlingo/xoom/designer/Configuration.java b/src/main/java/io/vlingo/xoom/designer/Configuration.java
index d755c3e8..3c952afb 100644
--- a/src/main/java/io/vlingo/xoom/designer/Configuration.java
+++ b/src/main/java/io/vlingo/xoom/designer/Configuration.java
@@ -62,17 +62,16 @@ public class Configuration {
 
   public static void load() {
     ComponentRegistry.register("codeGenerationSteps", codeGenerationSteps());
-    ComponentRegistry.register("cSharpCodeGenerationSteps", cSharpCodeGenerationSteps());
   }
 
   private static List codeGenerationSteps() {
     return Arrays.asList(
-        //Preliminary
+        // Preliminary
         new CodeGenerationParameterValidationStep(),
         new MainClassResolverStep(),
         new StagingFolderCleanUpStep(Phase.PRE_GENERATION),
         new TemporaryTaskFolderCreationStep(),
-        //Java
+        // CodeGen
         new ApplicationSettingsGenerationStep(),
         new ValueObjectGenerationStep(),
         new ModelGenerationStep(),
@@ -93,11 +92,11 @@ private static List codeGenerationSteps() {
         new DesignerModelGenerationStep(),
         new DockerfileGenerationStep(),
         new KubernetesManifestFileGenerationStep(),
-        //React
+        // React
         new StaticFilesGenerationStep(),
         new LayoutGenerationStep(),
         new AggregateManagementGenerationStep(),
-        //Concluding
+        // Concluding
         new ContentCreationStep(),
         new MavenWrapperInstallationStep(),
         new SchemaPushStep(withType(CommandExecutionProcess.class)),
@@ -106,20 +105,6 @@ private static List codeGenerationSteps() {
     );
   }
 
-  private static List cSharpCodeGenerationSteps() {
-    return Arrays.asList(
-        //Preliminary
-        new CodeGenerationParameterValidationStep(),
-        new StagingFolderCleanUpStep(Phase.PRE_GENERATION),
-        new TemporaryTaskFolderCreationStep(),
-        //C#
-        new ApplicationSettingsGenerationStep(),
-        //Concluding
-        new ContentCreationStep(),
-        new StagingFolderCleanUpStep(Phase.POST_GENERATION)
-    );
-  }
-
   public static String resolveDefaultXoomVersion() {
     final String version = Configuration.class.getPackage().getImplementationVersion();
     if (version == null) {
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchMappingGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchMappingGenerationStep.java
index 1a436c8f..271f9e06 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchMappingGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchMappingGenerationStep.java
@@ -8,6 +8,7 @@
 package io.vlingo.xoom.designer.codegen.java.autodispatch;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
 import io.vlingo.xoom.designer.codegen.Label;
@@ -23,7 +24,8 @@ protected List buildTemplatesData(final CodeGenerationContext cont
 
   @Override
   public boolean shouldProcess(final CodeGenerationContext context) {
-    return context.hasParameter(Label.USE_AUTO_DISPATCH) &&
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() &&  context.hasParameter(Label.USE_AUTO_DISPATCH) &&
             context.parameterOf(Label.USE_AUTO_DISPATCH, Boolean::valueOf);
   }
 
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/bootstrap/BootstrapGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/bootstrap/BootstrapGenerationStep.java
index 09576558..aebeb557 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/bootstrap/BootstrapGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/bootstrap/BootstrapGenerationStep.java
@@ -8,8 +8,10 @@
 package io.vlingo.xoom.designer.codegen.java.bootstrap;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
+import io.vlingo.xoom.designer.codegen.Label;
 
 import java.util.Arrays;
 import java.util.List;
@@ -21,4 +23,9 @@ protected List buildTemplatesData(final CodeGenerationContext cont
     return Arrays.asList(BootstrapTemplateData.from(context));
   }
 
+  @Override
+  public boolean shouldProcess(CodeGenerationContext context) {
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava();
+  }
 }
\ No newline at end of file
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/dataobject/DataObjectGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/dataobject/DataObjectGenerationStep.java
index 3ea12aa5..2fd4fb92 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/dataobject/DataObjectGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/dataobject/DataObjectGenerationStep.java
@@ -41,4 +41,9 @@ protected List buildTemplatesData(final CodeGenerationContext cont
             .flatMap(List::stream).collect(toList());
   }
 
+  @Override
+  public boolean shouldProcess(CodeGenerationContext context) {
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava();
+  }
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/deploymentsettings/DockerfileGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/deploymentsettings/DockerfileGenerationStep.java
index bf4266c9..1df48081 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/deploymentsettings/DockerfileGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/deploymentsettings/DockerfileGenerationStep.java
@@ -38,7 +38,9 @@ protected Dialect resolveDialect(final CodeGenerationContext context) {
 
   @Override
   public boolean shouldProcess(CodeGenerationContext context) {
-    return ((DeploymentSettings) context.parameterObjectOf(Label.DEPLOYMENT_SETTINGS)).useDocker;
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return dialectName.isEmpty() && Dialect.withName(dialectName).isJava() &&
+        ((DeploymentSettings) context.parameterObjectOf(Label.DEPLOYMENT_SETTINGS)).useDocker;
   }
 
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/exchange/ExchangeGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/exchange/ExchangeGenerationStep.java
index 4373ad74..a4c109c5 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/exchange/ExchangeGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/exchange/ExchangeGenerationStep.java
@@ -8,6 +8,7 @@
 package io.vlingo.xoom.designer.codegen.java.exchange;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
@@ -36,7 +37,10 @@ public boolean shouldProcess(final CodeGenerationContext context) {
     if (!context.hasParameter(Label.AGGREGATE)) {
       return false;
     }
-    return context.parametersOf(Label.AGGREGATE).anyMatch(aggregate -> aggregate.hasAny(Label.EXCHANGE));
+
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() &&
+        context.parametersOf(Label.AGGREGATE).anyMatch(aggregate -> aggregate.hasAny(Label.EXCHANGE));
   }
 
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/model/ModelGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/model/ModelGenerationStep.java
index ccc52bc3..a197cf30 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/model/ModelGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/model/ModelGenerationStep.java
@@ -8,6 +8,7 @@
 package io.vlingo.xoom.designer.codegen.java.model;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
 import io.vlingo.xoom.designer.codegen.Label;
@@ -23,7 +24,8 @@ protected List buildTemplatesData(final CodeGenerationContext cont
 
   @Override
   public boolean shouldProcess(final CodeGenerationContext context) {
-    return context.hasParameter(Label.AGGREGATE);
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() && context.hasParameter(Label.AGGREGATE);
   }
 
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/model/ValueObjectGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/model/ValueObjectGenerationStep.java
index 55000180..0d4d3db0 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/model/ValueObjectGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/model/ValueObjectGenerationStep.java
@@ -29,7 +29,8 @@ protected List buildTemplatesData(CodeGenerationContext context) {
 
   @Override
   public boolean shouldProcess(final CodeGenerationContext context) {
-    return context.hasParameter(Label.VALUE_OBJECT);
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() && context.hasParameter(Label.VALUE_OBJECT);
   }
 
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/projections/ProjectionGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/projections/ProjectionGenerationStep.java
index a109348b..c2b4928b 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/projections/ProjectionGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/projections/ProjectionGenerationStep.java
@@ -9,6 +9,7 @@
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
 import io.vlingo.xoom.codegen.content.ContentQuery;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
 import io.vlingo.xoom.designer.codegen.Label;
@@ -26,7 +27,9 @@ protected List buildTemplatesData(final CodeGenerationContext cont
   @Override
   public boolean shouldProcess(final CodeGenerationContext context) {
     final ProjectionType projectionType = context.parameterOf(Label.PROJECTION_TYPE, ProjectionType::valueOf);
-    return ContentQuery.exists(JavaTemplateStandard.AGGREGATE_PROTOCOL, context.contents()) && projectionType.isProjectionEnabled();
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() &&
+        ContentQuery.exists(JavaTemplateStandard.AGGREGATE_PROTOCOL, context.contents()) && projectionType.isProjectionEnabled();
   }
 
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java
index 795a64ac..59493899 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java
@@ -8,6 +8,7 @@
 package io.vlingo.xoom.designer.codegen.java.resource;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
 import io.vlingo.xoom.designer.codegen.Label;
@@ -23,7 +24,8 @@ protected List buildTemplatesData(final CodeGenerationContext cont
 
   @Override
   public boolean shouldProcess(final CodeGenerationContext context) {
-    return !context.hasParameter(Label.USE_AUTO_DISPATCH) || !context.parameterOf(Label.USE_AUTO_DISPATCH, Boolean::valueOf);
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() &&  !context.hasParameter(Label.USE_AUTO_DISPATCH) || !context.parameterOf(Label.USE_AUTO_DISPATCH, Boolean::valueOf);
   }
 
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/schemata/SchemataGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/schemata/SchemataGenerationStep.java
index 516b334c..439bee34 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/schemata/SchemataGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/schemata/SchemataGenerationStep.java
@@ -7,6 +7,7 @@
 package io.vlingo.xoom.designer.codegen.java.schemata;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
@@ -61,6 +62,7 @@ private List findPublishedValueObjects(final List aggregate.retrieveAllRelated(Label.EXCHANGE)).count() > 0;
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() && context.parametersOf(Label.AGGREGATE).flatMap(aggregate -> aggregate.retrieveAllRelated(Label.EXCHANGE)).count() > 0;
   }
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/storage/StorageGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/storage/StorageGenerationStep.java
index 68f8a132..c1946b20 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/storage/StorageGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/storage/StorageGenerationStep.java
@@ -8,6 +8,7 @@
 package io.vlingo.xoom.designer.codegen.java.storage;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
 import io.vlingo.xoom.designer.codegen.Label;
@@ -45,7 +46,8 @@ private List filterConditionally(final Boolean useAnnotations, fin
 
   @Override
   public boolean shouldProcess(final CodeGenerationContext context) {
-    return context.parameterOf(Label.STORAGE_TYPE, StorageType::of).isEnabled();
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() && context.parameterOf(Label.STORAGE_TYPE, StorageType::of).isEnabled();
   }
 
   private Map databases(final CodeGenerationContext context) {
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/entity/EntityUnitTestGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/entity/EntityUnitTestGenerationStep.java
index c9340220..f40b102e 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/entity/EntityUnitTestGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/entity/EntityUnitTestGenerationStep.java
@@ -8,6 +8,7 @@
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
 import io.vlingo.xoom.codegen.content.Content;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
@@ -46,4 +47,9 @@ protected List buildTemplatesData(final CodeGenerationContext cont
     return templatesData;
   }
 
+  @Override
+  public boolean shouldProcess(CodeGenerationContext context) {
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava();
+  }
 }
\ No newline at end of file
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/projections/ProjectionUnitTestGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/projections/ProjectionUnitTestGenerationStep.java
index 50b0b68d..fbf0b9b2 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/projections/ProjectionUnitTestGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/projections/ProjectionUnitTestGenerationStep.java
@@ -2,6 +2,7 @@
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
 import io.vlingo.xoom.codegen.content.ContentQuery;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
@@ -37,7 +38,9 @@ protected List buildTemplatesData(final CodeGenerationContext cont
 
   @Override
   public boolean shouldProcess(CodeGenerationContext context) {
-    return context.parameterOf(Label.PROJECTION_TYPE, ProjectionType::valueOf).isProjectionEnabled();
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() &&
+        context.parameterOf(Label.PROJECTION_TYPE, ProjectionType::valueOf).isProjectionEnabled();
   }
 
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/resource/RestResourceAbstractUnitTestGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/resource/RestResourceAbstractUnitTestGenerationStep.java
index b41c350d..a374a851 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/resource/RestResourceAbstractUnitTestGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/resource/RestResourceAbstractUnitTestGenerationStep.java
@@ -7,6 +7,7 @@
 package io.vlingo.xoom.designer.codegen.java.unittest.resource;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
 import io.vlingo.xoom.designer.codegen.Label;
@@ -23,6 +24,7 @@ protected List buildTemplatesData(final CodeGenerationContext cont
 
   @Override
   public boolean shouldProcess(final CodeGenerationContext context) {
-    return context.parameterOf(Label.USE_ANNOTATIONS, Boolean::valueOf);
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() && context.parameterOf(Label.USE_ANNOTATIONS, Boolean::valueOf);
   }
 }
\ No newline at end of file
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/resource/RestResourceUnitTestGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/resource/RestResourceUnitTestGenerationStep.java
index d39da6b9..b6fabc44 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/resource/RestResourceUnitTestGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/resource/RestResourceUnitTestGenerationStep.java
@@ -7,6 +7,7 @@
 package io.vlingo.xoom.designer.codegen.java.unittest.resource;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
@@ -27,6 +28,7 @@ protected List buildTemplatesData(final CodeGenerationContext cont
 
   @Override
   public boolean shouldProcess(final CodeGenerationContext context) {
-    return context.parameterOf(Label.USE_ANNOTATIONS, Boolean::valueOf);
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() && context.parameterOf(Label.USE_ANNOTATIONS, Boolean::valueOf);
   }
 }
\ No newline at end of file
diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java
index 74caec7c..5c6a1889 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java
@@ -39,7 +39,7 @@ public class ModelProcessingResource extends DynamicResourceHandler {
 
   private final Logger logger;
   private final GenerationTarget generationTarget;
-  private ModelProcessingManager modelProcessingManager;
+  private final ModelProcessingManager modelProcessingManager;
   private final ModelProcessingInformation modelProcessingInformation;
   public static final String REFUSE_REQUEST_URI = "/api/model-processing/request-refusal";
 
@@ -48,6 +48,7 @@ public ModelProcessingResource(final Stage stage) {
     this.logger = stage().world().defaultLogger();
     this.generationTarget = ComponentRegistry.withType(GenerationTarget.class);
     this.modelProcessingInformation = ModelProcessingInformation.from(generationTarget);
+    this.modelProcessingManager = new ModelProcessingManager(ComponentRegistry.withName("codeGenerationSteps"));
   }
 
   public Completes startGeneration(final DesignerModel model) {
@@ -57,11 +58,6 @@ public Completes startGeneration(final DesignerModel model) {
 
     ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter);
 
-    if(model.platformSettings.lang.equalsIgnoreCase("java"))
-      this.modelProcessingManager = new ModelProcessingManager(ComponentRegistry.withName("codeGenerationSteps"));
-    else
-      this.modelProcessingManager = new ModelProcessingManager(ComponentRegistry.withName("cSharpCodeGenerationSteps"));
-
     return modelProcessingManager.generate(model, modelProcessingInformation, logger).andThenTo(scene -> {
               final Response.Status responseStatus = scene.isFailed() ? InternalServerError : Ok;
               return Completes.withSuccess(Response.of(responseStatus, serialized(scene.report)));

From df08ad25b23628def679cedc0a6e2b8b4fb2cf7f Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 14 Apr 2022 17:55:45 +0100
Subject: [PATCH 09/34] Add shouldProcess based on dialect

Signed-off-by: Hamza JGUERIM 
---
 .../codegen/java/structure/MainClassResolverStep.java       | 6 ++++++
 .../java/structure/MavenWrapperInstallationStep.java        | 6 ++++++
 2 files changed, 12 insertions(+)

diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/structure/MainClassResolverStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/structure/MainClassResolverStep.java
index d6d4ad91..1e7d4c19 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/structure/MainClassResolverStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/structure/MainClassResolverStep.java
@@ -9,6 +9,7 @@
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
 import io.vlingo.xoom.codegen.CodeGenerationStep;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.designer.codegen.Label;
 import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
 import io.vlingo.xoom.turbo.annotation.codegen.AnnotationBasedTemplateStandard;
@@ -36,4 +37,9 @@ private String resolveClassName(final Boolean useAnnotations) {
             JavaTemplateStandard.BOOTSTRAP.resolveClassname();
   }
 
+  @Override
+  public boolean shouldProcess(CodeGenerationContext context) {
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava();
+  }
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/structure/MavenWrapperInstallationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/structure/MavenWrapperInstallationStep.java
index 268eb78b..e76e745f 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/structure/MavenWrapperInstallationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/structure/MavenWrapperInstallationStep.java
@@ -9,6 +9,7 @@
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
 import io.vlingo.xoom.codegen.CodeGenerationStep;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.designer.ModelProcessingException;
 import io.vlingo.xoom.designer.codegen.Label;
 import io.vlingo.xoom.designer.infrastructure.StagingFolder;
@@ -61,4 +62,9 @@ private void copyMavenWrapperDirectory(final Path projectPath) {
     }
   }
 
+  @Override
+  public boolean shouldProcess(CodeGenerationContext context) {
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava();
+  }
 }

From 8ac8f0ef2b584a6e2badaea60ca1ee30863b2c4e Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 14 Apr 2022 18:00:18 +0100
Subject: [PATCH 10/34] Add shouldProcess based on dialect

Signed-off-by: Hamza JGUERIM 
---
 .../java/clustersettings/ClusterSettingsGenerationStep.java | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/clustersettings/ClusterSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/clustersettings/ClusterSettingsGenerationStep.java
index 1ae08048..ff59f069 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/clustersettings/ClusterSettingsGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/clustersettings/ClusterSettingsGenerationStep.java
@@ -7,6 +7,7 @@
 package io.vlingo.xoom.designer.codegen.java.clustersettings;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.BasicTemplateData;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateParameters;
@@ -36,4 +37,9 @@ protected List buildTemplatesData(final CodeGenerationContext cont
     return Arrays.asList(clusterSettingsTemplateData);
   }
 
+  @Override
+  public boolean shouldProcess(CodeGenerationContext context) {
+    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
+    return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava();
+  }
 }

From 93a8eb03663a5a21e6840bf5d89bd9d6c51ab63e Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 14 Apr 2022 18:05:48 +0100
Subject: [PATCH 11/34] Move designer model generation to codegen

Signed-off-by: Hamza JGUERIM 
---
 src/main/java/io/vlingo/xoom/designer/Configuration.java     | 5 +++--
 .../{java => }/designermodel/DesignerModelFormatter.java     | 2 +-
 .../designermodel/DesignerModelGenerationStep.java           | 2 +-
 .../{java => }/designermodel/DesignerModelTemplateData.java  | 2 +-
 .../restapi/data/CodeGenerationContextMapper.java            | 2 +-
 .../designermodel/DesignerModelGenerationStepTest.java       | 2 +-
 6 files changed, 8 insertions(+), 7 deletions(-)
 rename src/main/java/io/vlingo/xoom/designer/codegen/{java => }/designermodel/DesignerModelFormatter.java (93%)
 rename src/main/java/io/vlingo/xoom/designer/codegen/{java => }/designermodel/DesignerModelGenerationStep.java (94%)
 rename src/main/java/io/vlingo/xoom/designer/codegen/{java => }/designermodel/DesignerModelTemplateData.java (95%)
 rename src/test/java/io/vlingo/xoom/designer/codegen/{java => }/designermodel/DesignerModelGenerationStepTest.java (97%)

diff --git a/src/main/java/io/vlingo/xoom/designer/Configuration.java b/src/main/java/io/vlingo/xoom/designer/Configuration.java
index 3c952afb..fa6441d3 100644
--- a/src/main/java/io/vlingo/xoom/designer/Configuration.java
+++ b/src/main/java/io/vlingo/xoom/designer/Configuration.java
@@ -8,13 +8,13 @@
 import io.vlingo.xoom.designer.codegen.StagingFolderCleanUpStep.Phase;
 import io.vlingo.xoom.designer.codegen.TemporaryTaskFolderCreationStep;
 import io.vlingo.xoom.designer.codegen.applicationsettings.ApplicationSettingsGenerationStep;
+import io.vlingo.xoom.designer.codegen.designermodel.DesignerModelGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.autodispatch.AutoDispatchMappingGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.bootstrap.BootstrapGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.clustersettings.ClusterSettingsGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.dataobject.DataObjectGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.deploymentsettings.DockerfileGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.deploymentsettings.KubernetesManifestFileGenerationStep;
-import io.vlingo.xoom.designer.codegen.java.designermodel.DesignerModelGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.exchange.ExchangeGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.model.ModelGenerationStep;
 import io.vlingo.xoom.designer.codegen.java.model.ValueObjectGenerationStep;
@@ -73,6 +73,8 @@ private static List codeGenerationSteps() {
         new TemporaryTaskFolderCreationStep(),
         // CodeGen
         new ApplicationSettingsGenerationStep(),
+        new DesignerModelGenerationStep(),
+        // JAVA
         new ValueObjectGenerationStep(),
         new ModelGenerationStep(),
         new DataObjectGenerationStep(),
@@ -89,7 +91,6 @@ private static List codeGenerationSteps() {
         new RestResourceAbstractUnitTestGenerationStep(),
         new RestResourceUnitTestGenerationStep(),
         new ClusterSettingsGenerationStep(),
-        new DesignerModelGenerationStep(),
         new DockerfileGenerationStep(),
         new KubernetesManifestFileGenerationStep(),
         // React
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelFormatter.java b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelFormatter.java
similarity index 93%
rename from src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelFormatter.java
rename to src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelFormatter.java
index 53238d83..687cfeb0 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelFormatter.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelFormatter.java
@@ -4,7 +4,7 @@
 // Mozilla Public License, v. 2.0. If a copy of the MPL
 // was not distributed with this file, You can obtain
 // one at https://mozilla.org/MPL/2.0/.
-package io.vlingo.xoom.designer.codegen.java.designermodel;
+package io.vlingo.xoom.designer.codegen.designermodel;
 
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonParser;
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStep.java
similarity index 94%
rename from src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelGenerationStep.java
rename to src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStep.java
index 97bbe3e3..e7374ef5 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStep.java
@@ -5,7 +5,7 @@
 // was not distributed with this file, You can obtain
 // one at https://mozilla.org/MPL/2.0/.
 
-package io.vlingo.xoom.designer.codegen.java.designermodel;
+package io.vlingo.xoom.designer.codegen.designermodel;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
 import io.vlingo.xoom.codegen.template.TemplateData;
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelTemplateData.java b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelTemplateData.java
similarity index 95%
rename from src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelTemplateData.java
rename to src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelTemplateData.java
index 4023e0f1..471fe8f2 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelTemplateData.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelTemplateData.java
@@ -4,7 +4,7 @@
 // Mozilla Public License, v. 2.0. If a copy of the MPL
 // was not distributed with this file, You can obtain
 // one at https://mozilla.org/MPL/2.0/.
-package io.vlingo.xoom.designer.codegen.java.designermodel;
+package io.vlingo.xoom.designer.codegen.designermodel;
 
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateParameters;
diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
index 15351b71..650b9390 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
@@ -15,11 +15,11 @@
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameters;
 import io.vlingo.xoom.designer.Configuration;
 import io.vlingo.xoom.designer.codegen.*;
+import io.vlingo.xoom.designer.codegen.designermodel.DesignerModelFormatter;
 import io.vlingo.xoom.designer.codegen.java.ClusterSettings;
 import io.vlingo.xoom.designer.codegen.java.DeploymentSettings;
 import io.vlingo.xoom.designer.codegen.java.SchemataSettings;
 import io.vlingo.xoom.designer.codegen.java.TurboSettings;
-import io.vlingo.xoom.designer.codegen.java.designermodel.DesignerModelFormatter;
 import io.vlingo.xoom.designer.codegen.java.exchange.ExchangeRole;
 import io.vlingo.xoom.designer.codegen.java.schemata.Schema;
 import io.vlingo.xoom.turbo.ComponentRegistry;
diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStepTest.java
similarity index 97%
rename from src/test/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelGenerationStepTest.java
rename to src/test/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStepTest.java
index 623f41f4..11e59925 100644
--- a/src/test/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelGenerationStepTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStepTest.java
@@ -5,7 +5,7 @@
 // was not distributed with this file, You can obtain
 // one at https://mozilla.org/MPL/2.0/.
 
-package io.vlingo.xoom.designer.codegen.java.designermodel;
+package io.vlingo.xoom.designer.codegen.designermodel;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
 import io.vlingo.xoom.codegen.TextExpectation;

From 1385b07f8c43ccdc26712e3a5af6ef6799c167c8 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 14 Apr 2022 22:46:03 +0100
Subject: [PATCH 12/34] Add C# code formatter

Signed-off-by: Hamza JGUERIM 
---
 .../io/vlingo/xoom/designer/Configuration.java   | 16 +++++++++++++++-
 .../restapi/ModelProcessingResource.java         |  9 ---------
 .../data/CodeGenerationContextMapper.java        |  7 ++++++-
 .../restapi/data/PlatformSettingsData.java       | 10 ++++++----
 ...odeGenerationParameterValidationStepTest.java |  6 +++---
 .../data/CodeGenerationContextMapperTest.java    | 12 +++++++-----
 .../restapi/data/DesignerModelTest.java          |  2 +-
 .../report/ProjectionGenerationReportTest.java   |  4 ++--
 8 files changed, 40 insertions(+), 26 deletions(-)

diff --git a/src/main/java/io/vlingo/xoom/designer/Configuration.java b/src/main/java/io/vlingo/xoom/designer/Configuration.java
index fa6441d3..f442d2c9 100644
--- a/src/main/java/io/vlingo/xoom/designer/Configuration.java
+++ b/src/main/java/io/vlingo/xoom/designer/Configuration.java
@@ -1,7 +1,10 @@
 package io.vlingo.xoom.designer;
 
 import io.vlingo.xoom.codegen.CodeGenerationStep;
+import io.vlingo.xoom.codegen.content.CodeElementFormatter;
 import io.vlingo.xoom.codegen.content.ContentCreationStep;
+import io.vlingo.xoom.codegen.dialect.Dialect;
+import io.vlingo.xoom.codegen.dialect.ReservedWordsHandler;
 import io.vlingo.xoom.common.Tuple2;
 import io.vlingo.xoom.designer.codegen.CodeGenerationParameterValidationStep;
 import io.vlingo.xoom.designer.codegen.StagingFolderCleanUpStep;
@@ -61,6 +64,17 @@ public class Configuration {
   private static final Duration DEFAULT_REQUEST_COUNT_EXPIRATION = Duration.ofSeconds(1);
 
   public static void load() {
+    final CodeElementFormatter defaultCodeElementFormatter =
+        CodeElementFormatter.with(Dialect.findDefault(),
+            ReservedWordsHandler.usingSuffix("_"));
+
+    ComponentRegistry.register("defaultCodeFormatter", defaultCodeElementFormatter);
+    final CodeElementFormatter cSharpCodeElementFormatter =
+        CodeElementFormatter.with(Dialect.C_SHARP,
+            ReservedWordsHandler.usingSuffix("_"));
+
+    ComponentRegistry.register("defaultCodeFormatter", defaultCodeElementFormatter);
+    ComponentRegistry.register("cSharpCodeFormatter", cSharpCodeElementFormatter);
     ComponentRegistry.register("codeGenerationSteps", codeGenerationSteps());
   }
 
@@ -74,8 +88,8 @@ private static List codeGenerationSteps() {
         // CodeGen
         new ApplicationSettingsGenerationStep(),
         new DesignerModelGenerationStep(),
-        // JAVA
         new ValueObjectGenerationStep(),
+        // JAVA
         new ModelGenerationStep(),
         new DataObjectGenerationStep(),
         new ProjectionGenerationStep(),
diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java
index 5c6a1889..b2acdbea 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/ModelProcessingResource.java
@@ -9,9 +9,6 @@
 
 import io.vlingo.xoom.actors.Logger;
 import io.vlingo.xoom.actors.Stage;
-import io.vlingo.xoom.codegen.content.CodeElementFormatter;
-import io.vlingo.xoom.codegen.dialect.Dialect;
-import io.vlingo.xoom.codegen.dialect.ReservedWordsHandler;
 import io.vlingo.xoom.common.Completes;
 import io.vlingo.xoom.designer.ModelProcessingInformation;
 import io.vlingo.xoom.designer.ModelProcessingManager;
@@ -52,12 +49,6 @@ public ModelProcessingResource(final Stage stage) {
   }
 
   public Completes startGeneration(final DesignerModel model) {
-    final CodeElementFormatter codeElementFormatter =
-            CodeElementFormatter.with(Dialect.withName(model.platformSettings.lang.toUpperCase()),
-                    ReservedWordsHandler.usingSuffix("_"));
-
-    ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter);
-
     return modelProcessingManager.generate(model, modelProcessingInformation, logger).andThenTo(scene -> {
               final Response.Status responseStatus = scene.isFailed() ? InternalServerError : Ok;
               return Completes.withSuccess(Response.of(responseStatus, serialized(scene.report)));
diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
index 650b9390..de6251d6 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
@@ -52,7 +52,10 @@ private CodeGenerationContextMapper(final DesignerModel data,
     this.generationTarget = generationTarget;
     this.parameters = CodeGenerationParameters.from(DIALECT, Dialect.withName(data.platformSettings.lang.toUpperCase()));
     this.context = CodeGenerationContextFactory.build(logger, parameters);
-    this.formatter = ComponentRegistry.withName("defaultCodeFormatter");
+    if(Dialect.withName(data.platformSettings.lang.toUpperCase()).isJava())
+      this.formatter = ComponentRegistry.withName("defaultCodeFormatter");
+    else
+      this.formatter = ComponentRegistry.withName("cSharpCodeFormatter");
     this.logger = logger;
 
     mapAggregates();
@@ -243,6 +246,8 @@ private void mapInfrastructureSettings() {
                     data.deployment.kubernetesPod, data.deployment.producerExchangePort);
 
     parameters.add(APPLICATION_NAME, data.context.artifactId)
+            .add(SDK_VERSION, data.platformSettings.sdkVersion)
+            .add(VLINGO_VERSION, data.platformSettings.vlingoVersion)
             .add(USE_ANNOTATIONS, data.useAnnotations)
             .add(USE_AUTO_DISPATCH, data.useAutoDispatch)
             .add(GROUP_ID, data.context.groupId)
diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java
index 08eded55..7462d907 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java
@@ -1,13 +1,15 @@
 package io.vlingo.xoom.designer.infrastructure.restapi.data;
 
 public class PlatformSettingsData {
-public final String platform;
-public final String lang;
-public final String sdkVersion;
+  public final String platform;
+  public final String lang;
+  public final String sdkVersion;
+  public final String vlingoVersion;
 
-  public PlatformSettingsData(String platform, String lang, String sdkVersion) {
+  public PlatformSettingsData(String platform, String lang, String sdkVersion, String vlingoVersion) {
     this.platform = platform;
     this.lang = lang;
     this.sdkVersion = sdkVersion;
+    this.vlingoVersion = vlingoVersion;
   }
 }
diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java
index 1d50f510..ca060dd8 100644
--- a/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java
@@ -19,7 +19,7 @@ public class CodeGenerationParameterValidationStepTest {
 
   @Test()
   public void testThatJavaParametersAreValidated() {
-    final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "1.8");
+    final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "1.8", "1.0.0");
     final CodeElementFormatter codeElementFormatter =
             CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_"));
 
@@ -38,11 +38,11 @@ public void testThatJavaParametersAreValidated() {
 
   @Test()
   public void testThatCsharpParametersAreValidated() {
-    final PlatformSettingsData platform = new PlatformSettingsData(".NET", "C_SHARP", "net6.0");
+    final PlatformSettingsData platform = new PlatformSettingsData(".NET", "C_SHARP", "net6.0", "1.0.0");
     final CodeElementFormatter codeElementFormatter =
         CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_"));
 
-    ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter);
+    ComponentRegistry.register("cSharpCodeFormatter", codeElementFormatter);
 
     final DesignerModel data =
         new DesignerModel(platform, contextSettingsData(), modelSettingsData(),
diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java
index 168ac406..8dd2139e 100644
--- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java
@@ -30,7 +30,7 @@ public class CodeGenerationContextMapperTest {
 
   @Test
   public void testThatJavaTaskExecutionContextIsMapped() {
-    final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "1.8");
+    final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "1.8", "1.0.0");
     final CodeElementFormatter codeElementFormatter =
             CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_"));
 
@@ -51,11 +51,11 @@ public void testThatJavaTaskExecutionContextIsMapped() {
 
   @Test
   public void testThatCsharpTaskExecutionContextIsMapped() {
-    final PlatformSettingsData platform = new PlatformSettingsData(".NET", "C_SHARP", "net6.0");
+    final PlatformSettingsData platform = new PlatformSettingsData(".NET", "C_SHARP", "net6.0", "1.0.0");
     final CodeElementFormatter codeElementFormatter =
         CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_"));
 
-    ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter);
+    ComponentRegistry.register("cSharpCodeFormatter", codeElementFormatter);
 
     // For now c# model support only platform and context settings
     final DesignerModel data =
@@ -83,7 +83,8 @@ private void assertStructuralOptions(final CodeGenerationParameters codeGenerati
             "  \"platformSettings\": {\n" +
             "    \"platform\": \"JVM\",\n" +
             "    \"lang\": \"Java\",\n" +
-            "    \"sdkVersion\": \"1.8\"\n" +
+            "    \"sdkVersion\": \"1.8\",\n" +
+            "    \"vlingoVersion\": \"1.0.0\"\n" +
             "  },\n" +
             "  \"context\": {\n" +
             "    \"groupId\": \"io.vlingo\",\n" +
@@ -103,7 +104,8 @@ private void assertCsharpStructuralOptions(final CodeGenerationParameters codeGe
         "  \"platformSettings\": {\n" +
         "    \"platform\": \".NET\",\n" +
         "    \"lang\": \"C_SHARP\",\n" +
-        "    \"sdkVersion\": \"net6.0\"\n" +
+        "    \"sdkVersion\": \"net6.0\",\n" +
+        "    \"vlingoVersion\": \"1.0.0\"\n" +
         "  },\n" +
         "  \"context\": {\n" +
         "    \"groupId\": \"io.vlingo\",\n" +
diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java
index abc5409f..972d5a67 100644
--- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModelTest.java
@@ -37,7 +37,7 @@ public void testThatGenerationSettingsDataValidationFailsDueToRecursiveValueObje
   }
 
   private PlatformSettingsData platformSettingsData() {
-    return new PlatformSettingsData("JVM", "Java", "1.8");
+    return new PlatformSettingsData("JVM", "Java", "1.8", "1.0.0");
   }
 
   private ContextSettingsData contextSettingsData() {
diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java
index 67308aca..39261b6c 100644
--- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java
@@ -20,7 +20,7 @@ public class ProjectionGenerationReportTest {
   private static final String stacktraceLabel = "
**Stacktrace**:
";
   private static final String designerModelLabel = "
**Designer Model**:
";
   private static final String expectedExceptionMessage = "io.vlingo.xoom.codegen.CodeGenerationException: Unable to generate project";
-  private static final String expectedModelFirstNode = "{\"platformSettings\":{\"platform\":\"JVM\",\"lang\":\"Java\",\"sdkVersion\":\"1.8\"},\"context\":{\"groupId\":\"io.vlingo\",\"artifactId\":\"xoomapp\",\"artifactVersion\":\"1.0\",\"packageName\":\"io.vlingo.xoomapp\"}";
+  private static final String expectedModelFirstNode = "{\"platformSettings\":{\"platform\":\"JVM\",\"lang\":\"Java\",\"sdkVersion\":\"1.8\",\"vlingoVersion\":\"1.0.0\"},\"context\":{\"groupId\":\"io.vlingo\",\"artifactId\":\"xoomapp\",\"artifactVersion\":\"1.0\",\"packageName\":\"io.vlingo.xoomapp\"}";
   private static final String expectedAction = "**Action**: Project Generation";
 
   @Test
@@ -45,7 +45,7 @@ public void testThatCodeGenFailureReportIsCreated() {
   }
 
   private PlatformSettingsData platformSettingsData() {
-    return new PlatformSettingsData("JVM", "Java", "1.8");
+    return new PlatformSettingsData("JVM", "Java", "1.8", "1.0.0");
   }
 
   private ContextSettingsData contextSettingsData() {

From f13b74aec6fae8fefa138a8392f3f23544265675 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 14 Apr 2022 23:16:56 +0100
Subject: [PATCH 13/34] Update platform UI..

Signed-off-by: Hamza JGUERIM 
---
 src/main/frontend/src/routes/platform.svelte | 77 ++++++++++++++++++--
 1 file changed, 69 insertions(+), 8 deletions(-)

diff --git a/src/main/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte
index 58f029de..6fa4877b 100644
--- a/src/main/frontend/src/routes/platform.svelte
+++ b/src/main/frontend/src/routes/platform.svelte
@@ -9,11 +9,31 @@
 			options: [
 				{
 					name: 'Java',
+					value: 'Java',
 					disabled: false,
+          sdkVersions: [
+            {
+              name: "JDK 8",
+              value: "1.8"
+            },
+            {
+              name: "JDK 10",
+              value: "10"
+            }
+          ],
+           vlingoVersions: [
+             {
+               name: "1.9.3 (Stable)",
+               value: "1.9.3"
+             }
+           ]
 				},
 				{
 					name: 'Kotlin',
-					disabled: true
+					value: 'Kotlin',
+					disabled: true,
+          sdkVersions: [],
+          vlingoVersions: []
 				}
 			],
 			default: 'Java',
@@ -23,11 +43,27 @@
 			options: [
 				{
 					name: 'C#',
-					disabled: false
+					value: 'C_SHARP',
+					disabled: false,
+					sdkVersions: [
+						{
+							name: "Net 6.0",
+							value: "net6.0"
+						}
+					],
+          vlingoVersions: [
+            {
+              name: "1.9.3 (Stable)",
+              value: "1.9.3"
+            }
+          ]
 				},
 				{
 					name: 'F#',
-					disabled: true
+					value: 'F_SHARP',
+					disabled: true,
+          sdkVersions: [],
+          vlingoVersions: []
 				}
 			],
 			default: 'C#'
@@ -36,6 +72,8 @@
 
 	let value = $settings.platformSettings && $settings.platformSettings.platform === ".NET";
   let lang = $settings.platformSettings && $settings.platformSettings.lang;
+  let sdkVersion = $settings.platformSettings && $settings.platformSettings.sdkVersion;
+  let vlingoVersion = $settings.platformSettings && $settings.platformSettings.vlingoVersion;
 	let options = platforms.reduce((acc, cur) => {
 		if ($settings.platformSettings && $settings.platformSettings.platform === cur.name) acc = [...cur.options]
 		return acc;
@@ -43,7 +81,9 @@
 
 	$: $settings.platformSettings = {
 		platform: value ? '.NET' : 'JVM',
-		lang
+		lang,
+		sdkVersion,
+		vlingoVersion
 	};
 
 	function updateOptions() {
@@ -51,7 +91,7 @@
 		const platform = platforms.find(p => p.name === v)
 		if (platform) {
 			options = platform.options
-			lang = platform.options.some(o => o.name === lang) ? lang : platform.default 
+			lang = platform.options.some(o => o.value === lang) ? lang : platform.default
 		}
 	}
 
@@ -66,16 +106,37 @@
 
   
JVM - + + .NET
+
+ Language: {#each options as option (option)}
- {option.name} + {option.name}
+ {#if !option.disabled} +
+ SDK Version: + {#each option.sdkVersions as sdk (sdk)} +
+ {sdk.name}
+
+ {/each} +
+
+ VLINGO Version: + {#each option.vlingoVersions as vlingo (vlingo)} +
+ {vlingo.name}
+
+ {/each} +
+ {/if} {/each} +
From fb13293a58844ad9711df929b09106fd1d0e635c Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Fri, 15 Apr 2022 00:44:17 +0100 Subject: [PATCH 14/34] Fix query unit test generation Signed-off-by: Hamza JGUERIM --- .../java/unittest/queries/QueriesUnitTestGenerationStep.java | 3 ++- .../unittest/queries/QueriesUnitTestGenerationStepTest.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStep.java index 74f0d472..8c12ea29 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStep.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStep.java @@ -30,6 +30,7 @@ protected List buildTemplatesData(final CodeGenerationContext cont @Override public boolean shouldProcess(final CodeGenerationContext context) { - return context.parameterOf(Label.CQRS, Boolean::valueOf); + final String dialectName = context.parameters().retrieveValue(Label.DIALECT); + return !dialectName.isEmpty() && context.parameterOf(Label.CQRS, Boolean::valueOf); } } diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStepTest.java index def061eb..5dd000d5 100644 --- a/src/test/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStepTest.java +++ b/src/test/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStepTest.java @@ -54,7 +54,8 @@ public void testThatQueriesUnitTestAreGenerated() { @Test public void testThatQueriesUnitTestGenerationShouldProcess() { final CodeGenerationContext context = - CodeGenerationContext.with(CodeGenerationParameters.from(Label.CQRS, true)); + CodeGenerationContext.with(CodeGenerationParameters.from(Label.DIALECT, Dialect.JAVA) + .add(Label.CQRS, true)); Assertions.assertTrue(new QueriesUnitTestGenerationStep().shouldProcess(context)); } From e3a7bc1f4c271a0c7106d0040a5b275b582f60ad Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Fri, 15 Apr 2022 01:06:45 +0100 Subject: [PATCH 15/34] Fix code generation mapper Signed-off-by: Hamza JGUERIM --- .../restapi/data/CodeGenerationContextMapper.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java index de6251d6..fddb1053 100644 --- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java +++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java @@ -50,9 +50,11 @@ private CodeGenerationContextMapper(final DesignerModel data, final Logger logger) { this.data = data; this.generationTarget = generationTarget; - this.parameters = CodeGenerationParameters.from(DIALECT, Dialect.withName(data.platformSettings.lang.toUpperCase())); + final Dialect dialect = data.platformSettings != null ? + Dialect.withName(data.platformSettings.lang.toUpperCase()) : Dialect.findDefault(); + this.parameters = CodeGenerationParameters.from(DIALECT, dialect); this.context = CodeGenerationContextFactory.build(logger, parameters); - if(Dialect.withName(data.platformSettings.lang.toUpperCase()).isJava()) + if(dialect.isJava()) this.formatter = ComponentRegistry.withName("defaultCodeFormatter"); else this.formatter = ComponentRegistry.withName("cSharpCodeFormatter"); @@ -246,8 +248,6 @@ private void mapInfrastructureSettings() { data.deployment.kubernetesPod, data.deployment.producerExchangePort); parameters.add(APPLICATION_NAME, data.context.artifactId) - .add(SDK_VERSION, data.platformSettings.sdkVersion) - .add(VLINGO_VERSION, data.platformSettings.vlingoVersion) .add(USE_ANNOTATIONS, data.useAnnotations) .add(USE_AUTO_DISPATCH, data.useAutoDispatch) .add(GROUP_ID, data.context.groupId) @@ -262,6 +262,10 @@ private void mapInfrastructureSettings() { .add(TARGET_FOLDER, definitiveFolder.toString()) .add(DESIGNER_MODEL_JSON, DesignerModelFormatter.format(data)) .add(WEB_UI_DIALECT, data.generateUI != null && data.generateUI ? data.generateUIWith : ""); + if(data.platformSettings != null) + parameters + .add(SDK_VERSION, data.platformSettings.sdkVersion) + .add(VLINGO_VERSION, data.platformSettings.vlingoVersion); } } From 133f3cbd2ef469b61307d25914703f125ce25aa5 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Fri, 15 Apr 2022 15:59:45 +0100 Subject: [PATCH 16/34] Update platform UI.. Signed-off-by: Hamza JGUERIM --- src/main/frontend/src/routes/platform.svelte | 92 ++++++++++---------- 1 file changed, 45 insertions(+), 47 deletions(-) diff --git a/src/main/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte index 6fa4877b..fba8058e 100644 --- a/src/main/frontend/src/routes/platform.svelte +++ b/src/main/frontend/src/routes/platform.svelte @@ -11,22 +11,8 @@ name: 'Java', value: 'Java', disabled: false, - sdkVersions: [ - { - name: "JDK 8", - value: "1.8" - }, - { - name: "JDK 10", - value: "10" - } - ], - vlingoVersions: [ - { - name: "1.9.3 (Stable)", - value: "1.9.3" - } - ] + sdkVersions: [], + vlingoVersions: [] }, { name: 'Kotlin', @@ -71,31 +57,31 @@ ] let value = $settings.platformSettings && $settings.platformSettings.platform === ".NET"; - let lang = $settings.platformSettings && $settings.platformSettings.lang; - let sdkVersion = $settings.platformSettings && $settings.platformSettings.sdkVersion; - let vlingoVersion = $settings.platformSettings && $settings.platformSettings.vlingoVersion; + let platform = !$settings.platformSettings ? 'JVM' : $settings.platformSettings.platform; + let lang = !$settings.platformSettings ? 'Java' : $settings.platformSettings.lang; + let sdkVersion = !$settings.platformSettings ? "" : $settings.platformSettings.sdkVersion; + let vlingoVersion = !$settings.platformSettings ? "" : $settings.platformSettings.vlingoVersion; let options = platforms.reduce((acc, cur) => { if ($settings.platformSettings && $settings.platformSettings.platform === cur.name) acc = [...cur.options] return acc; }, []); - $: $settings.platformSettings = { - platform: value ? '.NET' : 'JVM', - lang, - sdkVersion, - vlingoVersion - }; - function updateOptions() { const v = value ? '.NET' : 'JVM'; - const platform = platforms.find(p => p.name === v) - if (platform) { - options = platform.options - lang = platform.options.some(o => o.value === lang) ? lang : platform.default + const selectedPlatform = platforms.find(p => p.name === v) + if (selectedPlatform) { + options = selectedPlatform.options + lang = selectedPlatform.options.some(o => o.value === lang) ? lang : selectedPlatform.default } + $settings.platformSettings = { + platform, + lang, + sdkVersion, + vlingoVersion + }; } - $: value, updateOptions() + $: value || lang, updateOptions() @@ -111,30 +97,42 @@
-
+
Language: +
+ {#each options as option (option)} +
+ {option.name} +
+ {/each} +
{#each options as option (option)} -
- {option.name} -
{#if !option.disabled} -
+ {#if option.sdkVersions.length > 0} +
SDK Version: - {#each option.sdkVersions as sdk (sdk)} -
- {sdk.name}
-
- {/each} +
+ {#each option.sdkVersions as sdk (sdk)} +
+ {sdk.name}
+
+ {/each} +
-
+ {/if} + {#if option.vlingoVersions.length > 0} +
VLINGO Version: - {#each option.vlingoVersions as vlingo (vlingo)} -
- {vlingo.name}
-
- {/each} +
+ {#each option.vlingoVersions as vlingo (vlingo)} +
+ {vlingo.name}
+
+ {/each} +
{/if} + {/if} {/each}
From b455a794a8688da926d9a5fe386c817f402526a6 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Fri, 15 Apr 2022 19:27:57 +0100 Subject: [PATCH 17/34] Formatting Signed-off-by: Hamza JGUERIM --- src/main/frontend/src/routes/platform.svelte | 219 +++++++++--------- .../vlingo/xoom/designer/Configuration.java | 2 +- 2 files changed, 111 insertions(+), 110 deletions(-) diff --git a/src/main/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte index fba8058e..741275d1 100644 --- a/src/main/frontend/src/routes/platform.svelte +++ b/src/main/frontend/src/routes/platform.svelte @@ -1,139 +1,140 @@ - Context + Context
JVM - + .NET
- Language: -
- {#each options as option (option)} -
- {option.name} -
- {/each} + Language: +
+ {#each options as option (option)} +
+ {option.name} +
+ {/each}
- {#each options as option (option)} - {#if !option.disabled} - {#if option.sdkVersions.length > 0} -
- SDK Version: -
- {#each option.sdkVersions as sdk (sdk)} -
- {sdk.name}
-
- {/each} -
-
- {/if} - {#if option.vlingoVersions.length > 0} -
- VLINGO Version: -
- {#each option.vlingoVersions as vlingo (vlingo)} -
- {vlingo.name}
-
- {/each} -
-
- {/if} - {/if} - {/each} + {#each options as option (option)} + {#if !option.disabled} + {#if option.sdkVersions.length > 0} +
+ SDK Version: +
+ {#each option.sdkVersions as sdk (sdk)} +
+ {sdk.name} +
+ {/each} +
+
+ {/if} + {#if option.vlingoVersions.length > 0} +
+ VLINGO Version: +
+ {#each option.vlingoVersions as vlingo (vlingo)} +
+ {vlingo.name} +
+ {/each} +
+
+ {/if} + {/if} + {/each}
@@ -147,4 +148,4 @@ transform: translate(72px); } } - \ No newline at end of file + diff --git a/src/main/java/io/vlingo/xoom/designer/Configuration.java b/src/main/java/io/vlingo/xoom/designer/Configuration.java index f442d2c9..5065d134 100644 --- a/src/main/java/io/vlingo/xoom/designer/Configuration.java +++ b/src/main/java/io/vlingo/xoom/designer/Configuration.java @@ -88,8 +88,8 @@ private static List codeGenerationSteps() { // CodeGen new ApplicationSettingsGenerationStep(), new DesignerModelGenerationStep(), - new ValueObjectGenerationStep(), // JAVA + new ValueObjectGenerationStep(), new ModelGenerationStep(), new DataObjectGenerationStep(), new ProjectionGenerationStep(), From fbe0de63bd790a2f0dd1c3fc1536ca05270c79e4 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Fri, 15 Apr 2022 19:47:12 +0100 Subject: [PATCH 18/34] Update UI.. Signed-off-by: Hamza JGUERIM --- src/main/frontend/src/routes/platform.svelte | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte index 741275d1..a799fdc8 100644 --- a/src/main/frontend/src/routes/platform.svelte +++ b/src/main/frontend/src/routes/platform.svelte @@ -98,7 +98,7 @@
-
+
Language:
{#each options as option (option)} @@ -110,7 +110,7 @@ {#each options as option (option)} {#if !option.disabled} {#if option.sdkVersions.length > 0} -
+
SDK Version:
{#each option.sdkVersions as sdk (sdk)} @@ -122,7 +122,7 @@
{/if} {#if option.vlingoVersions.length > 0} -
+
VLINGO Version:
{#each option.vlingoVersions as vlingo (vlingo)} From 210a4528b4a0a5e84bdf0622233489f16da21fb5 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Sat, 16 Apr 2022 01:22:37 +0100 Subject: [PATCH 19/34] Update UI Signed-off-by: Hamza JGUERIM --- src/main/frontend/src/routes/platform.svelte | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte index a799fdc8..7757bec2 100644 --- a/src/main/frontend/src/routes/platform.svelte +++ b/src/main/frontend/src/routes/platform.svelte @@ -98,9 +98,9 @@
-
+
Language: -
+
{#each options as option (option)}
{option.name} @@ -110,9 +110,9 @@ {#each options as option (option)} {#if !option.disabled} {#if option.sdkVersions.length > 0} -
+
SDK Version: -
+
{#each option.sdkVersions as sdk (sdk)}
{sdk.name} @@ -122,9 +122,9 @@
{/if} {#if option.vlingoVersions.length > 0} -
+
VLINGO Version: -
+
{#each option.vlingoVersions as vlingo (vlingo)}
{vlingo.name} From b7401c696cd9f478251b8e4edfe8db0a5e7d4e70 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Wed, 20 Apr 2022 09:28:54 +0100 Subject: [PATCH 20/34] Add Context validation for .Net Platform Signed-off-by: Hamza JGUERIM --- src/main/frontend/src/routes/context.svelte | 57 ++++++-------------- src/main/frontend/src/routes/platform.svelte | 1 + src/main/frontend/src/stores/context.js | 3 +- src/main/frontend/src/stores/index.js | 9 +++- src/main/frontend/src/util/Validation.js | 5 +- src/main/frontend/src/validators.js | 6 ++- 6 files changed, 32 insertions(+), 49 deletions(-) diff --git a/src/main/frontend/src/routes/context.svelte b/src/main/frontend/src/routes/context.svelte index f20b589e..d75d77ec 100644 --- a/src/main/frontend/src/routes/context.svelte +++ b/src/main/frontend/src/routes/context.svelte @@ -1,59 +1,32 @@ Context - - - - +{#if isJvmPlatform} + Group Id Artifact Id Artifact Version Base Package Name +{:else if isDotNetPlatform} + + Solution Name + Project Name + Project Version + Base Namespace + +{/if} diff --git a/src/main/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte index 7757bec2..0ca4f9f2 100644 --- a/src/main/frontend/src/routes/platform.svelte +++ b/src/main/frontend/src/routes/platform.svelte @@ -73,6 +73,7 @@ if (selectedPlatform) { options = selectedPlatform.options; lang = selectedPlatform.options.some((o) => o.value === lang) ? lang : selectedPlatform.default; + platform = selectedPlatform.name; } $settings.platformSettings = { platform, diff --git a/src/main/frontend/src/stores/context.js b/src/main/frontend/src/stores/context.js index 0f8a6e85..6e1d1530 100644 --- a/src/main/frontend/src/stores/context.js +++ b/src/main/frontend/src/stores/context.js @@ -1 +1,2 @@ -export const defaultContext = {groupId: "", artifactId: "", artifactVersion: "", packageName: ""}; \ No newline at end of file +export const defaultContext = {groupId: "", artifactId: "", artifactVersion: "", packageName: ""}; +export const dotNetContext = {solutionName: "", projectName: "", projectVersion: "", namespace: ""}; \ No newline at end of file diff --git a/src/main/frontend/src/stores/index.js b/src/main/frontend/src/stores/index.js index 5ce70f93..c38db092 100644 --- a/src/main/frontend/src/stores/index.js +++ b/src/main/frontend/src/stores/index.js @@ -1,5 +1,5 @@ import {writable} from 'svelte/store'; -import {defaultContext} from './context'; +import {defaultContext, dotNetContext} from './context'; import {createLocalStore, isMobileStore} from './utils'; import {defaultPersistenceSettings} from './persistence'; import {defaultGenerationSettings, defaultSettings} from './generation'; @@ -91,10 +91,15 @@ function updateSettings(newSettings) { } function updateContext(currentSettings, updatedSettings) { - let updatedContext = updatedSettings.context ? updatedSettings.context : defaultContext; + let updatedContext = updatedSettings.context ? updatedSettings.context : resolveContext(currentSettings); currentSettings.context = { ...currentSettings.context, ...updatedContext }; } +const resolveContext = (settings) => { + return settings.paltformSettings && settings.paltformSettings === '.Net' ? dotNetContext : defaultContext; +} + + function updateAggregates(currentSettings, updatedSettings) { if(!updatedSettings.model || !updatedSettings.model.aggregateSettings || diff --git a/src/main/frontend/src/util/Validation.js b/src/main/frontend/src/util/Validation.js index 44471398..52be77f1 100644 --- a/src/main/frontend/src/util/Validation.js +++ b/src/main/frontend/src/util/Validation.js @@ -1,4 +1,4 @@ -import { artifactRule, packageRule, requireRule, versionRule } from '../validators'; +import {artifactRule, namespaceRule, packageRule, projectNameRule, versionRule} from '../validators'; export default { validateContext(settings) { @@ -15,6 +15,7 @@ export default { return aggregates && aggregates.length > 0; }, validatePlatformWithContext(settings, context) { - return !!settings.platformSettings && ((settings.platformSettings.platform === 'JVM' && !packageRule(context.groupId) && !artifactRule(context.artifactId) && !versionRule(context.artifactVersion) && !packageRule(context.packageName)) || (settings.platformSettings.platform === '.NET' && context.projectName && !!context.outputDirectory && !!context.solutionFile && !!context.projectPath && !!context.framework && !!context.sdk && !projectNameRule(context.solutionFile) && !projectNameRule(context.projectName) && !frameworkRule(context.framework))) + return settings && settings.context && !projectNameRule(context.solutionName) && !projectNameRule(context.projectName) + && !versionRule(settings.context.projectVersion) && !namespaceRule(settings.context.namespace); } } \ No newline at end of file diff --git a/src/main/frontend/src/validators.js b/src/main/frontend/src/validators.js index 079e14df..e17aa3c8 100644 --- a/src/main/frontend/src/validators.js +++ b/src/main/frontend/src/validators.js @@ -2,7 +2,8 @@ const errors = Object.freeze({ EMPTY: "may not be empty", VERSION: "Must be a semantic version number (major.minor.patch, e.g. 1.6.12)", CLASSNAME: "must be initial cap (e.g. SomethingDefined)", - NAMESPACE: "Must be namespace syntax (e.g. com.example.demo)", + PACKAGE: "Must be package syntax (e.g. com.example.demo)", + NAMESPACE: "Must be namespace syntax (e.g. Com.Example.Demo)", ARTIFACT: "Must consist of lowercase letters and hyphens", FIELDNAME: "must follow java identifier pattern", ROUTEPATH: "Must follow route path pattern", @@ -55,7 +56,8 @@ const frameworks = [ export const requireRule = (value) => !!value ? undefined : errors.EMPTY; export const versionRule = (value) => /^\d+\.\d+\.\d+$/.test(value) ? undefined : errors.VERSION; -export const packageRule = (value) => /^[a-z]+(\.[a-zA-Z_]([a-zA-Z_$#\d])*)+$/.test(value) ? undefined : errors.NAMESPACE; +export const packageRule = (value) => /^[a-z]+(\.[a-zA-Z_]([a-zA-Z_$#\d])*)+$/.test(value) ? undefined : errors.PACKAGE; +export const namespaceRule = (value) => /^[A-Za-z]+(\.[a-zA-Z_]([a-zA-Z_$#\d])*)+$/.test(value) ? undefined : errors.NAMESPACE; export const artifactRule = (value) => /^[a-z-]+$/.test(value) ? undefined : errors.ARTIFACT; export const classNameRule = (value) => /^[A-Z]+[A-Za-z]*$/.test(value) ? undefined : errors.CLASSNAME; export const identifierRule = (value) => /^[a-zA-Z_$][a-zA-Z_$0-9]*$/.test(value) ? undefined : errors.FIELDNAME; From 5bcc9822160c6aab53e3999ca94df621e5725253 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Wed, 20 Apr 2022 09:33:23 +0100 Subject: [PATCH 21/34] Fix platformSettings check Signed-off-by: Hamza JGUERIM --- src/main/frontend/src/stores/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/frontend/src/stores/index.js b/src/main/frontend/src/stores/index.js index c38db092..1038d9c5 100644 --- a/src/main/frontend/src/stores/index.js +++ b/src/main/frontend/src/stores/index.js @@ -96,7 +96,7 @@ function updateContext(currentSettings, updatedSettings) { } const resolveContext = (settings) => { - return settings.paltformSettings && settings.paltformSettings === '.Net' ? dotNetContext : defaultContext; + return settings.paltformSettings && settings.paltformSettings === '.NET' ? dotNetContext : defaultContext; } From a68c0e7ec929d9727e7f90dbafe316c36d52e316 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Wed, 20 Apr 2022 13:03:30 +0100 Subject: [PATCH 22/34] Fix resolve imports Signed-off-by: Hamza JGUERIM --- .../autodispatch/AutoDispatchHandlersMappingTemplateData.java | 1 + .../java/autodispatch/AutoDispatchMappingTemplateData.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchHandlersMappingTemplateData.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchHandlersMappingTemplateData.java index 92f014e8..caeb7a56 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchHandlersMappingTemplateData.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchHandlersMappingTemplateData.java @@ -114,6 +114,7 @@ private Set resolveImports(final CodeGenerationParameter aggregate, return Stream.of(aggregateRelatedImports, valueObjectImports) .flatMap(Set::stream) + .filter(Objects::nonNull) .sorted() .collect(Collectors.toCollection(LinkedHashSet::new)); } diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchMappingTemplateData.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchMappingTemplateData.java index 9f399e30..32484443 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchMappingTemplateData.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/autodispatch/AutoDispatchMappingTemplateData.java @@ -77,7 +77,7 @@ private Set resolveImports(final String aggregateName, } catch (final IllegalArgumentException exception) { return null; } - }).sorted().collect(Collectors.toCollection(LinkedHashSet::new)); + }).filter(Objects::nonNull).sorted().collect(Collectors.toCollection(LinkedHashSet::new)); } @SuppressWarnings("serial") From b2aad3cd5b1004da76454f21357328e239568312 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Thu, 21 Apr 2022 09:54:32 +0100 Subject: [PATCH 23/34] Use xoomVersion Signed-off-by: Hamza JGUERIM --- src/main/frontend/src/routes/platform.svelte | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte index 0ca4f9f2..25f51373 100644 --- a/src/main/frontend/src/routes/platform.svelte +++ b/src/main/frontend/src/routes/platform.svelte @@ -12,14 +12,14 @@ value: "Java", disabled: false, sdkVersions: [], - vlingoVersions: [], + xoomVersions: [], }, { name: "Kotlin", value: "Kotlin", disabled: true, sdkVersions: [], - vlingoVersions: [], + xoomVersions: [], }, ], default: "Java", @@ -37,7 +37,7 @@ value: "net6.0", }, ], - vlingoVersions: [ + xoomVersions: [ { name: "1.9.3 (Stable)", value: "1.9.3", @@ -49,7 +49,7 @@ value: "F_SHARP", disabled: true, sdkVersions: [], - vlingoVersions: [], + xoomVersions: [], }, ], default: "C#", @@ -60,7 +60,7 @@ let platform = !$settings.platformSettings ? "JVM" : $settings.platformSettings.platform; let lang = !$settings.platformSettings ? "Java" : $settings.platformSettings.lang; let sdkVersion = !$settings.platformSettings ? "" : $settings.platformSettings.sdkVersion; - let vlingoVersion = !$settings.platformSettings ? "" : $settings.platformSettings.vlingoVersion; + let xoomVersion = !$settings.platformSettings ? "" : $settings.platformSettings.xoomVersion; let options = platforms.reduce((acc, cur) => { if ( $settings.platformSettings && $settings.platformSettings.platform === cur.name) acc = [...cur.options]; @@ -79,7 +79,7 @@ platform, lang, sdkVersion, - vlingoVersion, + xoomVersion, }; } @@ -122,13 +122,13 @@
{/if} - {#if option.vlingoVersions.length > 0} + {#if option.xoomVersions.length > 0}
VLINGO Version:
- {#each option.vlingoVersions as vlingo (vlingo)} + {#each option.xoomVersions as vlingo (vlingo)}
- {vlingo.name} + {vlingo.name}
{/each}
From b4c30af281558d9571b13907ebd6b4867d84aafb Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Thu, 21 Apr 2022 10:04:41 +0100 Subject: [PATCH 24/34] Fix shouldProcess Signed-off-by: Hamza JGUERIM --- .../codegen/java/resource/RestResourceGenerationStep.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java index 35cbdc4f..0dda4824 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java @@ -25,7 +25,8 @@ protected List buildTemplatesData(final CodeGenerationContext cont @Override public boolean shouldProcess(final CodeGenerationContext context) { final String dialectName = context.parameters().retrieveValue(Label.DIALECT); - return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() && !context.hasParameter(Label.USE_AUTO_DISPATCH) || !context.parameterOf(Label.USE_AUTO_DISPATCH, Boolean::valueOf); + return !dialectName.isEmpty() && Dialect.withName(dialectName).isJava() && + (!context.hasParameter(Label.USE_AUTO_DISPATCH) || !context.parameterOf(Label.USE_AUTO_DISPATCH, Boolean::valueOf)); } } From 9f7e7aa0a21edfe129cb4084718c21975b27ab27 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Thu, 21 Apr 2022 10:07:55 +0100 Subject: [PATCH 25/34] Fix shouldProcess Signed-off-by: Hamza JGUERIM --- .../KubernetesManifestFileGenerationStep.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/deploymentsettings/KubernetesManifestFileGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/deploymentsettings/KubernetesManifestFileGenerationStep.java index 37fbfbe5..06c0b673 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/deploymentsettings/KubernetesManifestFileGenerationStep.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/deploymentsettings/KubernetesManifestFileGenerationStep.java @@ -35,7 +35,8 @@ protected List buildTemplatesData(final CodeGenerationContext cont @Override public boolean shouldProcess(final CodeGenerationContext context) { - return ((DeploymentSettings) context.parameterObjectOf(Label.DEPLOYMENT_SETTINGS)).useKubernetes; + final DeploymentSettings kubernetes = context.parameterObjectOf(Label.DEPLOYMENT_SETTINGS); + return kubernetes != null && kubernetes.useKubernetes; } } From b979af80ad166fef12058632fa28334d11ed41f3 Mon Sep 17 00:00:00 2001 From: Hamza JGUERIM Date: Thu, 21 Apr 2022 10:09:38 +0100 Subject: [PATCH 26/34] Add C# context validator Signed-off-by: Hamza JGUERIM --- ...CodeGenerationParameterValidationStep.java | 24 +++++++--- .../vlingo/xoom/designer/codegen/Label.java | 4 +- .../ApplicationSettingsGenerationStep.java | 2 +- .../CsharpApplicationSettingsData.java | 18 ++++---- .../codegen/java/TemplateParameter.java | 3 +- .../data/CodeGenerationContextMapper.java | 46 +++++++++++-------- .../restapi/data/ContextSettingsData.java | 9 ++++ .../restapi/data/PlatformSettingsData.java | 6 +-- .../resources/codegen/c_sharp/Project.ftl | 2 +- ...ApplicationSettingsGenerationStepTest.java | 14 +++--- .../data/CodeGenerationContextMapperTest.java | 16 +++---- .../ProjectionGenerationReportTest.java | 2 +- 12 files changed, 87 insertions(+), 59 deletions(-) diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStep.java index 732834c3..7dc94b5f 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStep.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStep.java @@ -8,6 +8,7 @@ import io.vlingo.xoom.codegen.CodeGenerationContext; import io.vlingo.xoom.codegen.CodeGenerationStep; +import io.vlingo.xoom.codegen.dialect.Dialect; import io.vlingo.xoom.codegen.parameter.CodeGenerationParameters; import io.vlingo.xoom.designer.codegen.java.DeploymentSettings; import io.vlingo.xoom.designer.codegen.java.projections.ProjectionType; @@ -23,6 +24,7 @@ public class CodeGenerationParameterValidationStep implements CodeGenerationStep //complete: PACKAGE_PATTERN, ARTIFACT_PATTERN, VERSION_PATTERN, IDENTIFIER_PATTERN //some of the others are maybe not complete private static final String PACKAGE_PATTERN = "^[a-z]+(.[a-zA-Z_]([a-zA-Z_$#\\d])*)+$"; + private static final String NAMESPACE_PATTERN = "^[A-Za-z]+(.[a-zA-Z_]([a-zA-Z_$#\\d])*)+$"; private static final String ARTIFACT_PATTERN = "^[a-z-]+$"; private static final String VERSION_PATTERN = "^\\d+.\\d+.\\d+$"; private static final String CLASSNAME_PATTERN = "^[A-Z]+[A-Za-z]*$"; @@ -34,11 +36,18 @@ public class CodeGenerationParameterValidationStep implements CodeGenerationStep public void process(final CodeGenerationContext context) { List errorStrings = new ArrayList<>(); final CodeGenerationParameters parameters = context.parameters(); - - if(!retrieve(parameters, Label.GROUP_ID).matches(PACKAGE_PATTERN)) errorStrings.add("GroupID must follow package pattern"); - if(!retrieve(parameters, Label.ARTIFACT_ID).matches(ARTIFACT_PATTERN)) errorStrings.add("ArtifactID must consist of lowercase letters and hyphens"); - if(!retrieve(parameters, Label.ARTIFACT_VERSION).matches(VERSION_PATTERN)) errorStrings.add("Version must be a semantic version"); - if(!retrieve(parameters, Label.PACKAGE).matches(PACKAGE_PATTERN)) errorStrings.add("Package must follow package pattern"); + + if(Dialect.withName(context.parameters().retrieveValue(Label.DIALECT)).isJava()) { + if(!retrieve(parameters, Label.GROUP_ID).matches(PACKAGE_PATTERN)) errorStrings.add("GroupID must follow package pattern"); + if(!retrieve(parameters, Label.ARTIFACT_ID).matches(ARTIFACT_PATTERN)) errorStrings.add("ArtifactID must consist of lowercase letters and hyphens"); + if(!retrieve(parameters, Label.ARTIFACT_VERSION).matches(VERSION_PATTERN)) errorStrings.add("Version must be a semantic version"); + if(!retrieve(parameters, Label.PACKAGE).matches(PACKAGE_PATTERN)) errorStrings.add("Package must follow package pattern"); + } else { + if(!retrieve(parameters, Label.GROUP_ID).matches(NAMESPACE_PATTERN)) errorStrings.add("SolutionName must follow solution pattern"); + if(!retrieve(parameters, Label.ARTIFACT_ID).matches(NAMESPACE_PATTERN)) errorStrings.add("ProjectName must consist of Upper and lowercase letters and hyphens"); + if(!retrieve(parameters, Label.ARTIFACT_VERSION).matches(VERSION_PATTERN)) errorStrings.add("Version must be a semantic version"); + if(!retrieve(parameters, Label.PACKAGE).matches(NAMESPACE_PATTERN)) errorStrings.add("Package must follow namespace pattern"); + } if(!areValueObjectNamesValid(parameters)) errorStrings.add("Value Object names must follow classname pattern"); if(!areValueObjectFieldsValid(parameters)) errorStrings.add("Value Object fields must follow fieldname pattern"); @@ -142,6 +151,8 @@ private Stream databases() { private boolean isDeploymentValid(final CodeGenerationParameters parameters) { final DeploymentSettings deploymentSettings = retrieveObject(parameters, Label.DEPLOYMENT_SETTINGS); boolean validImage = true; + if(deploymentSettings == null) + return validImage; //no break, fall through switch(deploymentSettings.type) { case KUBERNETES: validImage = validImage && @@ -157,7 +168,6 @@ private boolean isDeploymentValid(final CodeGenerationParameters parameters) { private boolean isTargetFolderValid(String targetFolder) { //TODO: ping the filesystem and only return true if the folder is available/usable - if(targetFolder.length()<2) return false; - return true; + return targetFolder.length() >= 2; } } diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/Label.java b/src/main/java/io/vlingo/xoom/designer/codegen/Label.java index 3c8ad717..34cb27e6 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/Label.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/Label.java @@ -84,9 +84,7 @@ public enum Label implements ParameterLabel { AGGREGATE_STATE("aggregateState"), VALUE_OBJECT_FIELD("valueObjectField"), UI_TYPE("uiType"), - SDK_VERSION("sdkVersion"), - VLINGO_VERSION("vlingoVersion"); - + SDK_VERSION("sdkVersion"); @SuppressWarnings("unused") private final String key; diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java index 0793cc2a..b918a0c6 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java @@ -41,6 +41,6 @@ protected Dialect resolveDialect(CodeGenerationContext context) { } private String dialectNameFrom(CodeGenerationContext context) { - return context.parameters().retrieveValue(Label.DIALECT); + return context.parameterOf(Label.DIALECT); } } diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java index 75373800..b11e43a7 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java @@ -22,36 +22,36 @@ public CsharpApplicationSettingsData(CodeGenerationContext context) { @Override List projectSettings() { - final String appName = context.parameters().retrieveValue(Label.APPLICATION_NAME); + final String solutionName = context.parameters().retrieveValue(Label.GROUP_ID); + final String projectName = context.parameters().retrieveValue(Label.ARTIFACT_ID); final String sdkVersion = context.parameters().retrieveValue(Label.SDK_VERSION); - final String vlingoVersion = context.parameters().retrieveValue(Label.VLINGO_VERSION); + final String xoomVersion = context.parameters().retrieveValue(Label.XOOM_VERSION); final TemplateData solutionSettings = BasicTemplateData.of(CsharpTemplateStandard.SOLUTION_SETTINGS, - namespaceFrom(TemplateParameter.APPLICATION_NAME)); + TemplateParameters.with(TemplateParameter.APPLICATION_NAME, solutionName)); final TemplateData projectSettings = BasicTemplateData.of(CsharpTemplateStandard.PROJECT_SETTINGS, namespaceFrom(TemplateParameter.APPLICATION_NAME) - .and(TemplateParameter.PACKAGE_NAME, appName) + .and(TemplateParameter.PACKAGE_NAME, projectName) .and(TemplateParameter.SDK_Version, sdkVersion) - .and(TemplateParameter.VLINGO_VERSION, vlingoVersion)); + .and(TemplateParameter.XOOM_VERSION, xoomVersion)); return Arrays.asList(solutionSettings, projectSettings); } @Override TemplateData actorSettings() { - return BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS, namespaceFrom(TemplateParameter.PACKAGE_NAME)); } private TemplateParameters namespaceFrom(TemplateParameter packageName) { - final String appName = context.parameters().retrieveValue(Label.APPLICATION_NAME); - return TemplateParameters.with(packageName, appName); + final String projectName = context.parameters().retrieveValue(Label.ARTIFACT_ID); + return TemplateParameters.with(packageName, projectName); } @Override TemplateData readmeFile() { - final String appName = context.parameters().retrieveValue(Label.APPLICATION_NAME); + final String appName = context.parameters().retrieveValue(Label.GROUP_ID); final TemplateParameters templateParameters = TemplateParameters.with(TemplateParameter.README_FILE, true).and(TemplateParameter.PACKAGE_NAME, appName); diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java index ef530a60..44779cef 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java @@ -176,8 +176,7 @@ public enum TemplateParameter implements ParameterKey { QUERY_BY_ID_HANDLER_TYPE("queryByIdHandlerType"), QUERY_ALL_HANDLER_TYPE("queryAllHandlerType"), QUERY_ALL_COMPOSITE_ID_TYPE("queryAllCompositeIdType"), - SDK_Version("sdkVersion"), - VLINGO_VERSION("vlingoVersion"); + SDK_Version("sdkVersion"); public final String key; diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java index 36958c2e..818e3552 100644 --- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java +++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java @@ -247,25 +247,35 @@ private void mapInfrastructureSettings() { data.deployment.dockerImage, data.deployment.kubernetesImage, data.deployment.kubernetesPod, data.deployment.producerExchangePort); - parameters.add(APPLICATION_NAME, data.context.artifactId) - .add(USE_ANNOTATIONS, data.useAnnotations) - .add(USE_AUTO_DISPATCH, data.useAutoDispatch) - .add(GROUP_ID, data.context.groupId) - .add(ARTIFACT_ID, data.context.artifactId) - .add(ARTIFACT_VERSION, data.context.artifactVersion) - .add(PACKAGE, formatter.rectifyPackageSyntax(data.context.packageName)) - .add(XOOM_VERSION, Configuration.resolveDefaultXoomVersion()) - .add(DEPLOYMENT_SETTINGS, deploymentSettings) - .add(CLUSTER_SETTINGS, clusterSettings) - .add(TURBO_SETTINGS, turboSettings) - .add(SCHEMATA_SETTINGS, schemataSettings) - .add(TARGET_FOLDER, definitiveFolder.toString()) - .add(DESIGNER_MODEL_JSON, DesignerModelFormatter.format(data)) - .add(WEB_UI_DIALECT, data.generateUI != null && data.generateUI ? data.generateUIWith : ""); - if(data.platformSettings != null) + final Dialect dialect = data.platformSettings == null ? Dialect.findDefault() : Dialect.withName(data.platformSettings.lang); + + parameters + .add(DESIGNER_MODEL_JSON, DesignerModelFormatter.format(dialect, data)) + .add(TARGET_FOLDER, definitiveFolder.toString()); + + if(dialect.isJava()) + parameters.add(APPLICATION_NAME, data.context.artifactId) + .add(USE_ANNOTATIONS, data.useAnnotations) + .add(USE_AUTO_DISPATCH, data.useAutoDispatch) + .add(GROUP_ID, data.context.groupId) + .add(ARTIFACT_ID, data.context.artifactId) + .add(ARTIFACT_VERSION, data.context.artifactVersion) + .add(PACKAGE, formatter.rectifyPackageSyntax(data.context.packageName)) + .add(XOOM_VERSION, Configuration.resolveDefaultXoomVersion()) + .add(DEPLOYMENT_SETTINGS, deploymentSettings) + .add(CLUSTER_SETTINGS, clusterSettings) + .add(TURBO_SETTINGS, turboSettings) + .add(SCHEMATA_SETTINGS, schemataSettings) + .add(WEB_UI_DIALECT, data.generateUI != null && data.generateUI ? data.generateUIWith : ""); + else parameters - .add(SDK_VERSION, data.platformSettings.sdkVersion) - .add(VLINGO_VERSION, data.platformSettings.vlingoVersion); + .add(APPLICATION_NAME, data.context.solutionName) + .add(GROUP_ID, data.context.solutionName) + .add(ARTIFACT_ID, data.context.projectName) + .add(ARTIFACT_VERSION, data.context.projectVersion) + .add(PACKAGE, formatter.rectifyPackageSyntax(data.context.namespace)) + .add(SDK_VERSION, data.platformSettings.sdkVersion) + .add(XOOM_VERSION, data.platformSettings.xoomVersion); } } diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/ContextSettingsData.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/ContextSettingsData.java index 4749afb7..1be07d58 100644 --- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/ContextSettingsData.java +++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/ContextSettingsData.java @@ -16,6 +16,10 @@ public class ContextSettingsData { public final String artifactVersion; public final String packageName; + public final String solutionName; + public final String projectName; + public final String projectVersion; + public final String namespace; public ContextSettingsData(final String groupId, final String artifactId, final String artifactVersion, @@ -24,6 +28,11 @@ public ContextSettingsData(final String groupId, this.artifactId = artifactId; this.artifactVersion = artifactVersion; this.packageName = packageName; + + this.solutionName = groupId; + this.projectName = artifactId; + this.projectVersion = artifactVersion; + this.namespace = packageName; } public List validate(List errorStrings) { diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java index 7462d907..0b0c5694 100644 --- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java +++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java @@ -4,12 +4,12 @@ public class PlatformSettingsData { public final String platform; public final String lang; public final String sdkVersion; - public final String vlingoVersion; + public final String xoomVersion; - public PlatformSettingsData(String platform, String lang, String sdkVersion, String vlingoVersion) { + public PlatformSettingsData(String platform, String lang, String sdkVersion, String xoomVersion) { this.platform = platform; this.lang = lang; this.sdkVersion = sdkVersion; - this.vlingoVersion = vlingoVersion; + this.xoomVersion = xoomVersion; } } diff --git a/src/main/resources/codegen/c_sharp/Project.ftl b/src/main/resources/codegen/c_sharp/Project.ftl index 24ee1a3e..289dad57 100644 --- a/src/main/resources/codegen/c_sharp/Project.ftl +++ b/src/main/resources/codegen/c_sharp/Project.ftl @@ -8,6 +8,6 @@ - + diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java index 82d753f7..66958fbf 100644 --- a/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java +++ b/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java @@ -85,15 +85,17 @@ public void testThatDefaultTurboSettingsAreGenerated() { @Test public void testThatCsharpSolutionIsGenerated() { final String namespace = "Io.Vlingo.Xoomapp"; - final String appName = "Xoomapp"; + final String solutionName = "Xoomapp"; + final String projectName = "Xoomapp"; final String sdkVersion = "net6.0"; - final String vlingoVersion = "1.9.3"; + final String xoomVersion = "1.9.3"; final CodeGenerationParameters parameters = CodeGenerationParameters.from(CodeGenerationParameter.of(Label.PACKAGE, namespace), - CodeGenerationParameter.of(Label.APPLICATION_NAME, appName), - CodeGenerationParameter.of(Label.SDK_VERSION, sdkVersion), - CodeGenerationParameter.of(Label.VLINGO_VERSION, vlingoVersion), - CodeGenerationParameter.of(Label.DIALECT, Dialect.C_SHARP)); + CodeGenerationParameter.of(Label.GROUP_ID, solutionName), + CodeGenerationParameter.of(Label.ARTIFACT_ID, projectName), + CodeGenerationParameter.of(Label.SDK_VERSION, sdkVersion), + CodeGenerationParameter.of(Label.XOOM_VERSION, xoomVersion), + CodeGenerationParameter.of(Label.DIALECT, Dialect.C_SHARP)); final CodeGenerationContext context = CodeGenerationContext.with(parameters); diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java index 301d9b56..7dc8bc95 100644 --- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java +++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapperTest.java @@ -30,7 +30,7 @@ public class CodeGenerationContextMapperTest { @Test public void testThatJavaTaskExecutionContextIsMapped() { - final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "1.8", "1.0.0"); + final PlatformSettingsData platform = new PlatformSettingsData("JVM", "Java", "1.8", "{{XOOM_VERSION}}"); final CodeElementFormatter codeElementFormatter = CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_")); @@ -51,7 +51,7 @@ public void testThatJavaTaskExecutionContextIsMapped() { @Test public void testThatCsharpTaskExecutionContextIsMapped() { - final PlatformSettingsData platform = new PlatformSettingsData(".NET", "C_SHARP", "net6.0", "1.0.0"); + final PlatformSettingsData platform = new PlatformSettingsData(".NET", "C_SHARP", "net6.0", "{{XOOM_VERSION}}"); final CodeElementFormatter codeElementFormatter = CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_")); @@ -84,7 +84,7 @@ private void assertStructuralOptions(final CodeGenerationParameters codeGenerati " \"platform\": \"JVM\",\n" + " \"lang\": \"Java\",\n" + " \"sdkVersion\": \"1.8\",\n" + - " \"vlingoVersion\": \"1.0.0\"\n" + + " \"xoomVersion\": \"{{XOOM_VERSION}}\"\n" + " },\n" + " \"context\": {\n" + " \"groupId\": \"io.vlingo\",\n" + @@ -105,13 +105,13 @@ private void assertCsharpStructuralOptions(final CodeGenerationParameters codeGe " \"platform\": \".NET\",\n" + " \"lang\": \"C_SHARP\",\n" + " \"sdkVersion\": \"net6.0\",\n" + - " \"vlingoVersion\": \"1.0.0\"\n" + + " \"xoomVersion\": \"{{XOOM_VERSION}}\"\n" + " },\n" + " \"context\": {\n" + - " \"groupId\": \"io.vlingo\",\n" + - " \"artifactId\": \"xoomapp\",\n" + - " \"artifactVersion\": \"1.0\",\n" + - " \"packageName\": \"io.vlingo.xoomapp\"\n" + + " \"solutionName\": \"io.vlingo\",\n" + + " \"projectName\": \"xoomapp\",\n" + + " \"projectVersion\": \"1.0\",\n" + + " \"namespace\": \"io.vlingo.xoomapp\"\n" + " },\n")); } diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java index c6606b09..fdc6af8a 100644 --- a/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java +++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/restapi/report/ProjectionGenerationReportTest.java @@ -20,7 +20,7 @@ public class ProjectionGenerationReportTest { private static final String stacktraceLabel = "
**Stacktrace**:
";
   private static final String designerModelLabel = "
**Designer Model**:
";
   private static final String expectedExceptionMessage = "io.vlingo.xoom.codegen.CodeGenerationException: Unable to generate project";
-  private static final String expectedModelFirstNode = "{\"platformSettings\":{\"platform\":\"JVM\",\"lang\":\"Java\",\"sdkVersion\":\"1.8\",\"vlingoVersion\":\"1.0.0\"},\"context\":{\"groupId\":\"io.vlingo\",\"artifactId\":\"xoomapp\",\"artifactVersion\":\"1.0\",\"packageName\":\"io.vlingo.xoomapp\"}";
+  private static final String expectedModelFirstNode = "{\"platformSettings\":{\"platform\":\"JVM\",\"lang\":\"Java\",\"sdkVersion\":\"1.8\",\"xoomVersion\":\"1.0.0\"},\"context\":{\"groupId\":\"io.vlingo\",\"artifactId\":\"xoomapp\",\"artifactVersion\":\"1.0\",\"packageName\":\"io.vlingo.xoomapp\",\"solutionName\":\"io.vlingo\",\"projectName\":\"xoomapp\",\"projectVersion\":\"1.0\",\"namespace\":\"io.vlingo.xoomapp\"}";
   private static final String expectedAction = "**Action**: Project Generation";
 
   @Test

From dc652abc82a1e7f3d2bee547d9e3374cf1c75585 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 21 Apr 2022 10:18:17 +0100
Subject: [PATCH 27/34] Update designer model formatter

Signed-off-by: Hamza JGUERIM 
---
 .../designermodel/DesignerModelFormatter.java | 46 +++++++++++++++++++
 .../DesignerModelGenerationStep.java          |  4 +-
 .../DesignerModelTemplateData.java            |  5 +-
 .../java/designer-model.text                  |  8 +++-
 4 files changed, 58 insertions(+), 5 deletions(-)

diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelFormatter.java b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelFormatter.java
index dd6694a0..1a822d23 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelFormatter.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelFormatter.java
@@ -6,8 +6,11 @@
 // one at https://mozilla.org/MPL/2.0/.
 package io.vlingo.xoom.designer.codegen.designermodel;
 
+import com.google.gson.ExclusionStrategy;
+import com.google.gson.FieldAttributes;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonParser;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.common.serialization.JsonSerialization;
 import io.vlingo.xoom.designer.infrastructure.restapi.data.DesignerModel;
 
@@ -17,9 +20,52 @@ public static String format(final String designerModel) {
     return new GsonBuilder().setPrettyPrinting().create().toJson(JsonParser.parseString(designerModel));
   }
 
+  public static String format(final String designerModel, final ExclusionStrategy strategy) {
+    return new GsonBuilder().addSerializationExclusionStrategy(strategy)
+        .setPrettyPrinting().create().toJson(JsonSerialization.deserialized(designerModel, DesignerModel.class));
+  }
+
   public static String format(final DesignerModel designerModel) {
     return format(JsonSerialization.serialized(designerModel));
   }
+  public static String format(final Dialect dialect, final DesignerModel designerModel) {
+    return format(dialect, JsonSerialization.serialized(designerModel));
+  }
 
+  public static String format(final Dialect dialect, final String designerModel) {
+    ExclusionStrategy strategy = new ExclusionStrategy() {
+      @Override
+      public boolean shouldSkipField(FieldAttributes field) {
+        if (!dialect.isJava() && field.getName().equals("groupId")) {
+          return true;
+        }
+        if (!dialect.isJava() && field.getName().equals("artifactId")) {
+          return true;
+        }
+        if (!dialect.isJava() && field.getName().equals("artifactVersion")) {
+          return true;
+        }
+        if (!dialect.isJava() && field.getName().equals("packageName")) {
+          return true;
+        }
+        if (dialect.isJava() && field.getName().equals("solutionName")) {
+          return true;
+        }
+        if (dialect.isJava() && field.getName().equals("projectName")) {
+          return true;
+        }
+        if (dialect.isJava() && field.getName().equals("projectVersion")) {
+          return true;
+        }
+        return dialect.isJava() && field.getName().equals("namespace");
+      }
+
+      @Override
+      public boolean shouldSkipClass(Class clazz) {
+        return false;
+      }
+    };
+    return format(designerModel, strategy);
+  }
 }
 
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStep.java
index 582f4a8e..7c9d81ed 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStep.java
@@ -8,6 +8,7 @@
 package io.vlingo.xoom.designer.codegen.designermodel;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
 import io.vlingo.xoom.designer.codegen.Label;
@@ -21,7 +22,8 @@ public class DesignerModelGenerationStep extends TemplateProcessingStep {
   protected List buildTemplatesData(final CodeGenerationContext context) {
     final String appName = context.parameterOf(Label.APPLICATION_NAME);
     final String designerModel = context.parameterOf(Label.DESIGNER_MODEL_JSON);
-    return Arrays.asList(new DesignerModelTemplateData(appName, designerModel));
+    final Dialect dialect = context.parameterObjectOf(Label.DIALECT) == null ? Dialect.findDefault() : context.parameterObjectOf(Label.DIALECT);
+    return Arrays.asList(new DesignerModelTemplateData(dialect, appName, designerModel));
 
   }
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelTemplateData.java b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelTemplateData.java
index b36d56e0..ac55ea94 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelTemplateData.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelTemplateData.java
@@ -6,6 +6,7 @@
 // one at https://mozilla.org/MPL/2.0/.
 package io.vlingo.xoom.designer.codegen.designermodel;
 
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateParameters;
 import io.vlingo.xoom.codegen.template.TemplateStandard;
@@ -16,11 +17,11 @@ public class DesignerModelTemplateData extends TemplateData {
 
   private final TemplateParameters parameters;
 
-  public DesignerModelTemplateData(final String appName,
+  public DesignerModelTemplateData(final Dialect dialect, final String appName,
                                    final String designerModel) {
     this.parameters =
             TemplateParameters.with(TemplateParameter.DESIGNER_MODEL, true)
-                    .and(TemplateParameter.DESIGNER_MODEL_JSON, DesignerModelFormatter.format(designerModel))
+                    .and(TemplateParameter.DESIGNER_MODEL_JSON, DesignerModelFormatter.format(dialect, designerModel))
                     .and(TemplateParameter.APPLICATION_NAME, appName);
   }
 
diff --git a/src/test/resources/text-expectations/java/designer-model.text b/src/test/resources/text-expectations/java/designer-model.text
index 9bc4dd81..702b2dea 100644
--- a/src/test/resources/text-expectations/java/designer-model.text
+++ b/src/test/resources/text-expectations/java/designer-model.text
@@ -6,11 +6,15 @@
     "packageName": "io.vlingo.xoom-app"
   },
   "deployment": {
-    "clusterNodes": 3,
     "type": "NONE",
     "dockerImage": "xoom-app",
     "kubernetesImage": "vlingo/xoom-app",
-    "kubernetesPod": "xoom-app"
+    "kubernetesPod": "xoom-app",
+    "clusterTotalNodes": 0,
+    "clusterPort": 0,
+    "producerExchangePort": 0,
+    "httpServerPort": 0,
+    "pullSchemas": false
   },
   "projectDirectory": "/projects/",
   "useAnnotations": false,

From 90f209d8f220ba1ff11ab1f90433f6f95e698508 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 21 Apr 2022 15:23:47 +0100
Subject: [PATCH 28/34] Fix generation validation

Signed-off-by: Hamza JGUERIM 
---
 src/main/frontend/src/stores/index.js | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/main/frontend/src/stores/index.js b/src/main/frontend/src/stores/index.js
index 1038d9c5..3ce82e33 100644
--- a/src/main/frontend/src/stores/index.js
+++ b/src/main/frontend/src/stores/index.js
@@ -151,10 +151,19 @@ function updateGeneration(currentSettings, updatedSettings) {
 	currentSettings.projectDirectory = updatedSettings.projectDirectory;
 }
 
-export function isSettingsComplete(currentSettings) {
-	return currentSettings.context && currentSettings.context.groupId && currentSettings.context.artifactId &&
+const isContextSettingsComplete = (currentSettings) => {
+	if(!currentSettings.platformSettings || currentSettings.platformSettings.platform === 'JVM')
+		return currentSettings.context.groupId && currentSettings.context.artifactId &&
 			currentSettings.context.packageName && currentSettings.context.artifactVersion &&
-			Validation.validateContext(currentSettings) && currentSettings.model &&
+			Validation.validateContext(currentSettings);
+	else
+		return currentSettings.context.solutionName && currentSettings.context.projectName &&
+			currentSettings.context.projectVersion && currentSettings.context.namespace &&
+			Validation.validatePlatformWithContext(currentSettings, currentSettings.context);
+}
+
+export function isSettingsComplete(currentSettings) {
+	return currentSettings.context && isContextSettingsComplete(currentSettings) && currentSettings.model &&
 			currentSettings.model.aggregateSettings && currentSettings.model.aggregateSettings.length > 0 &&
 			currentSettings.model.persistenceSettings && Validation.validateDeployment(currentSettings)
 			&& currentSettings.projectDirectory;

From b82c19c07d8c83143a0595f225ef57d514c8d34a Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 21 Apr 2022 15:40:25 +0100
Subject: [PATCH 29/34] Fix generation target directory

Signed-off-by: Hamza JGUERIM 
---
 src/main/frontend/src/routes/generation.svelte           | 5 ++++-
 .../restapi/data/CodeGenerationContextMapper.java        | 9 +++++----
 2 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/main/frontend/src/routes/generation.svelte b/src/main/frontend/src/routes/generation.svelte
index 6361a64e..e9ecfab8 100644
--- a/src/main/frontend/src/routes/generation.svelte
+++ b/src/main/frontend/src/routes/generation.svelte
@@ -173,7 +173,10 @@
   function buildProjectDirectory() {
     let context = $settings.context;
     if(context) {
-      return `${$settingsInfo.userHomePath}${$settingsInfo.pathSeparator}VLINGO-XOOM${$settingsInfo.pathSeparator}${context.groupId}${$settingsInfo.pathSeparator}${context.artifactId}${Number($projectGenerationIndex)}`;
+      if(!$settings.platformSettings || $settings.platformSettings.platform === 'JVM')
+        return `${$settingsInfo.userHomePath}${$settingsInfo.pathSeparator}VLINGO-XOOM${$settingsInfo.pathSeparator}${context.groupId}${$settingsInfo.pathSeparator}${context.artifactId}${Number($projectGenerationIndex)}`;
+      else
+        return `${$settingsInfo.userHomePath}${$settingsInfo.pathSeparator}VLINGO-XOOM${$settingsInfo.pathSeparator}${context.solutionName}${$settingsInfo.pathSeparator}${context.projectName}${Number($projectGenerationIndex)}`;
     }
     return `${$settingsInfo.userHomePath}${$settingsInfo.pathSeparator}VLINGO-XOOM${$settingsInfo.pathSeparator}`;
   }
diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
index 818e3552..80158a3a 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
@@ -239,16 +239,17 @@ private void mapInfrastructureSettings() {
     final SchemataSettings schemataSettings =
             SchemataSettings.with(data.schemata.host, data.schemata.port, Configuration.resolveSchemataServiceDNS());
 
-    final Path definitiveFolder =
-            generationTarget.definitiveFolderFor(context.generationId, data.context.artifactId, data.projectDirectory);
+    final Dialect dialect = data.platformSettings == null ? Dialect.findDefault() : Dialect.withName(data.platformSettings.lang);
+
+    final Path definitiveFolder = dialect.isJava() ?
+        generationTarget.definitiveFolderFor(context.generationId, data.context.artifactId, data.projectDirectory) :
+        generationTarget.definitiveFolderFor(context.generationId, data.context.solutionName, data.projectDirectory);
 
     final DeploymentSettings deploymentSettings =
             DeploymentSettings.with(DeploymentType.of(data.deployment.type),
                     data.deployment.dockerImage, data.deployment.kubernetesImage,
                     data.deployment.kubernetesPod, data.deployment.producerExchangePort);
 
-    final Dialect dialect = data.platformSettings == null ? Dialect.findDefault() : Dialect.withName(data.platformSettings.lang);
-
     parameters
         .add(DESIGNER_MODEL_JSON, DesignerModelFormatter.format(dialect, data))
         .add(TARGET_FOLDER, definitiveFolder.toString());

From 42e53a7b3cef49775e0be01b4796f53843f0672e Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 21 Apr 2022 15:42:43 +0100
Subject: [PATCH 30/34] Refactoring..

Signed-off-by: Hamza JGUERIM 
---
 .../restapi/data/CodeGenerationContextMapper.java            | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
index 80158a3a..5628f07c 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/CodeGenerationContextMapper.java
@@ -241,9 +241,8 @@ private void mapInfrastructureSettings() {
 
     final Dialect dialect = data.platformSettings == null ? Dialect.findDefault() : Dialect.withName(data.platformSettings.lang);
 
-    final Path definitiveFolder = dialect.isJava() ?
-        generationTarget.definitiveFolderFor(context.generationId, data.context.artifactId, data.projectDirectory) :
-        generationTarget.definitiveFolderFor(context.generationId, data.context.solutionName, data.projectDirectory);
+    final String artifactName = dialect.isJava() ? data.context.artifactId : data.context.solutionName;
+    final Path definitiveFolder =  generationTarget.definitiveFolderFor(context.generationId, artifactName, data.projectDirectory);
 
     final DeploymentSettings deploymentSettings =
             DeploymentSettings.with(DeploymentType.of(data.deployment.type),

From 1d81852273fbe69e13331ae330f6a7826255a1c5 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 21 Apr 2022 16:01:17 +0100
Subject: [PATCH 31/34] Fix browser launcher platform

Signed-off-by: Hamza JGUERIM 
---
 src/main/frontend/src/routes/platform.svelte                    | 2 +-
 .../designer/infrastructure/DesignerServerConfiguration.java    | 2 +-
 .../xoom/designer/infrastructure/BrowserLauncherTest.java       | 2 +-
 .../designer/infrastructure/InfrastructureResourcesTest.java    | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/main/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte
index 25f51373..4ee6c736 100644
--- a/src/main/frontend/src/routes/platform.svelte
+++ b/src/main/frontend/src/routes/platform.svelte
@@ -87,7 +87,7 @@
 
 
 
-  Context
+  Platform
 
 
 
diff --git a/src/main/java/io/vlingo/xoom/designer/infrastructure/DesignerServerConfiguration.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/DesignerServerConfiguration.java
index 0e440660..ad5c82ad 100644
--- a/src/main/java/io/vlingo/xoom/designer/infrastructure/DesignerServerConfiguration.java
+++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/DesignerServerConfiguration.java
@@ -29,7 +29,7 @@ static DesignerServerConfiguration on(final Integer serverPort) {
   private DesignerServerConfiguration(final Integer serverPort) {
     try {
       this.port = serverPort > 0 ? serverPort : DEFAULT_PORT;
-      this.userInterfaceURL = new URL(String.format("http://%s:%s/%s", DEFAULT_HOST, port, "context"));
+      this.userInterfaceURL = new URL(String.format("http://%s:%s/%s", DEFAULT_HOST, port, "platform"));
     } catch (final MalformedURLException e) {
       throw new IllegalStateException(e);
     }
diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/BrowserLauncherTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/BrowserLauncherTest.java
index f200aaae..bbf79e92 100644
--- a/src/test/java/io/vlingo/xoom/designer/infrastructure/BrowserLauncherTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/BrowserLauncherTest.java
@@ -7,7 +7,7 @@
 
 public class BrowserLauncherTest {
 
-  private static final String EXPECTED_URL = "http://localhost:19090/context";
+  private static final String EXPECTED_URL = "http://localhost:19090/platform";
 
   @Test
   public void testBrowserLaunchCommandResolution() {
diff --git a/src/test/java/io/vlingo/xoom/designer/infrastructure/InfrastructureResourcesTest.java b/src/test/java/io/vlingo/xoom/designer/infrastructure/InfrastructureResourcesTest.java
index 08814734..429b746a 100644
--- a/src/test/java/io/vlingo/xoom/designer/infrastructure/InfrastructureResourcesTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/infrastructure/InfrastructureResourcesTest.java
@@ -26,7 +26,7 @@ public void testInfraResourcesAreResolved() {
     Infrastructure.setupResources(HomeDirectory.fromEnvironment(), 19090);
     final DesignerServerConfiguration designerServerConfiguration = ComponentRegistry.withType(DesignerServerConfiguration.class);
     Assertions.assertEquals(19090, designerServerConfiguration.port());
-    Assertions.assertEquals("http://localhost:19090/context", designerServerConfiguration.resolveUserInterfaceURL().toString());
+    Assertions.assertEquals("http://localhost:19090/platform", designerServerConfiguration.resolveUserInterfaceURL().toString());
     Assertions.assertEquals(Paths.get(ROOT_FOLDER, "staging"), StagingFolder.path());
   }
 

From 398a67a1e52c97a36da4af0ed0f69b6f05ec79ac Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 21 Apr 2022 16:59:38 +0100
Subject: [PATCH 32/34] Fix solution generation data

Signed-off-by: Hamza JGUERIM 
---
 src/main/frontend/src/routes/platform.svelte                 | 2 +-
 .../applicationsettings/CsharpApplicationSettingsData.java   | 5 +++--
 .../vlingo/xoom/designer/codegen/java/TemplateParameter.java | 2 +-
 src/main/resources/codegen/c_sharp/Solution.ftl              | 2 +-
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/main/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte
index 4ee6c736..c2c6929d 100644
--- a/src/main/frontend/src/routes/platform.svelte
+++ b/src/main/frontend/src/routes/platform.svelte
@@ -83,7 +83,7 @@
     };
   }
 
-  $: value || lang, updateOptions();
+  $: value || (lang || sdkVersion || xoomVersion), updateOptions();
 
 
 
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
index b11e43a7..4dd3786d 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
@@ -28,12 +28,13 @@ List projectSettings() {
     final String xoomVersion = context.parameters().retrieveValue(Label.XOOM_VERSION);
 
     final TemplateData solutionSettings = BasicTemplateData.of(CsharpTemplateStandard.SOLUTION_SETTINGS,
-        TemplateParameters.with(TemplateParameter.APPLICATION_NAME, solutionName));
+        TemplateParameters.with(TemplateParameter.APPLICATION_NAME, solutionName)
+            .and(TemplateParameter.ARTIFACT_ID, projectName));
 
     final TemplateData projectSettings = BasicTemplateData.of(CsharpTemplateStandard.PROJECT_SETTINGS,
         namespaceFrom(TemplateParameter.APPLICATION_NAME)
             .and(TemplateParameter.PACKAGE_NAME, projectName)
-            .and(TemplateParameter.SDK_Version, sdkVersion)
+            .and(TemplateParameter.SDK_VERSION, sdkVersion)
             .and(TemplateParameter.XOOM_VERSION, xoomVersion));
 
     return Arrays.asList(solutionSettings, projectSettings);
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java
index 44779cef..02ac55e5 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java
@@ -176,7 +176,7 @@ public enum TemplateParameter implements ParameterKey {
   QUERY_BY_ID_HANDLER_TYPE("queryByIdHandlerType"),
   QUERY_ALL_HANDLER_TYPE("queryAllHandlerType"),
   QUERY_ALL_COMPOSITE_ID_TYPE("queryAllCompositeIdType"),
-  SDK_Version("sdkVersion");
+  SDK_VERSION("sdkVersion");
 
   public final String key;
 
diff --git a/src/main/resources/codegen/c_sharp/Solution.ftl b/src/main/resources/codegen/c_sharp/Solution.ftl
index 615cfcd1..0ba4fac6 100644
--- a/src/main/resources/codegen/c_sharp/Solution.ftl
+++ b/src/main/resources/codegen/c_sharp/Solution.ftl
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 16
 VisualStudioVersion = 16.0.30114.105
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "${appName}", "${appName}\${appName}.csproj", "{432CF1A8-D025-4F2F-91A9-5716BD1A2587}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "${appName}", "${artifactId}\${artifactId}.csproj", "{432CF1A8-D025-4F2F-91A9-5716BD1A2587}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution

From 680f54123d90aa286bfeb69a07976f6d5ced2067 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Thu, 21 Apr 2022 17:45:37 +0100
Subject: [PATCH 33/34] Fix shouldProcess queries test generation

Signed-off-by: Hamza JGUERIM 
---
 .../java/unittest/queries/QueriesUnitTestGenerationStep.java | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStep.java
index ac777c5f..7f17a5e9 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStep.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStep.java
@@ -7,6 +7,7 @@
 package io.vlingo.xoom.designer.codegen.java.unittest.queries;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
+import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
 import io.vlingo.xoom.codegen.template.TemplateData;
 import io.vlingo.xoom.codegen.template.TemplateProcessingStep;
@@ -30,7 +31,7 @@ protected List buildTemplatesData(final CodeGenerationContext cont
 
   @Override
   public boolean shouldProcess(final CodeGenerationContext context) {
-    final String dialectName = context.parameters().retrieveValue(Label.DIALECT);
-    return !dialectName.isEmpty() && context.parameterOf(Label.CQRS, Boolean::valueOf);
+    final Dialect dialect = context.parameterObjectOf(Label.DIALECT);
+    return (dialect == null || dialect.isJava()) && context.parameterOf(Label.CQRS, Boolean::valueOf);
   }
 }

From 7b2a9e0d0fea360e0b3bb3ac6b659ec16d6062b4 Mon Sep 17 00:00:00 2001
From: Hamza JGUERIM 
Date: Tue, 10 May 2022 04:50:12 +0100
Subject: [PATCH 34/34] Add Unit Test project generation and .NET solution
 structure file system

Signed-off-by: Hamza JGUERIM 
---
 .../codegen/RelativeSourcePathResolver.java   | 15 ++++-
 .../CsharpApplicationSettingsData.java        | 41 ++++++++-----
 .../csharp/CsharpTemplateStandard.java        | 16 +++--
 .../designer/codegen/csharp/Template.java     |  2 +
 .../codegen/c_sharp/ActorSettings.ftl         |  2 +-
 .../resources/codegen/c_sharp/Program.ftl     |  0
 .../resources/codegen/c_sharp/Project.ftl     |  7 +++
 src/main/resources/codegen/c_sharp/Readme.ftl |  2 +-
 .../resources/codegen/c_sharp/Solution.ftl    | 31 +++++++---
 .../codegen/c_sharp/UnitTestProject.ftl       | 25 ++++++++
 .../designer/codegen/CodeGenerationTest.java  |  1 +
 ...ApplicationSettingsGenerationStepTest.java | 60 +++++++++++++++----
 .../text-expectations/c_sharp/project.text    |  7 +++
 .../text-expectations/c_sharp/solution.text   | 31 +++++++---
 .../c_sharp/unit-test-project.text            | 25 ++++++++
 .../c_sharp/xoom-actors.text                  |  2 +-
 16 files changed, 214 insertions(+), 53 deletions(-)
 delete mode 100644 src/main/resources/codegen/c_sharp/Program.ftl
 create mode 100644 src/main/resources/codegen/c_sharp/UnitTestProject.ftl
 create mode 100644 src/test/resources/text-expectations/c_sharp/unit-test-project.text

diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/RelativeSourcePathResolver.java b/src/main/java/io/vlingo/xoom/designer/codegen/RelativeSourcePathResolver.java
index 0438465f..a2e3e65b 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/RelativeSourcePathResolver.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/RelativeSourcePathResolver.java
@@ -133,7 +133,12 @@ public String[] resolve(final CodeGenerationContext context, final Dialect diale
         return dialect.sourceFolder;
       }
       final String packageName = templateData.parameters().find(PACKAGE_NAME);
-      return ArrayUtils.addAll(dialect.sourceFolder, packageName.split("\\."));
+      if (dialect.equals(Dialect.C_SHARP)) {
+        final String basePackage = context.parameterOf(Label.PACKAGE);
+        return ArrayUtils.addAll(new String[]{basePackage}, packageName.replaceAll(basePackage, "").split("\\."));
+      }
+      else
+        return ArrayUtils.addAll(dialect.sourceFolder, packageName.split("\\."));
     }
 
     @Override
@@ -148,7 +153,13 @@ class UnitTest implements RelativeSourcePathResolver {
     @Override
     public String[] resolve(final CodeGenerationContext context, final Dialect dialect, final TemplateData templateData) {
       final String packageName = templateData.parameters().find(PACKAGE_NAME);
-      return ArrayUtils.addAll(dialect.testSourceFolder, packageName.split("\\."));
+      if (dialect.equals(Dialect.C_SHARP)) {
+        final String basePackage = context.parameterOf(Label.PACKAGE);
+        final String testBasePackage = basePackage + ".Tests";
+        return ArrayUtils.addAll(new String[]{testBasePackage}, packageName.replaceAll(testBasePackage, "").split( "\\."));
+      }
+      else
+        return ArrayUtils.addAll(dialect.testSourceFolder, packageName.split("\\."));
     }
 
     @Override
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
index 4dd3786d..87156611 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java
@@ -1,3 +1,10 @@
+// Copyright © 2012-2021 VLINGO LABS. All rights reserved.
+//
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v. 2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain
+// one at https://mozilla.org/MPL/2.0/.
+
 package io.vlingo.xoom.designer.codegen.applicationsettings;
 
 import io.vlingo.xoom.codegen.CodeGenerationContext;
@@ -6,7 +13,6 @@
 import io.vlingo.xoom.codegen.template.TemplateParameters;
 import io.vlingo.xoom.designer.codegen.Label;
 import io.vlingo.xoom.designer.codegen.csharp.CsharpTemplateStandard;
-import io.vlingo.xoom.designer.codegen.java.JavaTemplateStandard;
 import io.vlingo.xoom.designer.codegen.java.TemplateParameter;
 
 import java.util.Arrays;
@@ -23,40 +29,45 @@ public CsharpApplicationSettingsData(CodeGenerationContext context) {
   @Override
   List projectSettings() {
     final String solutionName = context.parameters().retrieveValue(Label.GROUP_ID);
-    final String projectName = context.parameters().retrieveValue(Label.ARTIFACT_ID);
+    final String packageName = context.parameters().retrieveValue(Label.PACKAGE);
     final String sdkVersion = context.parameters().retrieveValue(Label.SDK_VERSION);
     final String xoomVersion = context.parameters().retrieveValue(Label.XOOM_VERSION);
 
     final TemplateData solutionSettings = BasicTemplateData.of(CsharpTemplateStandard.SOLUTION_SETTINGS,
         TemplateParameters.with(TemplateParameter.APPLICATION_NAME, solutionName)
-            .and(TemplateParameter.ARTIFACT_ID, projectName));
+            .and(TemplateParameter.ARTIFACT_ID, packageName));
 
     final TemplateData projectSettings = BasicTemplateData.of(CsharpTemplateStandard.PROJECT_SETTINGS,
-        namespaceFrom(TemplateParameter.APPLICATION_NAME)
-            .and(TemplateParameter.PACKAGE_NAME, projectName)
+        TemplateParameters.with(TemplateParameter.APPLICATION_NAME, packageName)
+            .and(TemplateParameter.PACKAGE_NAME, packageName)
             .and(TemplateParameter.SDK_VERSION, sdkVersion)
             .and(TemplateParameter.XOOM_VERSION, xoomVersion));
 
-    return Arrays.asList(solutionSettings, projectSettings);
+    final TemplateData unitTestProjectSettings = BasicTemplateData.of(CsharpTemplateStandard.UNIT_TEST_PROJECT_SETTINGS,
+        TemplateParameters.with(TemplateParameter.APPLICATION_NAME, packageName)
+            .and(TemplateParameter.PACKAGE_NAME, packageName + ".Tests")
+            .and(TemplateParameter.PRODUCTION_CODE, false)
+            .and(TemplateParameter.UNIT_TEST, true)
+            .and(TemplateParameter.SDK_VERSION, sdkVersion));
+
+    return Arrays.asList(solutionSettings, projectSettings, unitTestProjectSettings);
   }
 
   @Override
   TemplateData actorSettings() {
-    return BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS, namespaceFrom(TemplateParameter.PACKAGE_NAME));
-  }
-
-  private TemplateParameters namespaceFrom(TemplateParameter packageName) {
-    final String projectName = context.parameters().retrieveValue(Label.ARTIFACT_ID);
-    return TemplateParameters.with(packageName, projectName);
+    final String packageName = context.parameters().retrieveValue(Label.PACKAGE);
+    return BasicTemplateData.of(CsharpTemplateStandard.ACTOR_SETTINGS,
+        TemplateParameters.with(TemplateParameter.PACKAGE_NAME, packageName));
   }
 
   @Override
   TemplateData readmeFile() {
-    final String appName = context.parameters().retrieveValue(Label.GROUP_ID);
+    final String solutionName = context.parameters().retrieveValue(Label.GROUP_ID);
 
     final TemplateParameters templateParameters =
-        TemplateParameters.with(TemplateParameter.README_FILE, true).and(TemplateParameter.PACKAGE_NAME, appName);
-    return BasicTemplateData.of(JavaTemplateStandard.README, templateParameters);
+        TemplateParameters.with(TemplateParameter.README_FILE, true)
+            .and(TemplateParameter.APPLICATION_NAME, solutionName);
+    return BasicTemplateData.of(CsharpTemplateStandard.README, templateParameters);
   }
 
 }
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java
index 1dd57ccd..596b0f76 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java
@@ -1,3 +1,10 @@
+// Copyright © 2012-2021 VLINGO LABS. All rights reserved.
+//
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v. 2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain
+// one at https://mozilla.org/MPL/2.0/.
+
 package io.vlingo.xoom.designer.codegen.csharp;
 
 import io.vlingo.xoom.codegen.template.TemplateParameters;
@@ -12,20 +19,17 @@ public enum CsharpTemplateStandard implements TemplateStandard {
 
   SOLUTION_SETTINGS(parameters -> Template.SOLUTION_SETTINGS.filename,
       (name, parameters) -> parameters.find(APPLICATION_NAME) + ".sln"),
-
   PROJECT_SETTINGS(parameters -> Template.PROJECT_SETTINGS.filename,
       (name, parameters) -> parameters.find(APPLICATION_NAME) + ".csproj"),
-
+  README(parameters -> Template.README.filename, (name, parameters) -> "README.md"),
+  UNIT_TEST_PROJECT_SETTINGS(parameters -> Template.UNIT_TEST_PROJECT_SETTINGS.filename,
+      (name, parameters) -> parameters.find(APPLICATION_NAME) + ".Tests.csproj"),
   ACTOR_SETTINGS(parameters -> Template.ACTOR_SETTINGS.filename,
       (name, parameters) -> "vlingo-actors.json");
 
   private final Function templateFileRetriever;
   private final BiFunction nameResolver;
 
-  CsharpTemplateStandard(final Function templateFileRetriever) {
-    this(templateFileRetriever, (name, parameters) -> name);
-  }
-
   CsharpTemplateStandard(final Function templateFileRetriever,
                          final BiFunction nameResolver) {
     this.templateFileRetriever = templateFileRetriever;
diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/Template.java b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/Template.java
index f7ba2a02..a527028e 100644
--- a/src/main/java/io/vlingo/xoom/designer/codegen/csharp/Template.java
+++ b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/Template.java
@@ -10,6 +10,8 @@
 public enum Template {
   SOLUTION_SETTINGS("Solution"),
   PROJECT_SETTINGS("Project"),
+  README("Readme"),
+  UNIT_TEST_PROJECT_SETTINGS("UnitTestProject"),
   ACTOR_SETTINGS("ActorSettings");
 
   public final String filename;
diff --git a/src/main/resources/codegen/c_sharp/ActorSettings.ftl b/src/main/resources/codegen/c_sharp/ActorSettings.ftl
index 935a9480..e9f48706 100644
--- a/src/main/resources/codegen/c_sharp/ActorSettings.ftl
+++ b/src/main/resources/codegen/c_sharp/ActorSettings.ftl
@@ -12,7 +12,7 @@
 		},
 		"consoleLogger": {
 			"classname": "Vlingo.Xoom.Actors.Plugin.Logging.Console.ConsoleLoggerPlugin",
-			"name": "vlingo-net/streams",
+			"name": "vlingo-net/actors",
 			"defaultLogger": true
 		},
 		"jdkLogger": {
diff --git a/src/main/resources/codegen/c_sharp/Program.ftl b/src/main/resources/codegen/c_sharp/Program.ftl
deleted file mode 100644
index e69de29b..00000000
diff --git a/src/main/resources/codegen/c_sharp/Project.ftl b/src/main/resources/codegen/c_sharp/Project.ftl
index 289dad57..2133bcb2 100644
--- a/src/main/resources/codegen/c_sharp/Project.ftl
+++ b/src/main/resources/codegen/c_sharp/Project.ftl
@@ -9,5 +9,12 @@
 
 	
 		
+		
+		
+	
+	
+		
+			PreserveNewest
+		
 	
 
diff --git a/src/main/resources/codegen/c_sharp/Readme.ftl b/src/main/resources/codegen/c_sharp/Readme.ftl
index 931406e3..0745df78 100644
--- a/src/main/resources/codegen/c_sharp/Readme.ftl
+++ b/src/main/resources/codegen/c_sharp/Readme.ftl
@@ -1 +1 @@
-# ${packageName}
+# ${appName}
diff --git a/src/main/resources/codegen/c_sharp/Solution.ftl b/src/main/resources/codegen/c_sharp/Solution.ftl
index 0ba4fac6..10f0e024 100644
--- a/src/main/resources/codegen/c_sharp/Solution.ftl
+++ b/src/main/resources/codegen/c_sharp/Solution.ftl
@@ -1,17 +1,32 @@
-
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 16
 VisualStudioVersion = 16.0.30114.105
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "${appName}", "${artifactId}\${artifactId}.csproj", "{432CF1A8-D025-4F2F-91A9-5716BD1A2587}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "${artifactId}", "${artifactId}\${artifactId}.csproj", "{432CF1A8-D025-4F2F-91A9-5716BD1A2587}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "${artifactId}.Tests", "${artifactId}.Tests\${artifactId}.Tests.csproj", "{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}"
 EndProject
 Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-		GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
+GlobalSection(SolutionConfigurationPlatforms) = preSolution
+Debug|Any CPU = Debug|Any CPU
+Release|Any CPU = Release|Any CPU
+EndGlobalSection
+GlobalSection(SolutionProperties) = preSolution
+HideSolutionNode = FALSE
+EndGlobalSection
+GlobalSection(ProjectConfigurationPlatforms) = postSolution
+{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.Build.0 = Debug|Any CPU
+{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Release|Any CPU.ActiveCfg = Release|Any CPU
+{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Release|Any CPU.Build.0 = Release|Any CPU
+{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}.Debug|Any CPU.Build.0 = Debug|Any CPU
+{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}.Release|Any CPU.ActiveCfg = Release|Any CPU
+{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}.Release|Any CPU.Build.0 = Release|Any CPU
+EndGlobalSection
+EndGlobal
+
+HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
diff --git a/src/main/resources/codegen/c_sharp/UnitTestProject.ftl b/src/main/resources/codegen/c_sharp/UnitTestProject.ftl
new file mode 100644
index 00000000..6de53829
--- /dev/null
+++ b/src/main/resources/codegen/c_sharp/UnitTestProject.ftl
@@ -0,0 +1,25 @@
+
+
+	
+		${sdkVersion}
+		enable
+		false
+	
+
+	
+		
+		
+		
+			runtime; build; native; contentfiles; analyzers; buildtransitive
+			all
+		
+		
+			runtime; build; native; contentfiles; analyzers; buildtransitive
+			all
+		
+	
+
+	
+		
+	
+
diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationTest.java
index 530d0669..7fb3ba95 100644
--- a/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationTest.java
@@ -18,6 +18,7 @@ public class CodeGenerationTest {
   @BeforeEach
   public void setUp() {
     ComponentRegistry.register("defaultCodeFormatter", CodeElementFormatter.with(Dialect.findDefault(), ReservedWordsHandler.usingSuffix("_")));
+    ComponentRegistry.register("cSharpCodeFormatter", CodeElementFormatter.with(Dialect.C_SHARP, ReservedWordsHandler.usingSuffix("_")));
   }
 
   @AfterEach
diff --git a/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java
index 66958fbf..198f05da 100644
--- a/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java
+++ b/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java
@@ -1,11 +1,21 @@
+// Copyright © 2012-2021 VLINGO LABS. All rights reserved.
+//
+// This Source Code Form is subject to the terms of the
+// Mozilla Public License, v. 2.0. If a copy of the MPL
+// was not distributed with this file, You can obtain
+// one at https://mozilla.org/MPL/2.0/.
+
 package io.vlingo.xoom.designer.codegen.applicationsettings;
 
+import io.vlingo.xoom.actors.Logger;
 import io.vlingo.xoom.codegen.CodeGenerationContext;
 import io.vlingo.xoom.codegen.TextExpectation;
 import io.vlingo.xoom.codegen.content.Content;
 import io.vlingo.xoom.codegen.dialect.Dialect;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter;
 import io.vlingo.xoom.codegen.parameter.CodeGenerationParameters;
+import io.vlingo.xoom.codegen.template.TemplateData;
+import io.vlingo.xoom.designer.codegen.CodeGenerationContextFactory;
 import io.vlingo.xoom.designer.codegen.CodeGenerationTest;
 import io.vlingo.xoom.designer.codegen.DeploymentType;
 import io.vlingo.xoom.designer.codegen.Label;
@@ -16,6 +26,8 @@
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
 public class ApplicationSettingsGenerationStepTest extends CodeGenerationTest {
 
   @Test
@@ -101,22 +113,18 @@ public void testThatCsharpSolutionIsGenerated() {
 
     new ApplicationSettingsGenerationStep().process(context);
 
-    final Content solutionSettings =
-        context.findContent(CsharpTemplateStandard.SOLUTION_SETTINGS, "Xoomapp");
-
-    final Content projectSettings =
-        context.findContent(CsharpTemplateStandard.PROJECT_SETTINGS, "Xoomapp");
-
-    final Content actorSettings =
-        context.findContent(CsharpTemplateStandard.ACTOR_SETTINGS, "vlingo-actors");
-
-    final Content readme =
-        context.findContent(JavaTemplateStandard.README, "README");
+    final Content solutionSettings = context.findContent(CsharpTemplateStandard.SOLUTION_SETTINGS, "Xoomapp");
+    final Content projectSettings = context.findContent(CsharpTemplateStandard.PROJECT_SETTINGS, "Io.Vlingo.Xoomapp");
+    final Content actorSettings = context.findContent(CsharpTemplateStandard.ACTOR_SETTINGS, "vlingo-actors");
+    final Content readme = context.findContent(CsharpTemplateStandard.README, "README");
+    final Content unitTestProject = context.findContent(CsharpTemplateStandard.UNIT_TEST_PROJECT_SETTINGS, "Io.Vlingo.Xoomapp.Tests");
 
     Assertions.assertTrue(solutionSettings.contains(TextExpectation.onCSharp().read("solution")));
     Assertions.assertTrue(projectSettings.contains(TextExpectation.onCSharp().read("project")));
     Assertions.assertTrue(actorSettings.contains(TextExpectation.onCSharp().read("xoom-actors")));
     Assertions.assertTrue(readme.contains(TextExpectation.onCSharp().read("readme")));
+    Assertions.assertTrue(unitTestProject.contains(TextExpectation.onCSharp().read("unit-test-project")));
+
   }
 
   @Test
@@ -131,4 +139,34 @@ public void testThatReadmeFileIsGenerated() {
 
     Assertions.assertTrue(readme.contains(TextExpectation.onJava().read("readme")));
   }
+
+  @Test
+  public void testThatProductionCodeRelativeSourcePathForCsharpIsGenerated() {
+    final CodeGenerationParameters parameters = CodeGenerationParameters.from(Label.PACKAGE, "Io.Vlingo.Xoomapp")
+        .add(Label.DIALECT, Dialect.C_SHARP);
+
+    final CodeGenerationContext context = CodeGenerationContextFactory.build(Logger.noOpLogger(), parameters);
+
+    final TemplateData templateData = new CsharpApplicationSettingsData(context).projectSettings()
+        .stream().filter(template -> template.hasStandard(CsharpTemplateStandard.PROJECT_SETTINGS)).findFirst().get();
+
+    String folderName = context.fileLocationResolver().resolve(context, Dialect.C_SHARP, templateData);
+
+    assertEquals("Io.Vlingo.Xoomapp", folderName);
+  }
+
+  @Test
+  public void testThatUnitTestCodeRelativeSourcePathForCsharpIsGenerated() {
+    final CodeGenerationParameters parameters = CodeGenerationParameters.from(Label.PACKAGE, "Io.Vlingo.Xoomapp")
+        .add(Label.DIALECT, Dialect.C_SHARP);
+
+    final CodeGenerationContext context = CodeGenerationContextFactory.build(Logger.noOpLogger(), parameters);
+
+    final TemplateData templateData = new CsharpApplicationSettingsData(context).projectSettings()
+        .stream().filter(template -> template.hasStandard(CsharpTemplateStandard.UNIT_TEST_PROJECT_SETTINGS)).findFirst().get();
+
+    String folderName = context.fileLocationResolver().resolve(context, Dialect.C_SHARP, templateData);
+
+    assertEquals("Io.Vlingo.Xoomapp.Tests", folderName);
+  }
 }
diff --git a/src/test/resources/text-expectations/c_sharp/project.text b/src/test/resources/text-expectations/c_sharp/project.text
index 535b9253..dfe9dbed 100644
--- a/src/test/resources/text-expectations/c_sharp/project.text
+++ b/src/test/resources/text-expectations/c_sharp/project.text
@@ -9,5 +9,12 @@
 
 	
 		
+		
+		
+	
+	
+		
+			PreserveNewest
+		
 	
 
diff --git a/src/test/resources/text-expectations/c_sharp/solution.text b/src/test/resources/text-expectations/c_sharp/solution.text
index 2462bf65..f8c5e996 100644
--- a/src/test/resources/text-expectations/c_sharp/solution.text
+++ b/src/test/resources/text-expectations/c_sharp/solution.text
@@ -1,17 +1,32 @@
-
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio Version 16
 VisualStudioVersion = 16.0.30114.105
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xoomapp", "Xoomapp\Xoomapp.csproj", "{432CF1A8-D025-4F2F-91A9-5716BD1A2587}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Io.Vlingo.Xoomapp", "Io.Vlingo.Xoomapp\Io.Vlingo.Xoomapp.csproj", "{432CF1A8-D025-4F2F-91A9-5716BD1A2587}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Io.Vlingo.Xoomapp.Tests", "Io.Vlingo.Xoomapp.Tests\Io.Vlingo.Xoomapp.Tests.csproj", "{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}"
 EndProject
 Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Release|Any CPU = Release|Any CPU
-	EndGlobalSection
-		GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
+GlobalSection(SolutionConfigurationPlatforms) = preSolution
+Debug|Any CPU = Debug|Any CPU
+Release|Any CPU = Release|Any CPU
+EndGlobalSection
+GlobalSection(SolutionProperties) = preSolution
+HideSolutionNode = FALSE
+EndGlobalSection
+GlobalSection(ProjectConfigurationPlatforms) = postSolution
+{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.Build.0 = Debug|Any CPU
+{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Release|Any CPU.ActiveCfg = Release|Any CPU
+{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Release|Any CPU.Build.0 = Release|Any CPU
+{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}.Debug|Any CPU.Build.0 = Debug|Any CPU
+{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}.Release|Any CPU.ActiveCfg = Release|Any CPU
+{7DBC71E4-171B-4DF6-AF65-38B8735C6F86}.Release|Any CPU.Build.0 = Release|Any CPU
+EndGlobalSection
+EndGlobal
+
+HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{432CF1A8-D025-4F2F-91A9-5716BD1A2587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
diff --git a/src/test/resources/text-expectations/c_sharp/unit-test-project.text b/src/test/resources/text-expectations/c_sharp/unit-test-project.text
new file mode 100644
index 00000000..336d2f07
--- /dev/null
+++ b/src/test/resources/text-expectations/c_sharp/unit-test-project.text
@@ -0,0 +1,25 @@
+
+
+	
+		net6.0
+		enable
+		false
+	
+
+	
+		
+		
+		
+			runtime; build; native; contentfiles; analyzers; buildtransitive
+			all
+		
+		
+			runtime; build; native; contentfiles; analyzers; buildtransitive
+			all
+		
+	
+
+	
+		
+	
+
diff --git a/src/test/resources/text-expectations/c_sharp/xoom-actors.text b/src/test/resources/text-expectations/c_sharp/xoom-actors.text
index 935a9480..e9f48706 100644
--- a/src/test/resources/text-expectations/c_sharp/xoom-actors.text
+++ b/src/test/resources/text-expectations/c_sharp/xoom-actors.text
@@ -12,7 +12,7 @@
 		},
 		"consoleLogger": {
 			"classname": "Vlingo.Xoom.Actors.Plugin.Logging.Console.ConsoleLoggerPlugin",
-			"name": "vlingo-net/streams",
+			"name": "vlingo-net/actors",
 			"defaultLogger": true
 		},
 		"jdkLogger": {