Skip to content

Commit 70adc03

Browse files
committed
wip: Extract Jax-RS recipes to run in OR
1 parent 6fdf41f commit 70adc03

File tree

98 files changed

+13302
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+13302
-0
lines changed

components/jaxrs-recipes/pom.xml

Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
~ Copyright 2021 - 2022 the original author or authors.
4+
~
5+
~ Licensed under the Apache License, Version 2.0 (the "License");
6+
~ you may not use this file except in compliance with the License.
7+
~ You may obtain a copy of the License at
8+
~
9+
~ https://www.apache.org/licenses/LICENSE-2.0
10+
~
11+
~ Unless required by applicable law or agreed to in writing, software
12+
~ distributed under the License is distributed on an "AS IS" BASIS,
13+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
~ See the License for the specific language governing permissions and
15+
~ limitations under the License.
16+
-->
17+
18+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
19+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
20+
<modelVersion>4.0.0</modelVersion>
21+
22+
<!-- <parent>-->
23+
<!-- <groupId>org.springframework.sbm</groupId>-->
24+
<!-- <artifactId>spring-boot-migrator</artifactId>-->
25+
<!-- <version>0.15.2-SNAPSHOT</version>-->
26+
<!-- <relativePath>../..</relativePath>-->
27+
<!-- </parent>-->
28+
<groupId>org.springframework.sbm</groupId>
29+
<artifactId>jaxrs-recipes</artifactId>
30+
<version>0.15.2-SNAPSHOT</version>
31+
<packaging>jar</packaging>
32+
33+
<properties>
34+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
35+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
36+
<jaxb-maven-plugin.version>2.5.0</jaxb-maven-plugin.version>
37+
<maven.compiler.target>17</maven.compiler.target>
38+
<maven.compiler.source>17</maven.compiler.source>
39+
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
40+
<java.version>17</java.version>
41+
<spring-shell.version>2.1.14</spring-shell.version>
42+
<openrewrite.version>8.29.0</openrewrite.version>
43+
<openrewrite.spring.version>4.32.0</openrewrite.spring.version>
44+
<rewrite-migrate-java.version>1.17.0</rewrite-migrate-java.version>
45+
<spring-boot.version>3.3.1</spring-boot.version>
46+
<progressbar.version>0.10.0</progressbar.version>
47+
<testcontainers.version>1.19.1</testcontainers.version>
48+
<maven-invoker.version>3.2.0</maven-invoker.version>
49+
<shrinkwrap.resolvers.version>3.1.4</shrinkwrap.resolvers.version>
50+
<lombok.version>1.18.30</lombok.version>
51+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
52+
<project.csvParser.outputEncoding>UTF-8</project.csvParser.outputEncoding>
53+
<generated-sources.dir>src/generated/java</generated-sources.dir>
54+
<snakeyaml.version>1.33</snakeyaml.version>
55+
<spring-asciidoctor-backends.version>0.0.7</spring-asciidoctor-backends.version>
56+
</properties>
57+
58+
<dependencyManagement>
59+
<dependencies>
60+
<dependency>
61+
<groupId>org.springframework.boot</groupId>
62+
<artifactId>spring-boot-dependencies</artifactId>
63+
<version>${spring-boot.version}</version>
64+
<type>pom</type>
65+
<scope>import</scope>
66+
</dependency>
67+
</dependencies>
68+
</dependencyManagement>
69+
70+
<dependencies>
71+
<!-- Required or dependencies, previously transitively -->
72+
<dependency>
73+
<groupId>org.openrewrite</groupId>
74+
<artifactId>rewrite-core</artifactId>
75+
<version>${openrewrite.version}</version>
76+
</dependency>
77+
<dependency>
78+
<groupId>org.openrewrite</groupId>
79+
<artifactId>rewrite-java</artifactId>
80+
<version>${openrewrite.version}</version>
81+
</dependency>
82+
83+
84+
<dependency>
85+
<groupId>org.springframework.sbm</groupId>
86+
<artifactId>sbm-core</artifactId>
87+
<version>${project.version}</version>
88+
<exclusions>
89+
<exclusion>
90+
<groupId>org.openrewrite</groupId>
91+
<artifactId>rewrite-java</artifactId>
92+
</exclusion>
93+
<exclusion>
94+
<groupId>org.openrewrite</groupId>
95+
<artifactId>rewrite-core</artifactId>
96+
</exclusion>
97+
</exclusions>
98+
</dependency>
99+
<!-- <dependency>-->
100+
<!-- <groupId>org.springframework.sbm</groupId>-->
101+
<!-- <artifactId>sbm-support-boot</artifactId>-->
102+
<!-- <version>0.15.2-SNAPSHOT</version>-->
103+
<!-- </dependency>-->
104+
105+
<dependency>
106+
<groupId>com.tngtech.archunit</groupId>
107+
<artifactId>archunit-junit5</artifactId>
108+
<version>1.2.0</version>
109+
</dependency>
110+
<dependency>
111+
<groupId>org.springframework.sbm</groupId>
112+
<artifactId>sbm-support-jee</artifactId>
113+
<version>0.15.2-SNAPSHOT</version>
114+
<exclusions>
115+
<exclusion>
116+
<groupId>org.springframework.sbm</groupId>
117+
<artifactId>sbm-core</artifactId>
118+
</exclusion>
119+
</exclusions>
120+
</dependency>
121+
122+
<!-- Override Jackson coming from spring boot -->
123+
<!-- <dependency>-->
124+
<!-- <groupId>com.fasterxml.jackson.dataformat</groupId>-->
125+
<!-- <artifactId>jackson-dataformat-xml</artifactId>-->
126+
<!-- <version>${jackson.version}</version>-->
127+
<!-- </dependency>-->
128+
<!-- <dependency>-->
129+
<!-- <groupId>com.fasterxml.jackson.dataformat</groupId>-->
130+
<!-- <artifactId>jackson-dataformat-smile</artifactId>-->
131+
<!-- <version>${jackson.version}</version>-->
132+
<!-- </dependency>-->
133+
<!-- <dependency>-->
134+
<!-- <groupId>com.fasterxml.jackson.core</groupId>-->
135+
<!-- <artifactId>jackson-core</artifactId>-->
136+
<!-- <version>${jackson.version}</version>-->
137+
<!-- </dependency>-->
138+
<!-- <dependency>-->
139+
<!-- <groupId>com.fasterxml.jackson.core</groupId>-->
140+
<!-- <artifactId>jackson-databind</artifactId>-->
141+
<!-- <version>${jackson.version}</version>-->
142+
<!-- </dependency>-->
143+
<!-- <dependency>-->
144+
<!-- <groupId>com.fasterxml.jackson.core</groupId>-->
145+
<!-- <artifactId>jackson-annotations</artifactId>-->
146+
<!-- <version>${jackson.version}</version>-->
147+
<!-- </dependency>-->
148+
<!-- <dependency>-->
149+
<!-- <groupId>com.fasterxml.jackson.datatype</groupId>-->
150+
<!-- <artifactId>jackson-datatype-jdk8</artifactId>-->
151+
<!-- <version>${jackson.version}</version>-->
152+
<!-- </dependency>-->
153+
<!-- <dependency>-->
154+
<!-- <groupId>com.fasterxml.jackson.dataformat</groupId>-->
155+
<!-- <artifactId>jackson-dataformat-yaml</artifactId>-->
156+
<!-- <version>${jackson.version}</version>-->
157+
<!-- </dependency>-->
158+
159+
<!-- TODO: why? remove ? -->
160+
<dependency>
161+
<groupId>org.aspectj</groupId>
162+
<artifactId>aspectjweaver</artifactId>
163+
<version>1.9.7</version>
164+
</dependency>
165+
166+
<!-- TODO: remove as these are (probably) only required in sbm-spport-jee -->
167+
<dependency>
168+
<groupId>javax.xml.bind</groupId>
169+
<artifactId>jaxb-api</artifactId>
170+
<version>2.3.1</version>
171+
</dependency>
172+
<dependency>
173+
<groupId>org.glassfish.jaxb</groupId>
174+
<artifactId>jaxb-runtime</artifactId>
175+
<version>2.3.3</version>
176+
</dependency>
177+
178+
<dependency>
179+
<groupId>org.springframework.sbm</groupId>
180+
<artifactId>test-helper</artifactId>
181+
<version>${project.version}</version>
182+
<scope>test</scope>
183+
</dependency>
184+
<!-- <dependency>-->
185+
<!-- <groupId>org.springframework.sbm</groupId>-->
186+
<!-- <artifactId>sbm-openrewrite</artifactId>-->
187+
<!-- <type>test-jar</type>-->
188+
<!-- <version>${project.version}</version>-->
189+
<!-- <scope>test</scope>-->
190+
<!-- </dependency>-->
191+
<dependency>
192+
<groupId>org.springframework.boot</groupId>
193+
<artifactId>spring-boot-starter-test</artifactId>
194+
<scope>test</scope>
195+
</dependency>
196+
<dependency>
197+
<groupId>org.springframework.sbm</groupId>
198+
<artifactId>recipe-test-support</artifactId>
199+
<version>${project.version}</version>
200+
<scope>test</scope>
201+
<exclusions>
202+
<exclusion>
203+
<groupId>org.springframework.sbm</groupId>
204+
<artifactId>sbm-core</artifactId>
205+
</exclusion>
206+
</exclusions>
207+
</dependency>
208+
<dependency>
209+
<groupId>org.springframework.sbm</groupId>
210+
<artifactId>sbm-core</artifactId>
211+
<version>0.15.2-SNAPSHOT</version>
212+
<classifier>tests</classifier>
213+
<scope>test</scope>
214+
</dependency>
215+
<dependency>
216+
<groupId>org.openrewrite</groupId>
217+
<artifactId>rewrite-core</artifactId>
218+
<version>8.29.0</version>
219+
<scope>compile</scope>
220+
</dependency>
221+
<!-- <dependency>-->
222+
<!-- <groupId>org.junit-pioneer</groupId>-->
223+
<!-- <artifactId>junit-pioneer</artifactId>-->
224+
<!-- <version>2.1.0</version>-->
225+
<!-- <scope>test</scope>-->
226+
<!-- </dependency>-->
227+
</dependencies>
228+
<!-- <build>-->
229+
<!-- <plugins>-->
230+
<!-- <plugin>-->
231+
<!-- <groupId>org.apache.maven.plugins</groupId>-->
232+
<!-- <artifactId>maven-jar-plugin</artifactId>-->
233+
<!-- <version>3.3.0</version>-->
234+
<!-- <executions>-->
235+
<!-- <execution>-->
236+
<!-- <phase>package</phase>-->
237+
<!-- <goals>-->
238+
<!-- <goal>test-jar</goal>-->
239+
<!-- </goals>-->
240+
<!-- </execution>-->
241+
<!-- </executions>-->
242+
<!-- </plugin>-->
243+
<!-- </plugins>-->
244+
<!-- </build>-->
245+
</project>
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
/*
2+
* Copyright 2021 - 2023 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package example.recipe;
17+
18+
19+
import org.jetbrains.annotations.NotNull;
20+
import org.openrewrite.*;
21+
import org.openrewrite.internal.lang.Nullable;
22+
import org.springframework.rewrite.parser.JavaParserBuilder;
23+
import org.springframework.rewrite.resource.ProjectResourceSet;
24+
import org.springframework.rewrite.resource.ProjectResourceSetFactory;
25+
import org.springframework.rewrite.resource.RewriteMigrationResultMerger;
26+
import org.springframework.rewrite.resource.RewriteSourceFileWrapper;
27+
import org.springframework.sbm.engine.context.ProjectContext;
28+
import org.springframework.sbm.engine.context.ProjectContextFactory;
29+
import org.springframework.sbm.java.refactoring.JavaRefactoringFactory;
30+
import org.springframework.sbm.java.refactoring.JavaRefactoringFactoryImpl;
31+
import org.springframework.sbm.java.util.BasePackageCalculator;
32+
import org.springframework.sbm.jee.jaxrs.actions.ConvertJaxRsAnnotations;
33+
import org.springframework.sbm.project.resource.ProjectResourceSetHolder;
34+
import org.springframework.sbm.project.resource.ProjectResourceWrapper;
35+
import org.springframework.sbm.project.resource.ProjectResourceWrapperRegistry;
36+
import org.springframework.sbm.project.resource.SbmApplicationProperties;
37+
38+
import java.nio.file.Path;
39+
import java.util.ArrayList;
40+
import java.util.List;
41+
42+
/**
43+
* @author Fabian Krüger
44+
*/
45+
public class SbmAdapterRecipe extends Recipe {
46+
47+
48+
49+
@Override
50+
public @NlsRewrite.DisplayName String getDisplayName() {
51+
return "";
52+
}
53+
54+
@Override
55+
public @NlsRewrite.Description String getDescription() {
56+
return "";
57+
}
58+
59+
public SbmAdapterRecipe() {
60+
61+
}
62+
63+
@Override
64+
public TreeVisitor<?, ExecutionContext> getVisitor() {
65+
return new TreeVisitor<Tree, ExecutionContext>() {
66+
67+
private ProjectResourceSetFactory projectResourceSetFactory;
68+
private ProjectContextFactory projectContextFactory;
69+
70+
@Override
71+
public void visit(@Nullable List<? extends Tree> nodes, ExecutionContext executionContext) {
72+
73+
// create the required classes
74+
initBeans(executionContext);
75+
76+
// transform nodes to SourceFiles
77+
List<SourceFile> sourceFiles = nodes.stream().filter(SourceFile.class::isInstance).map(SourceFile.class::cast).toList();
78+
79+
// FIXME: base dir calculation is fake
80+
Path baseDir = executionContext.getMessage("base.dir");
81+
82+
// Create the SBM resource set abstraction
83+
ProjectResourceSet projectResourceSet = projectResourceSetFactory.create(baseDir, sourceFiles);
84+
// Create the SBM ProjectContext
85+
ProjectContext pc = projectContextFactory.createProjectContext(baseDir, projectResourceSet);
86+
87+
// Execute the SBM Action = the JAXRS Recipe
88+
new ConvertJaxRsAnnotations().apply(pc);
89+
90+
// Merge back result
91+
List<? extends Tree> modifiedNodes = merge(nodes, pc.getProjectResources());
92+
93+
// Process other
94+
super.visit(modifiedNodes, executionContext);
95+
}
96+
97+
private void initBeans(ExecutionContext executionContext) {
98+
RewriteSourceFileWrapper sourceFileWrapper = new RewriteSourceFileWrapper();
99+
SbmApplicationProperties sbmApplicationProperties = new SbmApplicationProperties();
100+
JavaParserBuilder parserBuilder = new JavaParserBuilder();
101+
List<ProjectResourceWrapper> projectResourceWrappers = new ArrayList<>();
102+
103+
RewriteMigrationResultMerger merger = new RewriteMigrationResultMerger(sourceFileWrapper);
104+
ProjectResourceSetHolder holder = new ProjectResourceSetHolder(executionContext, merger);
105+
106+
projectResourceSetFactory = new ProjectResourceSetFactory(new RewriteMigrationResultMerger(sourceFileWrapper), sourceFileWrapper, executionContext);
107+
ProjectResourceWrapperRegistry registry = new ProjectResourceWrapperRegistry(projectResourceWrappers);
108+
JavaRefactoringFactory refactoringFactory = new JavaRefactoringFactoryImpl(holder, executionContext);
109+
BasePackageCalculator calculator = new BasePackageCalculator(sbmApplicationProperties);
110+
111+
ProjectResourceSetFactory resourceSetFactory = new ProjectResourceSetFactory(merger, sourceFileWrapper, executionContext);
112+
113+
projectContextFactory = new ProjectContextFactory(registry, holder, refactoringFactory, calculator, parserBuilder, executionContext, merger, resourceSetFactory);
114+
}
115+
};
116+
}
117+
118+
private List<? extends Tree> merge(List<? extends Tree> nodes, ProjectResourceSet projectResources) {
119+
// merge the changed results into the given list and return the result
120+
return new ArrayList<>();
121+
}
122+
123+
}

0 commit comments

Comments
 (0)