From 053c1f7ea17b3388da997669c6950ecb4fbb405b Mon Sep 17 00:00:00 2001 From: Ravi Gupta Date: Wed, 27 Jul 2022 18:25:18 +0530 Subject: [PATCH 1/4] #159 Added action for Johnzon upgrade for Spring boot migration 2.7 to 3.x --- ..._30_UpgradeReplaceJohnzonDependencies.java | 26 +++++++ .../JohnzonDependencyCondition.java | 23 ++++++ ...UpgradeReplaceJohnzonDependenciesTest.java | 75 +++++++++++++++++++ 3 files changed, 124 insertions(+) create mode 100644 components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java create mode 100644 components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java create mode 100644 components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java new file mode 100644 index 000000000..c8613de80 --- /dev/null +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java @@ -0,0 +1,26 @@ +package org.springframework.sbm.boot.upgrade_27_30.actions; + +import org.springframework.sbm.boot.upgrade_27_30.filters.JohnzonDependencyCondition; +import org.springframework.sbm.build.api.BuildFile; +import org.springframework.sbm.build.api.Dependency; +import org.springframework.sbm.engine.context.ProjectContext; +import org.springframework.sbm.engine.recipe.AbstractAction; + +public class Boot_27_30_UpgradeReplaceJohnzonDependencies extends AbstractAction { + + private static final String JHONZON_DEPENDENCY_PATTERN = "org.apache.johnzon:johnzon-core"; + private static final String JHONZON_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.18-jakarta"; + + @Override + public void apply(ProjectContext context) { + BuildFile buildFile = context.getBuildFile(); + buildFile.removeDependenciesMatchingRegex(JHONZON_DEPENDENCY_PATTERN); + buildFile.addDependency(Dependency.fromCoordinates(JHONZON_DEPENDENCY)); + } + + @Override + public boolean isApplicable(ProjectContext context) { + return new JohnzonDependencyCondition().evaluate(context); + } + +} diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java new file mode 100644 index 000000000..966b3dfa3 --- /dev/null +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java @@ -0,0 +1,23 @@ +package org.springframework.sbm.boot.upgrade_27_30.filters; + +import org.springframework.sbm.engine.context.ProjectContext; +import org.springframework.sbm.engine.recipe.Condition; +import org.springframework.sbm.java.impl.OpenRewriteJavaSource; + +/** + * This filter finds out if any of the resource uses Johnzon + */ +public class JohnzonDependencyCondition implements Condition { + + @Override + public String getDescription() { + return "Checks if any of the class in the project imports Apache Jhonzon classes"; + } + + @Override + public boolean evaluate(ProjectContext context) { + return context.getProjectJavaSources() + .asStream() + .anyMatch(js -> js.hasImportStartingWith("org.apache.johnzon.core")); + } +} diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java new file mode 100644 index 000000000..c3d4a7119 --- /dev/null +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java @@ -0,0 +1,75 @@ +package org.springframework.sbm.boot.upgrade_27_30.actions; + +import org.junit.jupiter.api.Test; +import org.springframework.sbm.boot.properties.SpringApplicationPropertiesPathMatcher; +import org.springframework.sbm.boot.properties.SpringBootApplicationPropertiesRegistrar; +import org.springframework.sbm.build.api.Dependency; +import org.springframework.sbm.engine.context.ProjectContext; +import org.springframework.sbm.project.resource.TestProjectContext; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class Boot_27_30_UpgradeReplaceJohnzonDependenciesTest { + + private static final String JHONZON_UNSUPPORTED_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.11"; + private static final String JHONZON_UPDATED_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.18-jakarta"; + private static final String JAVA_CLASS_WITH_JHONZON_IMPORT = "package org.spring.boot.migration;" + + "import org.apache.johnzon.core.JsonStringImpl;" + + "public class BootReplaceJohnzonDependencyDummyClass{" + + "}"; + + + private static final String JAVA_CLASS_WITHOUT_JHONZON_IMPORT = "package org.spring.boot.migration;" + + "public class BootReplaceJohnzonDependencyDummyClass{" + + "}"; + + + @Test + public void givenProjectWithSelfManagedJohnzonDependency_migrate_expectJohnzonDependencyUpdated(){ + ProjectContext projectContext = getProjectContextWithJohnzonDependency(JAVA_CLASS_WITH_JHONZON_IMPORT); + Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies(); + upgradeReplaceJohnzonDependencies.apply(projectContext); + + assertTrue(projectContext + .getBuildFile() + .hasExactDeclaredDependency(Dependency.fromCoordinates(JHONZON_UPDATED_DEPENDENCY)) + ); + } + + + @Test + public void givenProjectWithSpringManagedJohnzonDependency_migrate_expectJohnzonDependencyUpdated(){ + ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITH_JHONZON_IMPORT); + Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies(); + upgradeReplaceJohnzonDependencies.apply(projectContext); + + assertTrue(projectContext + .getBuildFile() + .hasExactDeclaredDependency(Dependency.fromCoordinates(JHONZON_UPDATED_DEPENDENCY)) + ); + } + + @Test + public void givenProjectWithoutJohnzonImport_checkActionApplicability_expectFalse(){ + ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITHOUT_JHONZON_IMPORT); + Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies(); + + assertFalse(upgradeReplaceJohnzonDependencies.isApplicable(projectContext)); + } + + private ProjectContext getProjectContextWithJohnzonDependency(String... javaSources){ + return TestProjectContext.buildProjectContext() + .withBuildFileHavingDependencies(JHONZON_UNSUPPORTED_DEPENDENCY) + .withJavaSources(javaSources) + .build(); + } + + private ProjectContext getProjectContextWithoutJohnzonDependency(String... javaSources){ + return TestProjectContext.buildProjectContext() + .withDummyRootBuildFile() + .withJavaSources(javaSources) + .addRegistrar(new SpringBootApplicationPropertiesRegistrar(new SpringApplicationPropertiesPathMatcher())) + .build(); + } +} From 03e58fc4d1925b88713f112b02cbc619438c1496 Mon Sep 17 00:00:00 2001 From: Ravi Gupta Date: Fri, 29 Jul 2022 12:41:49 +0530 Subject: [PATCH 2/4] Fixed review comments --- ..._30_UpgradeReplaceJohnzonDependencies.java | 10 ++-- .../JohnzonDependencyCondition.java | 20 ++++++-- ...UpgradeReplaceJohnzonDependenciesTest.java | 50 +++++++++++-------- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java index c8613de80..1f00db2e3 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java @@ -1,6 +1,6 @@ package org.springframework.sbm.boot.upgrade_27_30.actions; -import org.springframework.sbm.boot.upgrade_27_30.filters.JohnzonDependencyCondition; +import org.springframework.sbm.boot.upgrade_27_30.conditions.JohnzonDependencyCondition; import org.springframework.sbm.build.api.BuildFile; import org.springframework.sbm.build.api.Dependency; import org.springframework.sbm.engine.context.ProjectContext; @@ -8,14 +8,14 @@ public class Boot_27_30_UpgradeReplaceJohnzonDependencies extends AbstractAction { - private static final String JHONZON_DEPENDENCY_PATTERN = "org.apache.johnzon:johnzon-core"; - private static final String JHONZON_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.18-jakarta"; + private static final String JOHNZON_DEPENDENCY_PATTERN = "org\\.apache\\.johnzon\\:johnzon-core\\:.*"; + private static final String JOHNZON_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.18-jakarta"; @Override public void apply(ProjectContext context) { BuildFile buildFile = context.getBuildFile(); - buildFile.removeDependenciesMatchingRegex(JHONZON_DEPENDENCY_PATTERN); - buildFile.addDependency(Dependency.fromCoordinates(JHONZON_DEPENDENCY)); + buildFile.removeDependenciesMatchingRegex(JOHNZON_DEPENDENCY_PATTERN); + buildFile.addDependency(Dependency.fromCoordinates(JOHNZON_DEPENDENCY)); } @Override diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java index 966b3dfa3..b17babf36 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java @@ -1,23 +1,33 @@ -package org.springframework.sbm.boot.upgrade_27_30.filters; +package org.springframework.sbm.boot.upgrade_27_30.conditions; +import org.springframework.sbm.build.api.ApplicationModule; import org.springframework.sbm.engine.context.ProjectContext; import org.springframework.sbm.engine.recipe.Condition; -import org.springframework.sbm.java.impl.OpenRewriteJavaSource; /** * This filter finds out if any of the resource uses Johnzon */ public class JohnzonDependencyCondition implements Condition { + private static final String JOHNZON_DEPENDENCY_PATTERN = "org\\.apache\\.johnzon\\:johnzon-core\\:.*"; + private static final String JOHNZON_IMPORT = "org.apache.johnzon.core"; + @Override public String getDescription() { - return "Checks if any of the class in the project imports Apache Jhonzon classes"; + return "Checks if any of the class in the project imports Apache Johnzon classes or the project has declared dependency on Johnzon library"; } @Override public boolean evaluate(ProjectContext context) { - return context.getProjectJavaSources() + boolean importCondition = context.getProjectJavaSources() .asStream() - .anyMatch(js -> js.hasImportStartingWith("org.apache.johnzon.core")); + .anyMatch(js -> js.hasImportStartingWith(JOHNZON_IMPORT)); + + boolean dependencyCondition = context.getApplicationModules() + .stream() + .map(ApplicationModule::getBuildFile) + .anyMatch(b -> b.hasDeclaredDependencyMatchingRegex(JOHNZON_DEPENDENCY_PATTERN)); + + return importCondition || dependencyCondition; } } diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java index c3d4a7119..dc65f8750 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java @@ -1,58 +1,65 @@ package org.springframework.sbm.boot.upgrade_27_30.actions; import org.junit.jupiter.api.Test; -import org.springframework.sbm.boot.properties.SpringApplicationPropertiesPathMatcher; -import org.springframework.sbm.boot.properties.SpringBootApplicationPropertiesRegistrar; -import org.springframework.sbm.build.api.Dependency; import org.springframework.sbm.engine.context.ProjectContext; import org.springframework.sbm.project.resource.TestProjectContext; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; public class Boot_27_30_UpgradeReplaceJohnzonDependenciesTest { - private static final String JHONZON_UNSUPPORTED_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.11"; - private static final String JHONZON_UPDATED_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.18-jakarta"; - private static final String JAVA_CLASS_WITH_JHONZON_IMPORT = "package org.spring.boot.migration;" + private static final String JOHNZON_UNSUPPORTED_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.11"; + private static final String JAVA_CLASS_WITH_JOHNZON_IMPORT = "package org.spring.boot.migration;" + "import org.apache.johnzon.core.JsonStringImpl;" + "public class BootReplaceJohnzonDependencyDummyClass{" + "}"; - - private static final String JAVA_CLASS_WITHOUT_JHONZON_IMPORT = "package org.spring.boot.migration;" + private static final String EXPECTED_POM = "\n" + + "\n" + + " 4.0.0\n" + + " com.example\n" + + " dummy-root\n" + + " 0.1.0-SNAPSHOT\n" + + " jar\n" + + " \n" + + " \n" + + " org.apache.johnzon\n" + + " johnzon-core\n" + + " 1.2.18-jakarta\n" + + " \n" + + " \n" + + "\n" + + "" + + "\n"; + + private static final String JAVA_CLASS_WITHOUT_JOHNZON_IMPORT = "package org.spring.boot.migration;" + "public class BootReplaceJohnzonDependencyDummyClass{" + "}"; @Test public void givenProjectWithSelfManagedJohnzonDependency_migrate_expectJohnzonDependencyUpdated(){ - ProjectContext projectContext = getProjectContextWithJohnzonDependency(JAVA_CLASS_WITH_JHONZON_IMPORT); + ProjectContext projectContext = getProjectContextWithJohnzonDependency(JAVA_CLASS_WITH_JOHNZON_IMPORT); Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies(); upgradeReplaceJohnzonDependencies.apply(projectContext); - assertTrue(projectContext - .getBuildFile() - .hasExactDeclaredDependency(Dependency.fromCoordinates(JHONZON_UPDATED_DEPENDENCY)) - ); + assertThat(projectContext.getBuildFile().print()).isEqualToIgnoringNewLines(EXPECTED_POM); } @Test public void givenProjectWithSpringManagedJohnzonDependency_migrate_expectJohnzonDependencyUpdated(){ - ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITH_JHONZON_IMPORT); + ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITH_JOHNZON_IMPORT); Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies(); upgradeReplaceJohnzonDependencies.apply(projectContext); - assertTrue(projectContext - .getBuildFile() - .hasExactDeclaredDependency(Dependency.fromCoordinates(JHONZON_UPDATED_DEPENDENCY)) - ); + assertThat(projectContext.getBuildFile().print()).isEqualToIgnoringNewLines(EXPECTED_POM); } @Test public void givenProjectWithoutJohnzonImport_checkActionApplicability_expectFalse(){ - ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITHOUT_JHONZON_IMPORT); + ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITHOUT_JOHNZON_IMPORT); Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies(); assertFalse(upgradeReplaceJohnzonDependencies.isApplicable(projectContext)); @@ -60,7 +67,7 @@ public void givenProjectWithoutJohnzonImport_checkActionApplicability_expectFals private ProjectContext getProjectContextWithJohnzonDependency(String... javaSources){ return TestProjectContext.buildProjectContext() - .withBuildFileHavingDependencies(JHONZON_UNSUPPORTED_DEPENDENCY) + .withBuildFileHavingDependencies(JOHNZON_UNSUPPORTED_DEPENDENCY) .withJavaSources(javaSources) .build(); } @@ -69,7 +76,6 @@ private ProjectContext getProjectContextWithoutJohnzonDependency(String... javaS return TestProjectContext.buildProjectContext() .withDummyRootBuildFile() .withJavaSources(javaSources) - .addRegistrar(new SpringBootApplicationPropertiesRegistrar(new SpringApplicationPropertiesPathMatcher())) .build(); } } From 165d55ebada27fa0dcbdf871c0ab7df1d1d0acfc Mon Sep 17 00:00:00 2001 From: Ravi Gupta Date: Wed, 3 Aug 2022 12:25:00 +0530 Subject: [PATCH 3/4] Fixed review comments --- .../sbm/build/api/Dependency.java | 6 ++ ..._30_UpgradeReplaceJohnzonDependencies.java | 12 ++- .../JohnzonDependencyCondition.java | 11 +-- ...UpgradeReplaceJohnzonDependenciesTest.java | 92 ++++++++++++++----- 4 files changed, 86 insertions(+), 35 deletions(-) diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/build/api/Dependency.java b/components/sbm-core/src/main/java/org/springframework/sbm/build/api/Dependency.java index 81b5b0c42..0be85a001 100644 --- a/components/sbm-core/src/main/java/org/springframework/sbm/build/api/Dependency.java +++ b/components/sbm-core/src/main/java/org/springframework/sbm/build/api/Dependency.java @@ -104,6 +104,12 @@ public static Dependency fromCoordinates(String coordinate) { .groupId(splitCoordinates[0]) .artifactId(splitCoordinates[1]) .version(splitCoordinates[2]).build(); + } else if (splitCoordinates.length == 4) { + return Dependency.builder() + .groupId(splitCoordinates[0]) + .artifactId(splitCoordinates[1]) + .version(splitCoordinates[2]) + .classifier(splitCoordinates[3]).build(); } else { throw new IllegalArgumentException("Expected dependency in format groupid:artifactid[:version], but it is: " + coordinate); } diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java index 1f00db2e3..ba2e4d654 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependencies.java @@ -1,7 +1,7 @@ package org.springframework.sbm.boot.upgrade_27_30.actions; import org.springframework.sbm.boot.upgrade_27_30.conditions.JohnzonDependencyCondition; -import org.springframework.sbm.build.api.BuildFile; +import org.springframework.sbm.build.api.ApplicationModule; import org.springframework.sbm.build.api.Dependency; import org.springframework.sbm.engine.context.ProjectContext; import org.springframework.sbm.engine.recipe.AbstractAction; @@ -9,13 +9,15 @@ public class Boot_27_30_UpgradeReplaceJohnzonDependencies extends AbstractAction { private static final String JOHNZON_DEPENDENCY_PATTERN = "org\\.apache\\.johnzon\\:johnzon-core\\:.*"; - private static final String JOHNZON_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.18-jakarta"; + private static final String JOHNZON_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.18:jakarta"; @Override public void apply(ProjectContext context) { - BuildFile buildFile = context.getBuildFile(); - buildFile.removeDependenciesMatchingRegex(JOHNZON_DEPENDENCY_PATTERN); - buildFile.addDependency(Dependency.fromCoordinates(JOHNZON_DEPENDENCY)); + context.getApplicationModules() + .stream() + .map(ApplicationModule::getBuildFile) + .peek(bf -> bf.removeDependenciesMatchingRegex(JOHNZON_DEPENDENCY_PATTERN)) + .forEach(bf -> bf.addDependency(Dependency.fromCoordinates(JOHNZON_DEPENDENCY))); } @Override diff --git a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java index b17babf36..5e37cbd13 100644 --- a/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java +++ b/components/sbm-recipes-boot-upgrade/src/main/java/org/springframework/sbm/boot/upgrade_27_30/conditions/JohnzonDependencyCondition.java @@ -10,24 +10,17 @@ public class JohnzonDependencyCondition implements Condition { private static final String JOHNZON_DEPENDENCY_PATTERN = "org\\.apache\\.johnzon\\:johnzon-core\\:.*"; - private static final String JOHNZON_IMPORT = "org.apache.johnzon.core"; @Override public String getDescription() { - return "Checks if any of the class in the project imports Apache Johnzon classes or the project has declared dependency on Johnzon library"; + return "Checks if the project has declared dependency on Johnzon library"; } @Override public boolean evaluate(ProjectContext context) { - boolean importCondition = context.getProjectJavaSources() - .asStream() - .anyMatch(js -> js.hasImportStartingWith(JOHNZON_IMPORT)); - - boolean dependencyCondition = context.getApplicationModules() + return context.getApplicationModules() .stream() .map(ApplicationModule::getBuildFile) .anyMatch(b -> b.hasDeclaredDependencyMatchingRegex(JOHNZON_DEPENDENCY_PATTERN)); - - return importCondition || dependencyCondition; } } diff --git a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java index dc65f8750..d0c94eee5 100644 --- a/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java +++ b/components/sbm-recipes-boot-upgrade/src/test/java/org/springframework/sbm/boot/upgrade_27_30/actions/Boot_27_30_UpgradeReplaceJohnzonDependenciesTest.java @@ -4,16 +4,64 @@ import org.springframework.sbm.engine.context.ProjectContext; import org.springframework.sbm.project.resource.TestProjectContext; +import java.nio.file.Path; + import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertFalse; public class Boot_27_30_UpgradeReplaceJohnzonDependenciesTest { - private static final String JOHNZON_UNSUPPORTED_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.11"; - private static final String JAVA_CLASS_WITH_JOHNZON_IMPORT = "package org.spring.boot.migration;" - + "import org.apache.johnzon.core.JsonStringImpl;" - + "public class BootReplaceJohnzonDependencyDummyClass{" - + "}"; + private static final String SELF_MANAGED_JOHNZON_UNSUPPORTED_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.11"; + + + private static final String SPRING_MANAGED_DEPENDENCY_POM = "\n" + + "\n" + + " 4.0.0\n" + + " \n" + + " org.springframework.boot\n" + + " spring-boot-starter-parent\n" + + " 2.7.1\n" + + " \n" + + " \n" + + " com.example\n" + + " dummy-root\n" + + " 0.1.0-SNAPSHOT\n" + + " pom\n" + + " \n" + + " \n" + + " org.apache.johnzon\n" + + " johnzon-core\n" + + " \n" + + " \n" + + "\n" + + "" + + "\n"; + + + private static final String SPRING_MANAGED_DEPENDENCY_EXPECTED_POM = "\n" + + "\n" + + " 4.0.0\n" + + " \n" + + " org.springframework.boot\n" + + " spring-boot-starter-parent\n" + + " 2.7.1\n" + + " \n" + + " \n" + + " com.example\n" + + " dummy-root\n" + + " 0.1.0-SNAPSHOT\n" + + " pom\n" + + " \n" + + " \n" + + " org.apache.johnzon\n" + + " johnzon-core\n" + + " 1.2.18\n" + + " jakarta\n" + + " \n" + + " \n" + + "\n" + + "" + + "\n"; + private static final String EXPECTED_POM = "\n" + "\n" + @@ -26,21 +74,19 @@ public class Boot_27_30_UpgradeReplaceJohnzonDependenciesTest { " \n" + " org.apache.johnzon\n" + " johnzon-core\n" + - " 1.2.18-jakarta\n" + + " 1.2.18\n" + + " jakarta\n" + " \n" + " \n" + "\n" + "" + "\n"; - private static final String JAVA_CLASS_WITHOUT_JOHNZON_IMPORT = "package org.spring.boot.migration;" - + "public class BootReplaceJohnzonDependencyDummyClass{" - + "}"; @Test public void givenProjectWithSelfManagedJohnzonDependency_migrate_expectJohnzonDependencyUpdated(){ - ProjectContext projectContext = getProjectContextWithJohnzonDependency(JAVA_CLASS_WITH_JOHNZON_IMPORT); + ProjectContext projectContext = getProjectContextWithJohnzonDependency(SELF_MANAGED_JOHNZON_UNSUPPORTED_DEPENDENCY); Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies(); upgradeReplaceJohnzonDependencies.apply(projectContext); @@ -50,32 +96,36 @@ public void givenProjectWithSelfManagedJohnzonDependency_migrate_expectJohnzonDe @Test public void givenProjectWithSpringManagedJohnzonDependency_migrate_expectJohnzonDependencyUpdated(){ - ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITH_JOHNZON_IMPORT); + ProjectContext projectContext = getProjectContextWithSpringManagedJohnzonDependency(); Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies(); upgradeReplaceJohnzonDependencies.apply(projectContext); - assertThat(projectContext.getBuildFile().print()).isEqualToIgnoringNewLines(EXPECTED_POM); + assertThat(projectContext.getBuildFile().print()).isEqualToIgnoringNewLines(SPRING_MANAGED_DEPENDENCY_EXPECTED_POM); } @Test - public void givenProjectWithoutJohnzonImport_checkActionApplicability_expectFalse(){ - ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITHOUT_JOHNZON_IMPORT); + public void givenProjectWithoutJohnzonDependency_checkActionApplicability_expectFalse(){ + ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(); Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies(); - assertFalse(upgradeReplaceJohnzonDependencies.isApplicable(projectContext)); + assertThat(upgradeReplaceJohnzonDependencies.isApplicable(projectContext)).isFalse(); } - private ProjectContext getProjectContextWithJohnzonDependency(String... javaSources){ + private ProjectContext getProjectContextWithJohnzonDependency(String dependencyCoordinates){ return TestProjectContext.buildProjectContext() - .withBuildFileHavingDependencies(JOHNZON_UNSUPPORTED_DEPENDENCY) - .withJavaSources(javaSources) + .withBuildFileHavingDependencies(dependencyCoordinates) .build(); } - private ProjectContext getProjectContextWithoutJohnzonDependency(String... javaSources){ + private ProjectContext getProjectContextWithoutJohnzonDependency(){ return TestProjectContext.buildProjectContext() .withDummyRootBuildFile() - .withJavaSources(javaSources) + .build(); + } + + private ProjectContext getProjectContextWithSpringManagedJohnzonDependency(){ + return TestProjectContext.buildProjectContext() + .addProjectResource(Path.of("pom.xml"), SPRING_MANAGED_DEPENDENCY_POM) .build(); } } From 6b3261519e35d3d39fed00ac159ba8a5d1b48ba3 Mon Sep 17 00:00:00 2001 From: Ravi Gupta Date: Wed, 3 Aug 2022 12:46:39 +0530 Subject: [PATCH 4/4] Fixed test case --- .../sbm/build/api/DependencyTest.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/components/sbm-core/src/test/java/org/springframework/sbm/build/api/DependencyTest.java b/components/sbm-core/src/test/java/org/springframework/sbm/build/api/DependencyTest.java index fb28dae19..1da7e29be 100644 --- a/components/sbm-core/src/test/java/org/springframework/sbm/build/api/DependencyTest.java +++ b/components/sbm-core/src/test/java/org/springframework/sbm/build/api/DependencyTest.java @@ -28,9 +28,19 @@ public void handlesErroneousCoordinateInput() { assertThrows(IllegalArgumentException.class, () -> Dependency.fromCoordinates("one")); } + @Test + public void handlesErroneousCoordinateFiveParts() { + assertThrows(IllegalArgumentException.class, () -> Dependency.fromCoordinates("one:two:three:four:five"));; + } + @Test public void handlesErroneousCoordinateFourParts() { - assertThrows(IllegalArgumentException.class, () -> Dependency.fromCoordinates("one:two:three:four")); + Dependency dependency = Dependency.fromCoordinates("one:two:three:four"); + + assertThat(dependency.getGroupId()).isEqualTo("one"); + assertThat(dependency.getArtifactId()).isEqualTo("two"); + assertThat(dependency.getVersion()).isEqualTo("three"); + assertThat(dependency.getClassifier()).isEqualTo("four"); } @Test