diff --git a/src/main/frontend/src/routes/context.svelte b/src/main/frontend/src/routes/context.svelte index f20b589e7..d75d77ecf 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/generation.svelte b/src/main/frontend/src/routes/generation.svelte index 6361a64e5..e9ecfab86 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/frontend/src/routes/platform.svelte b/src/main/frontend/src/routes/platform.svelte index 58f029deb..c2c6929dc 100644 --- a/src/main/frontend/src/routes/platform.svelte +++ b/src/main/frontend/src/routes/platform.svelte @@ -1,81 +1,142 @@ - Context + Platform
JVM - + + .NET
- {#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.xoomVersions.length > 0} +
+ VLINGO Version: +
+ {#each option.xoomVersions as vlingo (vlingo)} +
+ {vlingo.name} +
+ {/each} +
+
+ {/if} + {/if} + {/each} +
@@ -88,4 +149,4 @@ transform: translate(72px); } } - \ No newline at end of file + diff --git a/src/main/frontend/src/stores/context.js b/src/main/frontend/src/stores/context.js index 0f8a6e854..6e1d15305 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 5ce70f93e..3ce82e333 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 || @@ -146,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; diff --git a/src/main/frontend/src/util/Validation.js b/src/main/frontend/src/util/Validation.js index 444713985..52be77f12 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 ae6457375..8fe229cea 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; diff --git a/src/main/java/io/vlingo/xoom/designer/Configuration.java b/src/main/java/io/vlingo/xoom/designer/Configuration.java index 87abb0639..781ba402d 100644 --- a/src/main/java/io/vlingo/xoom/designer/Configuration.java +++ b/src/main/java/io/vlingo/xoom/designer/Configuration.java @@ -10,7 +10,8 @@ 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.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; @@ -18,12 +19,10 @@ import io.vlingo.xoom.designer.codegen.java.deploymentsettings.DockerComposeGenerationStep; 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; 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; @@ -66,54 +65,60 @@ 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("_")); + final CodeElementFormatter defaultCodeElementFormatter = + CodeElementFormatter.with(Dialect.findDefault(), + ReservedWordsHandler.usingSuffix("_")); - ComponentRegistry.register("defaultCodeFormatter", codeElementFormatter); - ComponentRegistry.register("codeGenerationSteps",codeGenerationSteps()); + 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()); } 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 DockerComposeGenerationStep(), - 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(), + // CodeGen + new ApplicationSettingsGenerationStep(), + new DesignerModelGenerationStep(), + // JAVA + 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 DockerfileGenerationStep(), + new DockerComposeGenerationStep(), + 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) ); } 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 d68dc1e3e..4ae8d8d37 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 c1208ebaa..8f5dc2e02 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/Label.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/Label.java @@ -83,8 +83,8 @@ public enum Label implements ParameterLabel { VALUE_OBJECT("valueObject"), AGGREGATE_STATE("aggregateState"), VALUE_OBJECT_FIELD("valueObjectField"), - UI_TYPE("uiType"); - + UI_TYPE("uiType"), + SDK_VERSION("sdkVersion"); @SuppressWarnings("unused") private final String key; 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 9022b5149..f48a5a3f5 100644 --- a/src/main/java/io/vlingo/xoom/designer/codegen/RelativeSourcePathResolver.java +++ b/src/main/java/io/vlingo/xoom/designer/codegen/RelativeSourcePathResolver.java @@ -146,7 +146,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 @@ -161,7 +166,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/ApplicationSettingsData.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsData.java new file mode 100644 index 000000000..6c30f0444 --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsData.java @@ -0,0 +1,20 @@ +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 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 new file mode 100644 index 000000000..b918a0c64 --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStep.java @@ -0,0 +1,46 @@ +// 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) { + return applicationSettingsDataFactory(context) + .generate(); + } + + private ApplicationSettingsData applicationSettingsDataFactory(CodeGenerationContext context) { + final String dialectName = dialectNameFrom(context); + + ApplicationSettingsData applicationSettingsData; + if (dialectName.isEmpty() || Dialect.withName(dialectName).isJava()) { + applicationSettingsData = new JavaApplicationSettingsData(context); + } else { + applicationSettingsData = new CsharpApplicationSettingsData(context); + } + return applicationSettingsData; + } + + @Override + protected Dialect resolveDialect(CodeGenerationContext context) { + final String dialectName = dialectNameFrom(context); + return dialectName.isEmpty() ? super.resolveDialect(context) : Dialect.withName(dialectName); + } + + private String dialectNameFrom(CodeGenerationContext context) { + 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 new file mode 100644 index 000000000..871566110 --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/CsharpApplicationSettingsData.java @@ -0,0 +1,73 @@ +// 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.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 CsharpApplicationSettingsData extends ApplicationSettingsData { + + private final CodeGenerationContext context; + + public CsharpApplicationSettingsData(CodeGenerationContext context) { + this.context = context; + } + + @Override + List projectSettings() { + final String solutionName = context.parameters().retrieveValue(Label.GROUP_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, packageName)); + + final TemplateData projectSettings = BasicTemplateData.of(CsharpTemplateStandard.PROJECT_SETTINGS, + TemplateParameters.with(TemplateParameter.APPLICATION_NAME, packageName) + .and(TemplateParameter.PACKAGE_NAME, packageName) + .and(TemplateParameter.SDK_VERSION, sdkVersion) + .and(TemplateParameter.XOOM_VERSION, xoomVersion)); + + 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() { + 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 solutionName = context.parameters().retrieveValue(Label.GROUP_ID); + + final TemplateParameters 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/applicationsettings/JavaApplicationSettingsData.java b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsData.java new file mode 100644 index 000000000..ba64c79fa --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/applicationsettings/JavaApplicationSettingsData.java @@ -0,0 +1,84 @@ +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.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; +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 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) { + 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)); + } + + @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); + + 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/CsharpTemplateStandard.java b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java new file mode 100644 index 000000000..596b0f768 --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/CsharpTemplateStandard.java @@ -0,0 +1,67 @@ +// 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; +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"), + 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, + 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 000000000..a527028ee --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/csharp/Template.java @@ -0,0 +1,23 @@ +// 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"), + README("Readme"), + UNIT_TEST_PROJECT_SETTINGS("UnitTestProject"), + 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/designermodel/DesignerModelFormatter.java b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelFormatter.java new file mode 100644 index 000000000..1a822d233 --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelFormatter.java @@ -0,0 +1,71 @@ +// Copyright © 2012-2022 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.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; + +public class DesignerModelFormatter { + + 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/java/designermodel/DesignerModelGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelGenerationStep.java similarity index 72% 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 d0160b3d5..408651cc4 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,9 +5,10 @@ // 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.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/java/designermodel/DesignerModelTemplateData.java b/src/main/java/io/vlingo/xoom/designer/codegen/designermodel/DesignerModelTemplateData.java similarity index 83% 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 6776b5bb4..68ea1fe79 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,8 +4,9 @@ // 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.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/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/TemplateParameter.java index 4889b5463..f22b9d619 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,6 +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"), DOCKER_COMPOSE_FILE("dockerComposeFile"), DOCKER_COMPOSE_SERVICES("dockerComposeServices"), MODEL_CATEGORY("modelCategory"), 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 d87ec77cd..000000000 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStep.java +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright © 2012-2023 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/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 cc3d7cf40..987d67d86 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 718af7e8b..1d5ad6473 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/clustersettings/ClusterSettingsGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/clustersettings/ClusterSettingsGenerationStep.java index 5026f9b67..256f83ba6 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(); + } } 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 d58f98158..ce95ed71f 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 73b7a315d..5ee3dfa04 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/deploymentsettings/KubernetesManifestFileGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/deploymentsettings/KubernetesManifestFileGenerationStep.java index c149bfb81..bc2af1ebd 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; } } diff --git a/src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelFormatter.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelFormatter.java deleted file mode 100644 index bdd3def34..000000000 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/designermodel/DesignerModelFormatter.java +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright © 2012-2023 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.designermodel; - -import com.google.gson.GsonBuilder; -import com.google.gson.JsonParser; -import io.vlingo.xoom.common.serialization.JsonSerialization; -import io.vlingo.xoom.designer.infrastructure.restapi.data.DesignerModel; - -public class DesignerModelFormatter { - - public static String format(final String designerModel) { - return new GsonBuilder().setPrettyPrinting().create().toJson(JsonParser.parseString(designerModel)); - } - - public static String format(final DesignerModel designerModel) { - return format(JsonSerialization.serialized(designerModel)); - } - -} - 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 54282ba96..b0aa59d85 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; @@ -39,7 +40,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 380576a4e..2f8ec0c05 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 f481952ee..06acb8fc3 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 4a11590e3..52c860028 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/readme/ReadmeFileGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStep.java deleted file mode 100644 index fcb435f37..000000000 --- a/src/main/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStep.java +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright © 2012-2023 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/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/resource/RestResourceGenerationStep.java index 54cf4539a..109d9adf1 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,9 @@ 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 87f2e811b..717fcd28d 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 75c5a356c..c8c4e56b5 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 @@ -9,6 +9,7 @@ import io.vlingo.xoom.codegen.CodeGenerationContext; import io.vlingo.xoom.codegen.parameter.CodeGenerationParameter; +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; @@ -57,7 +58,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/structure/MainClassResolverStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/structure/MainClassResolverStep.java index 67f62cf69..e90669d66 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 b7554ec88..68b4de89c 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(); + } } 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 db54a3f18..95cefc547 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 50b0b68d2..fbf0b9b27 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/queries/QueriesUnitTestGenerationStep.java b/src/main/java/io/vlingo/xoom/designer/codegen/java/unittest/queries/QueriesUnitTestGenerationStep.java index 1026177e0..f6a09d505 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,6 +31,7 @@ protected List buildTemplatesData(final CodeGenerationContext cont @Override public boolean shouldProcess(final CodeGenerationContext context) { - return context.parameterOf(Label.CQRS, Boolean::valueOf); + final Dialect dialect = context.parameterObjectOf(Label.DIALECT); + return (dialect == null || dialect.isJava()) && context.parameterOf(Label.CQRS, Boolean::valueOf); } } 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 55854acb4..a3c0839ad 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 78ee248f6..082302c78 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/DesignerServerConfiguration.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/DesignerServerConfiguration.java index 1770da3e1..8b960ac5a 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/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 d8ce87528..36f22ddef 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; @@ -50,9 +50,14 @@ private CodeGenerationContextMapper(final DesignerModel data, final Logger logger) { this.data = data; this.generationTarget = generationTarget; - this.parameters = CodeGenerationParameters.from(DIALECT, Dialect.JAVA); + 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); - this.formatter = ComponentRegistry.withName("defaultCodeFormatter"); + if(dialect.isJava()) + this.formatter = ComponentRegistry.withName("defaultCodeFormatter"); + else + this.formatter = ComponentRegistry.withName("cSharpCodeFormatter"); this.logger = logger; mapAggregates(); @@ -234,29 +239,43 @@ 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 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), 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 : ""); + 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(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 d694cfa07..9c4177ac2 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/DesignerModel.java b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/DesignerModel.java index 72733435e..0f91241c6 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 000000000..0b0c56949 --- /dev/null +++ b/src/main/java/io/vlingo/xoom/designer/infrastructure/restapi/data/PlatformSettingsData.java @@ -0,0 +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 xoomVersion; + + public PlatformSettingsData(String platform, String lang, String sdkVersion, String xoomVersion) { + this.platform = platform; + this.lang = lang; + this.sdkVersion = sdkVersion; + this.xoomVersion = xoomVersion; + } +} 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 000000000..e9f487064 --- /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/actors", + "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/Project.ftl b/src/main/resources/codegen/c_sharp/Project.ftl new file mode 100644 index 000000000..2133bcb21 --- /dev/null +++ b/src/main/resources/codegen/c_sharp/Project.ftl @@ -0,0 +1,20 @@ + + + + Exe + ${sdkVersion} + enable + enable + + + + + + + + + + PreserveNewest + + + 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 000000000..0745df78c --- /dev/null +++ b/src/main/resources/codegen/c_sharp/Readme.ftl @@ -0,0 +1 @@ +# ${appName} 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 000000000..10f0e024e --- /dev/null +++ b/src/main/resources/codegen/c_sharp/Solution.ftl @@ -0,0 +1,37 @@ +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}") = "${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 +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 + {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/main/resources/codegen/c_sharp/UnitTestProject.ftl b/src/main/resources/codegen/c_sharp/UnitTestProject.ftl new file mode 100644 index 000000000..6de53829d --- /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/CodeGenerationParameterValidationStepTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationParameterValidationStepTest.java index f9fb36738..ca060dd81 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", "1.8", "1.0.0"); 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", "1.0.0"); + final CodeElementFormatter codeElementFormatter = + CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_")); + + ComponentRegistry.register("cSharpCodeFormatter", 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/codegen/CodeGenerationTest.java b/src/test/java/io/vlingo/xoom/designer/codegen/CodeGenerationTest.java index 6a0e05727..a01a06cb4 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 new file mode 100644 index 000000000..198f05dac --- /dev/null +++ b/src/test/java/io/vlingo/xoom/designer/codegen/applicationsettings/ApplicationSettingsGenerationStepTest.java @@ -0,0 +1,172 @@ +// 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; +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; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +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 solutionName = "Xoomapp"; + final String projectName = "Xoomapp"; + final String sdkVersion = "net6.0"; + final String xoomVersion = "1.9.3"; + + final CodeGenerationParameters parameters = CodeGenerationParameters.from(CodeGenerationParameter.of(Label.PACKAGE, namespace), + 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); + + new ApplicationSettingsGenerationStep().process(context); + + 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 + 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"))); + } + + @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/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 6951edf7a..8633bd416 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; 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 e9e0731cc..000000000 --- a/src/test/java/io/vlingo/xoom/designer/codegen/java/applicationsettings/ApplicationSettingsGenerationStepTest.java +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright © 2012-2023 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"))); - } - -} 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 78caa061f..000000000 --- a/src/test/java/io/vlingo/xoom/designer/codegen/java/readme/ReadmeFileGenerationStepTest.java +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright © 2012-2023 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/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 3b140aa5b..dcd88a199 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)); } 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 f200aaae6..bbf79e921 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 08814734d..429b746ad 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()); } 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 628f486d8..fcdcfc7ce 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", "1.8", "{{XOOM_VERSION}}"); 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", "{{XOOM_VERSION}}"); + final CodeElementFormatter codeElementFormatter = + CodeElementFormatter.with(Dialect.withName(platform.lang.toUpperCase()), ReservedWordsHandler.usingSuffix("_")); + + ComponentRegistry.register("cSharpCodeFormatter", 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,12 @@ 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\": \"1.8\",\n" + + " \"xoomVersion\": \"{{XOOM_VERSION}}\"\n" + + " },\n" + " \"context\": {\n" + " \"groupId\": \"io.vlingo\",\n" + " \"artifactId\": \"xoomapp\",\n" + @@ -68,6 +94,27 @@ 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" + + " \"xoomVersion\": \"{{XOOM_VERSION}}\"\n" + + " },\n" + + " \"context\": {\n" + + " \"solutionName\": \"io.vlingo\",\n" + + " \"projectName\": \"xoomapp\",\n" + + " \"projectVersion\": \"1.0\",\n" + + " \"namespace\": \"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 264073371..6e72be3fc 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", "1.8", "1.0.0"); + } + 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 6a9004983..59b572de1 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\":\"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
   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", "1.8", "1.0.0");
