From 145f89e6e2f56d22ccbf3c25e92a0dd40317b413 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hallvard=20Tr=C3=A6tteberg?= <hal@ntnu.no> Date: Sun, 26 Sep 2021 10:33:34 +0000 Subject: [PATCH] First attempt at modularization --- todolist/core/src/main/java/module-info.java | 6 ++++++ .../java/todolist/json/TodoPersistence.java | 18 ++++++++++++++++-- .../{ => internal}/TodoItemDeserializer.java | 2 +- .../{ => internal}/TodoItemSerializer.java | 2 +- .../{ => internal}/TodoListDeserializer.java | 2 +- .../{ => internal}/TodoListSerializer.java | 2 +- .../{ => internal}/TodoModelDeserializer.java | 2 +- .../{ => internal}/TodoModelSerializer.java | 2 +- .../json/{ => internal}/TodoModule.java | 2 +- .../java/todolist/json/TodoModuleTest.java | 1 + todolist/fxui/src/main/java/module-info.java | 14 ++++++++++++++ .../todolist/ui/RemoteTodoModelAccess.java | 5 ++--- todolist/fxutil/src/main/java/module-info.java | 8 ++++++++ todolist/rest/pom.xml | 9 +++++++-- todolist/rest/src/main/java/module-info.java | 12 ++++++++++++ .../TodoModuleObjectMapperProvider.java | 4 ++-- .../todolist/restserver/TodoServiceTest.java | 2 +- .../restserver/src/main/java/module-info.java | 8 ++++++++ .../restserver/TodoModelApplication.java | 6 ++++-- .../restserver/TodoModelApplicationTest.java | 4 ++-- 20 files changed, 90 insertions(+), 21 deletions(-) create mode 100644 todolist/core/src/main/java/module-info.java rename todolist/core/src/main/java/todolist/json/{ => internal}/TodoItemDeserializer.java (97%) rename todolist/core/src/main/java/todolist/json/{ => internal}/TodoItemSerializer.java (96%) rename todolist/core/src/main/java/todolist/json/{ => internal}/TodoListDeserializer.java (98%) rename todolist/core/src/main/java/todolist/json/{ => internal}/TodoListSerializer.java (97%) rename todolist/core/src/main/java/todolist/json/{ => internal}/TodoModelDeserializer.java (97%) rename todolist/core/src/main/java/todolist/json/{ => internal}/TodoModelSerializer.java (97%) rename todolist/core/src/main/java/todolist/json/{ => internal}/TodoModule.java (97%) create mode 100644 todolist/fxui/src/main/java/module-info.java create mode 100644 todolist/fxutil/src/main/java/module-info.java create mode 100644 todolist/rest/src/main/java/module-info.java create mode 100644 todolist/springboot/restserver/src/main/java/module-info.java diff --git a/todolist/core/src/main/java/module-info.java b/todolist/core/src/main/java/module-info.java new file mode 100644 index 0000000..baf3e83 --- /dev/null +++ b/todolist/core/src/main/java/module-info.java @@ -0,0 +1,6 @@ +module todolist.core { + requires transitive com.fasterxml.jackson.databind; + + exports todolist.core; + exports todolist.json; +} diff --git a/todolist/core/src/main/java/todolist/json/TodoPersistence.java b/todolist/core/src/main/java/todolist/json/TodoPersistence.java index e4816eb..99c653f 100644 --- a/todolist/core/src/main/java/todolist/json/TodoPersistence.java +++ b/todolist/core/src/main/java/todolist/json/TodoPersistence.java @@ -1,6 +1,9 @@ package todolist.json; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; + + import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; @@ -9,7 +12,10 @@ import java.io.Writer; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; + + import todolist.core.TodoModel; +import todolist.json.internal.TodoModule; /** * Wrapper class for JSON serialization, @@ -20,8 +26,16 @@ public class TodoPersistence { private ObjectMapper mapper; public TodoPersistence() { - mapper = new ObjectMapper(); - mapper.registerModule(new TodoModule()); + mapper = createObjectMapper(); + } + + public static SimpleModule createJacksonModule(boolean deep) { + return new TodoModule(deep); + } + + public static ObjectMapper createObjectMapper() { + return new ObjectMapper() + .registerModule(createJacksonModule(true)); } public TodoModel readTodoModel(Reader reader) throws IOException { diff --git a/todolist/core/src/main/java/todolist/json/TodoItemDeserializer.java b/todolist/core/src/main/java/todolist/json/internal/TodoItemDeserializer.java similarity index 97% rename from todolist/core/src/main/java/todolist/json/TodoItemDeserializer.java rename to todolist/core/src/main/java/todolist/json/internal/TodoItemDeserializer.java index 1279de0..1c22f4c 100644 --- a/todolist/core/src/main/java/todolist/json/TodoItemDeserializer.java +++ b/todolist/core/src/main/java/todolist/json/internal/TodoItemDeserializer.java @@ -1,4 +1,4 @@ -package todolist.json; +package todolist.json.internal; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/todolist/core/src/main/java/todolist/json/TodoItemSerializer.java b/todolist/core/src/main/java/todolist/json/internal/TodoItemSerializer.java similarity index 96% rename from todolist/core/src/main/java/todolist/json/TodoItemSerializer.java rename to todolist/core/src/main/java/todolist/json/internal/TodoItemSerializer.java index e3f2ef4..f52fe40 100644 --- a/todolist/core/src/main/java/todolist/json/TodoItemSerializer.java +++ b/todolist/core/src/main/java/todolist/json/internal/TodoItemSerializer.java @@ -1,4 +1,4 @@ -package todolist.json; +package todolist.json.internal; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; diff --git a/todolist/core/src/main/java/todolist/json/TodoListDeserializer.java b/todolist/core/src/main/java/todolist/json/internal/TodoListDeserializer.java similarity index 98% rename from todolist/core/src/main/java/todolist/json/TodoListDeserializer.java rename to todolist/core/src/main/java/todolist/json/internal/TodoListDeserializer.java index e0da113..953611e 100644 --- a/todolist/core/src/main/java/todolist/json/TodoListDeserializer.java +++ b/todolist/core/src/main/java/todolist/json/internal/TodoListDeserializer.java @@ -1,4 +1,4 @@ -package todolist.json; +package todolist.json.internal; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/todolist/core/src/main/java/todolist/json/TodoListSerializer.java b/todolist/core/src/main/java/todolist/json/internal/TodoListSerializer.java similarity index 97% rename from todolist/core/src/main/java/todolist/json/TodoListSerializer.java rename to todolist/core/src/main/java/todolist/json/internal/TodoListSerializer.java index d6d6339..1124d68 100644 --- a/todolist/core/src/main/java/todolist/json/TodoListSerializer.java +++ b/todolist/core/src/main/java/todolist/json/internal/TodoListSerializer.java @@ -1,4 +1,4 @@ -package todolist.json; +package todolist.json.internal; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; diff --git a/todolist/core/src/main/java/todolist/json/TodoModelDeserializer.java b/todolist/core/src/main/java/todolist/json/internal/TodoModelDeserializer.java similarity index 97% rename from todolist/core/src/main/java/todolist/json/TodoModelDeserializer.java rename to todolist/core/src/main/java/todolist/json/internal/TodoModelDeserializer.java index e4dd3a0..100866f 100644 --- a/todolist/core/src/main/java/todolist/json/TodoModelDeserializer.java +++ b/todolist/core/src/main/java/todolist/json/internal/TodoModelDeserializer.java @@ -1,4 +1,4 @@ -package todolist.json; +package todolist.json.internal; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; diff --git a/todolist/core/src/main/java/todolist/json/TodoModelSerializer.java b/todolist/core/src/main/java/todolist/json/internal/TodoModelSerializer.java similarity index 97% rename from todolist/core/src/main/java/todolist/json/TodoModelSerializer.java rename to todolist/core/src/main/java/todolist/json/internal/TodoModelSerializer.java index 202bc46..a1aa0c8 100644 --- a/todolist/core/src/main/java/todolist/json/TodoModelSerializer.java +++ b/todolist/core/src/main/java/todolist/json/internal/TodoModelSerializer.java @@ -1,4 +1,4 @@ -package todolist.json; +package todolist.json.internal; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; diff --git a/todolist/core/src/main/java/todolist/json/TodoModule.java b/todolist/core/src/main/java/todolist/json/internal/TodoModule.java similarity index 97% rename from todolist/core/src/main/java/todolist/json/TodoModule.java rename to todolist/core/src/main/java/todolist/json/internal/TodoModule.java index ecf0a39..97502fb 100644 --- a/todolist/core/src/main/java/todolist/json/TodoModule.java +++ b/todolist/core/src/main/java/todolist/json/internal/TodoModule.java @@ -1,4 +1,4 @@ -package todolist.json; +package todolist.json.internal; import com.fasterxml.jackson.core.Version; import com.fasterxml.jackson.databind.module.SimpleModule; diff --git a/todolist/core/src/test/java/todolist/json/TodoModuleTest.java b/todolist/core/src/test/java/todolist/json/TodoModuleTest.java index 88248d6..0a7317d 100644 --- a/todolist/core/src/test/java/todolist/json/TodoModuleTest.java +++ b/todolist/core/src/test/java/todolist/json/TodoModuleTest.java @@ -14,6 +14,7 @@ import todolist.core.AbstractTodoList; import todolist.core.TodoItem; import todolist.core.TodoList; import todolist.core.TodoModel; +import todolist.json.internal.TodoModule; public class TodoModuleTest { diff --git a/todolist/fxui/src/main/java/module-info.java b/todolist/fxui/src/main/java/module-info.java new file mode 100644 index 0000000..b1707f4 --- /dev/null +++ b/todolist/fxui/src/main/java/module-info.java @@ -0,0 +1,14 @@ +module todolist.ui { + requires com.fasterxml.jackson.databind; + + requires java.net.http; + + requires javafx.base; + requires javafx.controls; + requires javafx.fxml; + + requires todolist.core; + requires fxutil; + + opens todolist.ui to javafx.graphics, javafx.fxml; +} diff --git a/todolist/fxui/src/main/java/todolist/ui/RemoteTodoModelAccess.java b/todolist/fxui/src/main/java/todolist/ui/RemoteTodoModelAccess.java index 808d9d2..9e48d59 100644 --- a/todolist/fxui/src/main/java/todolist/ui/RemoteTodoModelAccess.java +++ b/todolist/fxui/src/main/java/todolist/ui/RemoteTodoModelAccess.java @@ -14,7 +14,7 @@ import java.util.Collection; import todolist.core.AbstractTodoList; import todolist.core.TodoList; import todolist.core.TodoModel; -import todolist.json.TodoModule; +import todolist.json.TodoPersistence; /** * Class that centralizes access to a TodoModel. Makes it easier to support transparent use of a @@ -30,7 +30,7 @@ public class RemoteTodoModelAccess implements TodoModelAccess { public RemoteTodoModelAccess(URI endpointBaseUri) { this.endpointBaseUri = endpointBaseUri; - objectMapper = new ObjectMapper().registerModule(new TodoModule()); + objectMapper = TodoPersistence.createObjectMapper(); } private TodoModel getTodoModel() { @@ -44,7 +44,6 @@ public class RemoteTodoModelAccess implements TodoModelAccess { HttpClient.newBuilder().build().send(request, HttpResponse.BodyHandlers.ofString()); final String responseString = response.body(); this.todoModel = objectMapper.readValue(responseString, TodoModel.class); - System.out.println("TodoModel: " + this.todoModel); } catch (IOException | InterruptedException e) { throw new RuntimeException(e); } diff --git a/todolist/fxutil/src/main/java/module-info.java b/todolist/fxutil/src/main/java/module-info.java new file mode 100644 index 0000000..1191da6 --- /dev/null +++ b/todolist/fxutil/src/main/java/module-info.java @@ -0,0 +1,8 @@ +module fxutil { + requires javafx.base; + requires javafx.controls; + requires javafx.fxml; + + exports fxutil.doc; + opens fxutil to javafx.graphics, javafx.fxml; +} diff --git a/todolist/rest/pom.xml b/todolist/rest/pom.xml index bfae039..9f7906a 100644 --- a/todolist/rest/pom.xml +++ b/todolist/rest/pom.xml @@ -12,8 +12,8 @@ <artifactId>rest</artifactId> <properties> - <slf4jVersion>1.7.25</slf4jVersion> - <jerseyVersion>3.0.1</jerseyVersion> + <slf4jVersion>2.0.0-alpha5</slf4jVersion> + <jerseyVersion>3.0.3</jerseyVersion> </properties> <dependencies> @@ -170,6 +170,11 @@ <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <argLine> + --add-opens todolist.rest/todolist.restapi=ALL-UNNAMED + </argLine> + </configuration> </plugin> <!-- Run the checkstyle code quality tool --> <plugin> diff --git a/todolist/rest/src/main/java/module-info.java b/todolist/rest/src/main/java/module-info.java new file mode 100644 index 0000000..e4c32e4 --- /dev/null +++ b/todolist/rest/src/main/java/module-info.java @@ -0,0 +1,12 @@ +module todolist.rest { + requires jakarta.ws.rs; + + requires jersey.common; + requires jersey.server; + requires jersey.media.json.jackson; + + requires org.glassfish.hk2.api; + requires org.slf4j; + + requires todolist.core; +} \ No newline at end of file diff --git a/todolist/rest/src/main/java/todolist/restserver/TodoModuleObjectMapperProvider.java b/todolist/rest/src/main/java/todolist/restserver/TodoModuleObjectMapperProvider.java index 9846a28..dd0f81b 100644 --- a/todolist/rest/src/main/java/todolist/restserver/TodoModuleObjectMapperProvider.java +++ b/todolist/rest/src/main/java/todolist/restserver/TodoModuleObjectMapperProvider.java @@ -6,7 +6,7 @@ import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.ext.ContextResolver; import jakarta.ws.rs.ext.Provider; -import todolist.json.TodoModule; +import todolist.json.TodoPersistence; /** * Provides the Jackson module used for JSON serialization. @@ -19,7 +19,7 @@ public class TodoModuleObjectMapperProvider implements ContextResolver<ObjectMap private final ObjectMapper objectMapper; public TodoModuleObjectMapperProvider() { - objectMapper = new ObjectMapper().registerModule(new TodoModule(false)); + objectMapper = TodoPersistence.createObjectMapper(); } @Override diff --git a/todolist/rest/src/test/java/todolist/restserver/TodoServiceTest.java b/todolist/rest/src/test/java/todolist/restserver/TodoServiceTest.java index e6ad88c..243679c 100644 --- a/todolist/rest/src/test/java/todolist/restserver/TodoServiceTest.java +++ b/todolist/rest/src/test/java/todolist/restserver/TodoServiceTest.java @@ -23,7 +23,7 @@ import todolist.restapi.TodoModelService; public class TodoServiceTest extends JerseyTest { protected boolean shouldLog() { - return false; + return true; } @Override diff --git a/todolist/springboot/restserver/src/main/java/module-info.java b/todolist/springboot/restserver/src/main/java/module-info.java new file mode 100644 index 0000000..400acc0 --- /dev/null +++ b/todolist/springboot/restserver/src/main/java/module-info.java @@ -0,0 +1,8 @@ +module todolist.springboot.rest { + requires com.fasterxml.jackson.databind; + + requires spring.web; + requires spring.boot; + + requires todolist.core; +} diff --git a/todolist/springboot/restserver/src/main/java/todolist/springboot/restserver/TodoModelApplication.java b/todolist/springboot/restserver/src/main/java/todolist/springboot/restserver/TodoModelApplication.java index 60fed1d..f9d9fbb 100644 --- a/todolist/springboot/restserver/src/main/java/todolist/springboot/restserver/TodoModelApplication.java +++ b/todolist/springboot/restserver/src/main/java/todolist/springboot/restserver/TodoModelApplication.java @@ -4,14 +4,16 @@ import com.fasterxml.jackson.databind.Module; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; -import todolist.json.TodoModule; + +import todolist.json.TodoPersistence; +import todolist.json.internal.TodoModule; @SpringBootApplication public class TodoModelApplication { @Bean public Module objectMapperModule() { - return new TodoModule(false); + return TodoPersistence.createJacksonModule(false); } public static void main(String[] args) { diff --git a/todolist/springboot/restserver/src/test/java/todolist/springboot/restserver/TodoModelApplicationTest.java b/todolist/springboot/restserver/src/test/java/todolist/springboot/restserver/TodoModelApplicationTest.java index da70736..c69570c 100644 --- a/todolist/springboot/restserver/src/test/java/todolist/springboot/restserver/TodoModelApplicationTest.java +++ b/todolist/springboot/restserver/src/test/java/todolist/springboot/restserver/TodoModelApplicationTest.java @@ -20,7 +20,7 @@ import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import todolist.core.AbstractTodoList; import todolist.core.TodoModel; -import todolist.json.TodoModule; +import todolist.json.TodoPersistence; @AutoConfigureMockMvc @ContextConfiguration(classes = { TodoModelController.class, TodoModelService.class, TodoModelApplication.class }) @@ -34,7 +34,7 @@ public class TodoModelApplicationTest { @BeforeEach public void setup() throws Exception { - objectMapper = new ObjectMapper().registerModule(new TodoModule(false));; + objectMapper = TodoPersistence.createObjectMapper(); } private String todoUrl(String... segments) { -- GitLab