diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/JavaDSLAction2.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/JavaDSLAction2.java index 023de16dd..fc9a42652 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/JavaDSLAction2.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/JavaDSLAction2.java @@ -156,11 +156,10 @@ private JavaSourceAndType createConfigurationClass(ProjectContext projectContext return new JavaSourceAndType(javaSource, javaSource.getTypes().get(0)); } - private JavaSourceAndType createClass(ProjectContext projectContext, String content) { + private void createClass(ProjectContext projectContext, String content) { JavaSourceSet mainJavaSourceSet = projectContext.getApplicationModules().getTopmostApplicationModules().get(0).getMainJavaSourceSet(); String packageName = mainJavaSourceSet.getJavaSourceLocation().getPackageName(); - JavaSource javaSource = mainJavaSourceSet.addJavaSource(projectContext.getProjectRootDirectory(), content, packageName); - return new JavaSourceAndType(javaSource, javaSource.getTypes().get(0)); + mainJavaSourceSet.addJavaSource(projectContext.getProjectRootDirectory(), content, packageName); } // TODO: fina a cohesive name diff --git a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/dwl/DwlTransformTranslator.java b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/dwl/DwlTransformTranslator.java index add50a3b3..0cb5af5ba 100644 --- a/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/dwl/DwlTransformTranslator.java +++ b/components/sbm-recipes-mule-to-boot/src/main/java/org/springframework/sbm/mule/actions/javadsl/translators/dwl/DwlTransformTranslator.java @@ -88,7 +88,7 @@ private DslSnippet formEmbeddedDWLBasedDSLSnippet(TransformMessageType component private DslSnippet formExternalFileBasedDSLSnippet(TransformMessageType component) { String resource = component.getSetPayload().getResource(); - String className = capitalizeFirstLetter(getFileName(resource)) + "Transform"; + String className = sanitizeForClassName(resource); String content = replaceClassName(externalClassContentPrefixTemplate, className) + " * from file " @@ -97,14 +97,20 @@ private DslSnippet formExternalFileBasedDSLSnippet(TransformMessageType componen return new DslSnippet(replaceClassName(STATEMENT_CONTENT, className), Collections.emptySet(), Collections.emptySet(), content); } + public static String sanitizeForClassName(String classNameCandidate) { + String sanitizedClassName = getFileName(classNameCandidate) + .replaceAll("[^a-zA-Z0-9]", ""); + return (capitalizeFirstLetter(sanitizedClassName) + "Transform"); + } + private boolean isComponentReferencingAnExternalFile(TransformMessageType component) { return component.getSetPayload().getContent().isEmpty(); } - private String getFileName(String path) { - - String[] fileParts = path.split("\\."); - String pathWithoutExtension = fileParts[fileParts.length - 2]; + private static String getFileName(String path) { + String[] fileParts = path.replace("classpath:", "").split("\\."); + String pathWithoutExtension = fileParts.length == 1 ? + fileParts[0] : fileParts[fileParts.length - 2]; String[] fileNameParts = pathWithoutExtension.split("/"); return fileNameParts[fileNameParts.length - 1]; } @@ -114,7 +120,7 @@ private String replaceClassName(String template, String className) { return template.replace("$CLASSNAME", className); } - private String capitalizeFirstLetter(String className) { + private static String capitalizeFirstLetter(String className) { return className.substring(0, 1).toUpperCase() + className.substring(1); } } diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLDwlTransformTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLDwlTransformTest.java index 06221724f..097e72c84 100644 --- a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLDwlTransformTest.java +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/MuleToJavaDSLDwlTransformTest.java @@ -221,4 +221,73 @@ public void shouldTranslateDWLTransformationWithOnlyOneSetVariable() { " .get();\n" + " }}"); } + + @Test + public void shouldNotErrorWhenDWLFileHasDash() { + final String dwlExternalFileSpecialChars = "\n" + + "\n" + + "\n" + + " \n" + + " \n" + + "\n" + + " \n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n" + + " \n" + + " \n" + + ""; + addXMLFileToResource(dwlExternalFileSpecialChars); + runAction(); + assertThat(projectContext.getProjectJavaSources().list()).hasSize(2); + assertThat(projectContext.getProjectJavaSources().list().get(0).print()) + .isEqualTo( + "package com.example.javadsl;\n" + + "import org.springframework.context.annotation.Bean;\n" + + "import org.springframework.context.annotation.Configuration;\n" + + "import org.springframework.integration.dsl.IntegrationFlow;\n" + + "import org.springframework.integration.dsl.IntegrationFlows;\n" + + "import org.springframework.integration.handler.LoggingHandler;\n" + + "import org.springframework.integration.http.dsl.Http;\n" + + "\n" + + "@Configuration\n" + + "public class FlowConfigurations {\n" + + " @Bean\n" + + " IntegrationFlow dwlFlow() {\n" + + " return IntegrationFlows.from(Http.inboundChannelAdapter(\"/dwl\")).handle((p, h) -> p)\n" + + " .log(LoggingHandler.Level.INFO, \"payload to be sent: #[new String(payload)]\")\n" + + " .transform(MapclientriskratingresponseTransform::transform)\n" + + " .log(LoggingHandler.Level.INFO, \"payload to be sent: #[new String(payload)]\")\n" + + " .get();\n" + + " }}"); + assertThat(projectContext.getProjectJavaSources().list().get(1).print()) + .isEqualTo( + "package com.example.javadsl;\n" + + "\n" + + "public class MapclientriskratingresponseTransform {\n" + + " /*\n" + + " * TODO:\n" + + " *\n" + + " * Please add necessary transformation for below snippet\n" + + " * from file dwl/map-client-risk-rating-response.dwl * */\n" + + " public static MapclientriskratingresponseTransform transform(Object payload) {\n" + + "\n" + + " return new MapclientriskratingresponseTransform();\n" + + " }\n" + + "}"); + } } diff --git a/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/javadsl/translators/dwl/DwlTransformTranslatorTest.java b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/javadsl/translators/dwl/DwlTransformTranslatorTest.java new file mode 100644 index 000000000..7214f9c30 --- /dev/null +++ b/components/sbm-recipes-mule-to-boot/src/test/java/org/springframework/sbm/mule/actions/javadsl/translators/dwl/DwlTransformTranslatorTest.java @@ -0,0 +1,39 @@ +/* + * Copyright 2021 - 2022 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.sbm.mule.actions.javadsl.translators.dwl; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import static org.junit.jupiter.api.Assertions.*; + +class DwlTransformTranslatorTest { + + @ParameterizedTest + @CsvSource(value = { + "MapClientRiskRatingResponseTransform,classpath:dwl/mapClientRiskRatingResponse.dwl", + "MapclientriskratingresponseTransform,classpath:dwl/map-client-risk-rating-response.dwl", + "MapclientriskratingresponseTransform,classpath:map client risk rating response.dwl", + "MapclientriskratingresponseTransform,classpath:map client risk rating response" + }, + delimiter = ',') + void classNameSanitizer(String expected, String input) { + assertEquals( + expected, + DwlTransformTranslator.sanitizeForClassName(input) + ); + } +}