+  }
+
   private ContextSettingsData contextSettingsData() {
     return new ContextSettingsData("io.vlingo", "xoomapp",
             "1.0", "io.vlingo.xoomapp");
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 000000000..dfe9dbedf
--- /dev/null
+++ b/src/test/resources/text-expectations/c_sharp/project.text
@@ -0,0 +1,20 @@
+
+
+	
+		Exe
+		net6.0
+		enable
+		enable
+	
+
+	
+		
+		
+		
+	
+	
+		
+			PreserveNewest
+		
+	
+
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 000000000..781f2eb57
--- /dev/null
+++ b/src/test/resources/text-expectations/c_sharp/readme.text
@@ -0,0 +1 @@
+# Xoomapp
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 000000000..f8c5e9961
--- /dev/null
+++ b/src/test/resources/text-expectations/c_sharp/solution.text
@@ -0,0 +1,37 @@
+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}") = "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
+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
+		{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/unit-test-project.text b/src/test/resources/text-expectations/c_sharp/unit-test-project.text
new file mode 100644
index 000000000..336d2f07b
--- /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
new file mode 100644
index 000000000..e9f487064
--- /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/actors",
+			"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/test/resources/text-expectations/java/designer-model.text b/src/test/resources/text-expectations/java/designer-model.text
index 9bc4dd816..702b2dead 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,