Skip to content

Commit 053c1f7

Browse files
committed
spring-projects-experimental#159 Added action for Johnzon upgrade for Spring boot migration 2.7 to 3.x
1 parent 8bdbee3 commit 053c1f7

File tree

3 files changed

+124
-0
lines changed

3 files changed

+124
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.springframework.sbm.boot.upgrade_27_30.actions;
2+
3+
import org.springframework.sbm.boot.upgrade_27_30.filters.JohnzonDependencyCondition;
4+
import org.springframework.sbm.build.api.BuildFile;
5+
import org.springframework.sbm.build.api.Dependency;
6+
import org.springframework.sbm.engine.context.ProjectContext;
7+
import org.springframework.sbm.engine.recipe.AbstractAction;
8+
9+
public class Boot_27_30_UpgradeReplaceJohnzonDependencies extends AbstractAction {
10+
11+
private static final String JHONZON_DEPENDENCY_PATTERN = "org.apache.johnzon:johnzon-core";
12+
private static final String JHONZON_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.18-jakarta";
13+
14+
@Override
15+
public void apply(ProjectContext context) {
16+
BuildFile buildFile = context.getBuildFile();
17+
buildFile.removeDependenciesMatchingRegex(JHONZON_DEPENDENCY_PATTERN);
18+
buildFile.addDependency(Dependency.fromCoordinates(JHONZON_DEPENDENCY));
19+
}
20+
21+
@Override
22+
public boolean isApplicable(ProjectContext context) {
23+
return new JohnzonDependencyCondition().evaluate(context);
24+
}
25+
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.springframework.sbm.boot.upgrade_27_30.filters;
2+
3+
import org.springframework.sbm.engine.context.ProjectContext;
4+
import org.springframework.sbm.engine.recipe.Condition;
5+
import org.springframework.sbm.java.impl.OpenRewriteJavaSource;
6+
7+
/**
8+
* This filter finds out if any of the resource uses Johnzon
9+
*/
10+
public class JohnzonDependencyCondition implements Condition {
11+
12+
@Override
13+
public String getDescription() {
14+
return "Checks if any of the class in the project imports Apache Jhonzon classes";
15+
}
16+
17+
@Override
18+
public boolean evaluate(ProjectContext context) {
19+
return context.getProjectJavaSources()
20+
.asStream()
21+
.anyMatch(js -> js.hasImportStartingWith("org.apache.johnzon.core"));
22+
}
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package org.springframework.sbm.boot.upgrade_27_30.actions;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.springframework.sbm.boot.properties.SpringApplicationPropertiesPathMatcher;
5+
import org.springframework.sbm.boot.properties.SpringBootApplicationPropertiesRegistrar;
6+
import org.springframework.sbm.build.api.Dependency;
7+
import org.springframework.sbm.engine.context.ProjectContext;
8+
import org.springframework.sbm.project.resource.TestProjectContext;
9+
10+
import static org.junit.jupiter.api.Assertions.assertFalse;
11+
import static org.junit.jupiter.api.Assertions.assertTrue;
12+
13+
public class Boot_27_30_UpgradeReplaceJohnzonDependenciesTest {
14+
15+
private static final String JHONZON_UNSUPPORTED_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.11";
16+
private static final String JHONZON_UPDATED_DEPENDENCY = "org.apache.johnzon:johnzon-core:1.2.18-jakarta";
17+
private static final String JAVA_CLASS_WITH_JHONZON_IMPORT = "package org.spring.boot.migration;"
18+
+ "import org.apache.johnzon.core.JsonStringImpl;"
19+
+ "public class BootReplaceJohnzonDependencyDummyClass{"
20+
+ "}";
21+
22+
23+
private static final String JAVA_CLASS_WITHOUT_JHONZON_IMPORT = "package org.spring.boot.migration;"
24+
+ "public class BootReplaceJohnzonDependencyDummyClass{"
25+
+ "}";
26+
27+
28+
@Test
29+
public void givenProjectWithSelfManagedJohnzonDependency_migrate_expectJohnzonDependencyUpdated(){
30+
ProjectContext projectContext = getProjectContextWithJohnzonDependency(JAVA_CLASS_WITH_JHONZON_IMPORT);
31+
Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies();
32+
upgradeReplaceJohnzonDependencies.apply(projectContext);
33+
34+
assertTrue(projectContext
35+
.getBuildFile()
36+
.hasExactDeclaredDependency(Dependency.fromCoordinates(JHONZON_UPDATED_DEPENDENCY))
37+
);
38+
}
39+
40+
41+
@Test
42+
public void givenProjectWithSpringManagedJohnzonDependency_migrate_expectJohnzonDependencyUpdated(){
43+
ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITH_JHONZON_IMPORT);
44+
Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies();
45+
upgradeReplaceJohnzonDependencies.apply(projectContext);
46+
47+
assertTrue(projectContext
48+
.getBuildFile()
49+
.hasExactDeclaredDependency(Dependency.fromCoordinates(JHONZON_UPDATED_DEPENDENCY))
50+
);
51+
}
52+
53+
@Test
54+
public void givenProjectWithoutJohnzonImport_checkActionApplicability_expectFalse(){
55+
ProjectContext projectContext = getProjectContextWithoutJohnzonDependency(JAVA_CLASS_WITHOUT_JHONZON_IMPORT);
56+
Boot_27_30_UpgradeReplaceJohnzonDependencies upgradeReplaceJohnzonDependencies = new Boot_27_30_UpgradeReplaceJohnzonDependencies();
57+
58+
assertFalse(upgradeReplaceJohnzonDependencies.isApplicable(projectContext));
59+
}
60+
61+
private ProjectContext getProjectContextWithJohnzonDependency(String... javaSources){
62+
return TestProjectContext.buildProjectContext()
63+
.withBuildFileHavingDependencies(JHONZON_UNSUPPORTED_DEPENDENCY)
64+
.withJavaSources(javaSources)
65+
.build();
66+
}
67+
68+
private ProjectContext getProjectContextWithoutJohnzonDependency(String... javaSources){
69+
return TestProjectContext.buildProjectContext()
70+
.withDummyRootBuildFile()
71+
.withJavaSources(javaSources)
72+
.addRegistrar(new SpringBootApplicationPropertiesRegistrar(new SpringApplicationPropertiesPathMatcher()))
73+
.build();
74+
}
75+
}

0 commit comments

Comments
 (0)