From fbe6452bdb5ef139156d146485224f9a76b81478 Mon Sep 17 00:00:00 2001 From: Markus Ofterdinger Date: Wed, 16 Sep 2026 13:53:49 +0200 Subject: [PATCH 1/2] Refactor POM files and improve code formatting across the project --- pom.xml | 300 +++++++------- srv/pom.xml | 375 +++++++++--------- .../main/java/my/bookshop/Application.java | 32 +- .../my/bookshop/SimpleIntegrationTest.java | 48 ++- .../config/DatabaseConfiguration.java | 21 +- .../my/bookshop/config/TestApplication.java | 9 +- 6 files changed, 406 insertions(+), 379 deletions(-) diff --git a/pom.xml b/pom.xml index 7123cc1a..a2cae0f9 100644 --- a/pom.xml +++ b/pom.xml @@ -1,151 +1,177 @@ - - 4.0.0 + + + 4.0.0 - my - bookshop-parent - ${revision} - pom + my + bookshop-parent + ${revision} + pom - bookshop parent + bookshop parent - - - 1.0.0-SNAPSHOT + + srv + - - 25 - 5.1.1 - 4.1.1 - 4.3.0 - 1.21.4 - UTF-8 - + + + 1.0.0-SNAPSHOT - - srv - + + 25 + 5.1.1 + 4.1.1 + 4.3.0 + 1.21.4 + UTF-8 + - - - - - com.sap.cds - cds-services-bom - ${cds.services.version} - pom - import - + + + + + com.sap.cds + cds-services-bom + ${cds.services.version} + pom + import + - - - org.springframework.boot - spring-boot-dependencies - ${spring.boot.version} - pom - import - - - + + + org.springframework.boot + spring-boot-dependencies + ${spring.boot.version} + pom + import + + + - - - - - - com.sap.cds - cds-maven-plugin - ${cds.services.version} - - - + + + + + + com.sap.cds + cds-maven-plugin + ${cds.services.version} + + + - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.16.0 - - ${jdk.version} - UTF-8 - - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.16.0 + + ${jdk.version} + UTF-8 + + - - - org.springframework.boot - spring-boot-maven-plugin - ${spring.boot.version} - - true - - + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + true + + - - - org.apache.maven.plugins - maven-surefire-plugin - 3.6.0 - - true - - + + + org.apache.maven.plugins + maven-surefire-plugin + 3.6.0 + + true + + - - - org.codehaus.mojo - flatten-maven-plugin - 1.8.0 - - true - resolveCiFriendliesOnly - - - - flatten - process-resources - - flatten - - - - flatten.clean - clean - - clean - - - - + + + org.codehaus.mojo + flatten-maven-plugin + 1.8.0 + + true + resolveCiFriendliesOnly + + + + flatten + + flatten + + process-resources + + + flatten.clean + + clean + + clean + + + - - - org.apache.maven.plugins - maven-enforcer-plugin - 3.6.3 - - - Project Structure Checks - - enforce - - - - - 3.9.14 - - - ${jdk.version} - - - - true - - - - - - + + + org.apache.maven.plugins + maven-enforcer-plugin + 3.6.3 + + + Project Structure Checks + + enforce + + + + + 3.9.14 + + + ${jdk.version} + + + + true + + + + + + + com.diffplug.spotless + spotless-maven-plugin + 3.10.2 + + + + + + + + + pom.xml + + + + + + + + check + + process-sources + + + + + diff --git a/srv/pom.xml b/srv/pom.xml index 8374bb0b..99797f1a 100644 --- a/srv/pom.xml +++ b/srv/pom.xml @@ -1,190 +1,189 @@ - - 4.0.0 - - - bookshop-parent - my - ${revision} - - - bookshop - jar - - bookshop - - - - - - com.sap.cds - cds-starter-spring-boot - - - - com.sap.cds - cds-starter-cloudfoundry - runtime - - - com.sap.cds - cds-feature-hana - - - com.sap.cds - cds-feature-mt - - - - - - com.sap.cds - cds-adapter-odata-v4 - runtime - - - - com.sap.cds - cds-feature-postgresql - runtime - - - - org.springframework.boot - spring-boot-starter-liquibase - runtime - - - - com.sap.hcp.cf.logging - cf-java-logging-support-servlet - ${cf-java-logging-support.version} - - - - com.sap.hcp.cf.logging - cf-java-logging-support-logback - ${cf-java-logging-support.version} - - - - org.springframework.boot - spring-boot-testcontainers - test - - - - org.springframework.boot - spring-boot-starter-test - test - - - - org.springframework.boot - spring-boot-starter-webmvc-test - test - - - - org.springframework.boot - spring-boot-starter-security-test - test - - - - org.springframework.boot - spring-boot-devtools - true - - - - org.testcontainers - postgresql - ${testcontainers.version} - test - - - - - bookshop - - - - org.springframework.boot - spring-boot-maven-plugin - ${spring.boot.version} - - false - - - - repackage - - repackage - - - exec - - - - - - - - com.sap.cds - cds-maven-plugin - - - cds.clean - - clean - - - - - cds.install-node - - install-node - - - - - cds.npm-ci - - npm - - - ci - - - - - cds.build - - cds - - - - build --for java - deploy --profile pg --dry --delta-from srv/src/main/resources/db/changelog/v3/model.csn > + + + 4.0.0 + + + my + bookshop-parent + ${revision} + + + bookshop + jar + + bookshop + + + + + + com.sap.cds + cds-starter-spring-boot + + + + com.sap.cds + cds-starter-cloudfoundry + runtime + + + com.sap.cds + cds-feature-hana + + + com.sap.cds + cds-feature-mt + + + + + + com.sap.cds + cds-adapter-odata-v4 + runtime + + + + com.sap.cds + cds-feature-postgresql + runtime + + + + org.springframework.boot + spring-boot-starter-liquibase + runtime + + + + com.sap.hcp.cf.logging + cf-java-logging-support-servlet + ${cf-java-logging-support.version} + + + + com.sap.hcp.cf.logging + cf-java-logging-support-logback + ${cf-java-logging-support.version} + + + + org.springframework.boot + spring-boot-testcontainers + test + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter-webmvc-test + test + + + + org.springframework.boot + spring-boot-starter-security-test + test + + + + org.springframework.boot + spring-boot-devtools + true + + + + org.testcontainers + postgresql + ${testcontainers.version} + test + + + + + bookshop + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + false + + + + repackage + + repackage + + + exec + + + + + + + + com.sap.cds + cds-maven-plugin + + + cds.clean + + clean + + + + + cds.install-node + + install-node + + + + + cds.npm-ci + + npm + + + ci + + + + + cds.build + + cds + + + + build --for java + deploy --profile pg --dry --delta-from srv/src/main/resources/db/changelog/v3/model.csn > srv/src/main/resources/db/changelog/dev/model.sql - deploy --model-only --dry > srv/src/main/resources/db/changelog/dev/model.csn - - - - - - cds.generate - - generate - - - cds.gen - - - - - - + deploy --model-only --dry > srv/src/main/resources/db/changelog/dev/model.csn + + + + + + cds.generate + + generate + + + cds.gen + + + + + + diff --git a/srv/src/main/java/my/bookshop/Application.java b/srv/src/main/java/my/bookshop/Application.java index d4ab598c..406183e8 100644 --- a/srv/src/main/java/my/bookshop/Application.java +++ b/srv/src/main/java/my/bookshop/Application.java @@ -1,29 +1,27 @@ package my.bookshop; +import com.sap.hcp.cf.logging.servlet.filter.RequestLoggingFilter; +import jakarta.servlet.DispatcherType; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; -import com.sap.hcp.cf.logging.servlet.filter.RequestLoggingFilter; - -import jakarta.servlet.DispatcherType; - @SpringBootApplication public class Application { - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } - - @Bean - public FilterRegistrationBean loggingFilter() { - FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>(); - filterRegistrationBean.setFilter(new RequestLoggingFilter()); - filterRegistrationBean.setName("request-logging"); - filterRegistrationBean.addUrlPatterns("/*"); - filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST); - return filterRegistrationBean; - } + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + @Bean + public FilterRegistrationBean loggingFilter() { + FilterRegistrationBean filterRegistrationBean = + new FilterRegistrationBean<>(); + filterRegistrationBean.setFilter(new RequestLoggingFilter()); + filterRegistrationBean.setName("request-logging"); + filterRegistrationBean.addUrlPatterns("/*"); + filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST); + return filterRegistrationBean; + } } diff --git a/srv/src/test/java/my/bookshop/SimpleIntegrationTest.java b/srv/src/test/java/my/bookshop/SimpleIntegrationTest.java index 6047125f..e86dc00c 100644 --- a/srv/src/test/java/my/bookshop/SimpleIntegrationTest.java +++ b/srv/src/test/java/my/bookshop/SimpleIntegrationTest.java @@ -1,37 +1,41 @@ package my.bookshop; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; import org.springframework.http.MediaType; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.web.servlet.MockMvc; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - @SpringBootTest @AutoConfigureMockMvc class SimpleIntegrationTest { - @Autowired - MockMvc client; - - @Test - void booksAreReadable() throws Exception { - client.perform(get("/api/browse/Books").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()); - } - - @Test - @WithMockUser("admin") - void booksAreManageable() throws Exception { - client.perform(get("/api/admin/Books").accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk()); - } - - @Test - void booksAreProtected() throws Exception { - client.perform(get("/api/admin/Books").accept(MediaType.APPLICATION_JSON)).andExpect(status().isUnauthorized()); - } + @Autowired MockMvc client; + + @Test + void booksAreReadable() throws Exception { + client + .perform(get("/api/browse/Books").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + @WithMockUser("admin") + void booksAreManageable() throws Exception { + client + .perform(get("/api/admin/Books").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + void booksAreProtected() throws Exception { + client + .perform(get("/api/admin/Books").accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isUnauthorized()); + } } diff --git a/srv/src/test/java/my/bookshop/config/DatabaseConfiguration.java b/srv/src/test/java/my/bookshop/config/DatabaseConfiguration.java index 7fb12857..b44a066f 100644 --- a/srv/src/test/java/my/bookshop/config/DatabaseConfiguration.java +++ b/srv/src/test/java/my/bookshop/config/DatabaseConfiguration.java @@ -11,15 +11,16 @@ @Configuration public class DatabaseConfiguration { - private static final String POSTGRES = "postgres"; - private static final Logger postgresLogger = LoggerFactory.getLogger(POSTGRES); - - @Bean - @ServiceConnection - PostgreSQLContainer postgresContainer(@Value("${my.bookshop.postgres-image}") String imageName) { - DockerImageName image = DockerImageName.parse(imageName).asCompatibleSubstituteFor(POSTGRES); - return new PostgreSQLContainer<>(image) - .withLogConsumer(outputFrame -> postgresLogger.info(outputFrame.getUtf8StringWithoutLineEnding())); - } + private static final String POSTGRES = "postgres"; + private static final Logger postgresLogger = LoggerFactory.getLogger(POSTGRES); + @Bean + @ServiceConnection + PostgreSQLContainer postgresContainer( + @Value("${my.bookshop.postgres-image}") String imageName) { + DockerImageName image = DockerImageName.parse(imageName).asCompatibleSubstituteFor(POSTGRES); + return new PostgreSQLContainer<>(image) + .withLogConsumer( + outputFrame -> postgresLogger.info(outputFrame.getUtf8StringWithoutLineEnding())); + } } diff --git a/srv/src/test/java/my/bookshop/config/TestApplication.java b/srv/src/test/java/my/bookshop/config/TestApplication.java index ff9d5c02..720d6b19 100644 --- a/srv/src/test/java/my/bookshop/config/TestApplication.java +++ b/srv/src/test/java/my/bookshop/config/TestApplication.java @@ -1,15 +1,14 @@ package my.bookshop.config; +import my.bookshop.Application; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import my.bookshop.Application; - // Use this Application instead of the main one to run the app from the IDE @SpringBootApplication public class TestApplication { - public static void main(String[] args) { - SpringApplication.from(Application::main).run(args); - } + public static void main(String[] args) { + SpringApplication.from(Application::main).run(args); + } } From 307f320d046dc26a8735aa7c1f4d27a79b4d5d7e Mon Sep 17 00:00:00 2001 From: Markus Ofterdinger Date: Wed, 16 Sep 2026 14:24:46 +0200 Subject: [PATCH 2/2] fix: update line references for Node.js installation and npm commands in README --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fab18d6d..5ea92271 100644 --- a/README.md +++ b/README.md @@ -59,10 +59,10 @@ User Interface related Features: CDS Maven Plugin Features: -- Install [Node.js](srv/pom.xml#L161) in the default version. -- Execute arbitrary [npm](srv/pom.xml#L161) commands. -- [Generate](srv/pom.xml#L193) Java POJOs for type-safe access to the CDS model. -- [Clean](srv/pom.xml#L154) project from artifacts of the previous build. +- Install [Node.js](srv/pom.xml#L147) in the default version. +- Execute arbitrary [npm](srv/pom.xml#L164) commands. +- [Generate](srv/pom.xml#L179) Java POJOs for type-safe access to the CDS model. +- [Clean](srv/pom.xml#L140) project from artifacts of the previous build. # Getting Started