This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 7d14a976c083843d787fe83e3c088151c50e7cf3
Author: RĂ©mi Kowalski <[email protected]>
AuthorDate: Tue Jul 16 18:12:48 2019 +0200

    JAMES-2813 Add serialization of Failed, Completed, and Throwing Tasks
---
 .../apache/james/json/JsonGenericSerializer.java   |   2 +-
 pom.xml                                            |   6 ++
 server/task-json/pom.xml                           |   6 ++
 .../server/task/json/TaskSerializationTest.java    | 108 +++++++++++++++++++++
 .../{TestTaskDTO.java => CompletedTaskDTO.java}    |  25 +----
 .../dto/{TestTaskDTO.java => FailedTaskDTO.java}   |  25 +----
 .../james/server/task/json/dto/TestTaskDTO.java    |   3 -
 .../dto/{TestTaskDTO.java => ThrowingTaskDTO.java} |  26 +----
 .../java/org/apache/james/task/CompletedTask.java} |  38 +++-----
 .../java/org/apache/james/task/FailedTask.java}    |  38 +++-----
 .../james/task/SerialTaskManagerWorkerTest.java    |   8 +-
 .../java/org/apache/james/task/ThrowingTask.java}  |  39 +++-----
 12 files changed, 171 insertions(+), 153 deletions(-)

diff --git 
a/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java 
b/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java
index 4cf19d2..aaba17e 100644
--- a/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java
+++ b/json/src/main/java/org/apache/james/json/JsonGenericSerializer.java
@@ -103,7 +103,7 @@ public class JsonGenericSerializer<T, U extends DTO> {
             U dto = 
objectMapper.readValue(objectMapper.treeAsTokens(jsonNode), 
dtoModule.getDTOClass());
             return dtoModule.getToDomainObjectConverter().convert(dto);
         } catch (MismatchedInputException e) {
-            throw new InvalidTypeException("Duplicate \"type\" properties 
found in the json document", e);
+            throw new InvalidTypeException("Unable to deserialize the json 
document", e);
         }
     }
 
diff --git a/pom.xml b/pom.xml
index 8fa9701..97c16f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1710,6 +1710,12 @@
             </dependency>
             <dependency>
                 <groupId>${james.groupId}</groupId>
+                <artifactId>james-server-task</artifactId>
+                <type>test-jar</type>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>${james.groupId}</groupId>
                 <artifactId>james-server-task-json</artifactId>
                 <version>${project.version}</version>
             </dependency>
diff --git a/server/task-json/pom.xml b/server/task-json/pom.xml
index 8e91a57..5f88cb0 100644
--- a/server/task-json/pom.xml
+++ b/server/task-json/pom.xml
@@ -52,6 +52,12 @@
             <artifactId>james-server-task</artifactId>
         </dependency>
         <dependency>
+            <groupId>${james.groupId}</groupId>
+            <artifactId>james-server-task</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java
 
b/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java
new file mode 100644
index 0000000..103e6e9
--- /dev/null
+++ 
b/server/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java
@@ -0,0 +1,108 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ * http://www.apache.org/licenses/LICENSE-2.0                   *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ * ***************************************************************/
+
+package org.apache.james.server.task.json;
+
+import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.IOException;
+
+import org.apache.james.json.DTOModule;
+import org.apache.james.server.task.json.dto.CompletedTaskDTO;
+import org.apache.james.server.task.json.dto.FailedTaskDTO;
+import org.apache.james.server.task.json.dto.TaskDTOModule;
+import org.apache.james.server.task.json.dto.ThrowingTaskDTO;
+import org.apache.james.task.CompletedTask;
+import org.apache.james.task.FailedTask;
+import org.apache.james.task.Task;
+import org.apache.james.task.ThrowingTask;
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
+class TaskSerializationTest {
+
+    private static final String SERIALIZED_FAILED_TASK = "{\"type\": 
\"failed-task\"}";
+    private TaskDTOModule failedTaskModule = DTOModule
+        .forDomainObject(FailedTask.class)
+        .convertToDTO(FailedTaskDTO.class)
+        .toDomainObjectConverter(dto -> new FailedTask())
+        .toDTOConverter((task, typeName) -> new FailedTaskDTO(typeName))
+        .typeName("failed-task")
+        .withFactory(TaskDTOModule::new);
+
+    private static final String SERIALIZED_COMPLETED_TASK = "{\"type\": 
\"completed-task\"}";
+    private TaskDTOModule completedTaskModule = DTOModule
+        .forDomainObject(CompletedTask.class)
+        .convertToDTO(CompletedTaskDTO.class)
+        .toDomainObjectConverter(dto -> new CompletedTask())
+        .toDTOConverter((task, typeName) -> new CompletedTaskDTO(typeName))
+        .typeName("completed-task")
+        .withFactory(TaskDTOModule::new);
+
+    private static final String SERIALIZED_THROWING_TASK = "{\"type\": 
\"throwing-task\"}";
+    private TaskDTOModule throwingTaskModule = DTOModule
+        .forDomainObject(ThrowingTask.class)
+        .convertToDTO(ThrowingTaskDTO.class)
+        .toDomainObjectConverter(dto -> new ThrowingTask())
+        .toDTOConverter((task, typeName) -> new ThrowingTaskDTO(typeName))
+        .typeName("throwing-task")
+        .withFactory(TaskDTOModule::new);
+
+    @Test
+    void failedTaskShouldSerialize() throws JsonProcessingException {
+        FailedTask failedTask = new FailedTask();
+
+        String actual = new 
JsonTaskSerializer(failedTaskModule).serialize(failedTask);
+        assertThatJson(actual).isEqualTo(SERIALIZED_FAILED_TASK);
+    }
+
+    @Test
+    void failedTaskShouldDeserialize() throws IOException {
+        Task task = new 
JsonTaskSerializer(failedTaskModule).deserialize(SERIALIZED_FAILED_TASK);
+        assertThat(task).isInstanceOf(FailedTask.class);
+    }
+
+    @Test
+    void completedTaskShouldSerialize() throws JsonProcessingException {
+        CompletedTask completedTask = new CompletedTask();
+
+        String actual = new 
JsonTaskSerializer(completedTaskModule).serialize(completedTask);
+        assertThatJson(actual).isEqualTo(SERIALIZED_COMPLETED_TASK);
+    }
+
+    @Test
+    void completedTaskShouldDeserialize() throws IOException {
+        Task task = new 
JsonTaskSerializer(completedTaskModule).deserialize(SERIALIZED_COMPLETED_TASK);
+        assertThat(task).isInstanceOf(CompletedTask.class);
+    }
+
+    @Test
+    void throwingTaskShouldSerialize() throws JsonProcessingException {
+        ThrowingTask throwingTask = new ThrowingTask();
+
+        String actual = new 
JsonTaskSerializer(throwingTaskModule).serialize(throwingTask);
+        assertThatJson(actual).isEqualTo(SERIALIZED_THROWING_TASK);
+    }
+
+    @Test
+    void throwingTaskShouldDeserialize() throws IOException {
+        Task task = new 
JsonTaskSerializer(throwingTaskModule).deserialize(SERIALIZED_THROWING_TASK);
+        assertThat(task).isInstanceOf(ThrowingTask.class);
+    }
+}
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/CompletedTaskDTO.java
similarity index 72%
copy from 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
copy to 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/CompletedTaskDTO.java
index 3a67475..c67a4dc 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
+++ 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/CompletedTaskDTO.java
@@ -16,39 +16,20 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
 package org.apache.james.server.task.json.dto;
 
-import org.apache.james.server.task.json.TestTask;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class TestTaskDTO implements TaskDTO {
-    private final long parameter;
-    private final String type;
+public class CompletedTaskDTO implements TaskDTO {
 
+    private final String type;
 
-    @JsonCreator
-    public TestTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("parameter") long parameter) {
+    public CompletedTaskDTO(@JsonProperty("type") String type) {
         this.type = type;
-        this.parameter = parameter;
-    }
-
-    public long getParameter() {
-        return parameter;
     }
 
     @Override
     public String getType() {
         return type;
     }
-
-    @JsonIgnore
-    public TestTask toTask() {
-        return new TestTask(parameter);
-    }
-
-
 }
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/FailedTaskDTO.java
similarity index 72%
copy from 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
copy to 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/FailedTaskDTO.java
index 3a67475..5b97e05 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
+++ 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/FailedTaskDTO.java
@@ -16,39 +16,20 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
 package org.apache.james.server.task.json.dto;
 
-import org.apache.james.server.task.json.TestTask;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class TestTaskDTO implements TaskDTO {
-    private final long parameter;
-    private final String type;
+public class FailedTaskDTO implements TaskDTO {
 
+    private final String type;
 
-    @JsonCreator
-    public TestTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("parameter") long parameter) {
+    public FailedTaskDTO(@JsonProperty("type") String type) {
         this.type = type;
-        this.parameter = parameter;
-    }
-
-    public long getParameter() {
-        return parameter;
     }
 
     @Override
     public String getType() {
         return type;
     }
-
-    @JsonIgnore
-    public TestTask toTask() {
-        return new TestTask(parameter);
-    }
-
-
 }
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
index 3a67475..b8f050d 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
+++ 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
@@ -21,7 +21,6 @@ package org.apache.james.server.task.json.dto;
 
 import org.apache.james.server.task.json.TestTask;
 
-import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
@@ -29,8 +28,6 @@ public class TestTaskDTO implements TaskDTO {
     private final long parameter;
     private final String type;
 
-
-    @JsonCreator
     public TestTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("parameter") long parameter) {
         this.type = type;
         this.parameter = parameter;
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/ThrowingTaskDTO.java
similarity index 72%
copy from 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
copy to 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/ThrowingTaskDTO.java
index 3a67475..d9d576d 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
+++ 
b/server/task-json/src/test/java/org/apache/james/server/task/json/dto/ThrowingTaskDTO.java
@@ -16,39 +16,21 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-
 package org.apache.james.server.task.json.dto;
 
-import org.apache.james.server.task.json.TestTask;
-
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
-public class TestTaskDTO implements TaskDTO {
-    private final long parameter;
-    private final String type;
+public class ThrowingTaskDTO implements TaskDTO {
 
+    private final String type;
 
-    @JsonCreator
-    public TestTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("parameter") long parameter) {
+    public ThrowingTaskDTO(@JsonProperty("type") String type) {
         this.type = type;
-        this.parameter = parameter;
-    }
-
-    public long getParameter() {
-        return parameter;
     }
 
     @Override
     public String getType() {
         return type;
     }
-
-    @JsonIgnore
-    public TestTask toTask() {
-        return new TestTask(parameter);
-    }
-
-
 }
+
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
 b/server/task/src/test/java/org/apache/james/task/CompletedTask.java
similarity index 61%
copy from 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
copy to server/task/src/test/java/org/apache/james/task/CompletedTask.java
index 3a67475..96133ed 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
+++ b/server/task/src/test/java/org/apache/james/task/CompletedTask.java
@@ -16,39 +16,25 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
+package org.apache.james.task;
 
-package org.apache.james.server.task.json.dto;
+import java.util.Optional;
 
-import org.apache.james.server.task.json.TestTask;
+public class CompletedTask implements Task {
+    public static final String TYPE = "completed";
 
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class TestTaskDTO implements TaskDTO {
-    private final long parameter;
-    private final String type;
-
-
-    @JsonCreator
-    public TestTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("parameter") long parameter) {
-        this.type = type;
-        this.parameter = parameter;
-    }
-
-    public long getParameter() {
-        return parameter;
+    @Override
+    public Result run() throws InterruptedException {
+        return Result.COMPLETED;
     }
 
     @Override
-    public String getType() {
-        return type;
+    public String type() {
+        return TYPE;
     }
 
-    @JsonIgnore
-    public TestTask toTask() {
-        return new TestTask(parameter);
+    @Override
+    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
+        return Optional.empty();
     }
-
-
 }
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
 b/server/task/src/test/java/org/apache/james/task/FailedTask.java
similarity index 61%
copy from 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
copy to server/task/src/test/java/org/apache/james/task/FailedTask.java
index 3a67475..127c96e 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
+++ b/server/task/src/test/java/org/apache/james/task/FailedTask.java
@@ -16,39 +16,25 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
+package org.apache.james.task;
 
-package org.apache.james.server.task.json.dto;
+import java.util.Optional;
 
-import org.apache.james.server.task.json.TestTask;
+public class FailedTask implements Task {
+    public static final String TYPE = "failed";
 
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class TestTaskDTO implements TaskDTO {
-    private final long parameter;
-    private final String type;
-
-
-    @JsonCreator
-    public TestTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("parameter") long parameter) {
-        this.type = type;
-        this.parameter = parameter;
-    }
-
-    public long getParameter() {
-        return parameter;
+    @Override
+    public Result run() throws InterruptedException {
+        return Result.PARTIAL;
     }
 
     @Override
-    public String getType() {
-        return type;
+    public String type() {
+        return TYPE;
     }
 
-    @JsonIgnore
-    public TestTask toTask() {
-        return new TestTask(parameter);
+    @Override
+    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
+        return Optional.empty();
     }
-
-
 }
diff --git 
a/server/task/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java
 
b/server/task/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java
index 77aaf88..2aa1dc0 100644
--- 
a/server/task/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java
+++ 
b/server/task/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java
@@ -40,11 +40,9 @@ class SerialTaskManagerWorkerTest {
 
     private final SerialTaskManagerWorker worker = new 
SerialTaskManagerWorker();
 
-    private final Task successfulTask = () -> Task.Result.COMPLETED;
-    private final Task failedTask = () -> Task.Result.PARTIAL;
-    private final Task throwingTask = () -> {
-        throw new RuntimeException("Throwing Task");
-    };
+    private final Task successfulTask = new CompletedTask();
+    private final Task failedTask = new FailedTask();
+    private final Task throwingTask = new ThrowingTask();
 
     @AfterEach
     void tearDown() throws IOException {
diff --git 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
 b/server/task/src/test/java/org/apache/james/task/ThrowingTask.java
similarity index 61%
copy from 
server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
copy to server/task/src/test/java/org/apache/james/task/ThrowingTask.java
index 3a67475..eafe862 100644
--- 
a/server/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
+++ b/server/task/src/test/java/org/apache/james/task/ThrowingTask.java
@@ -16,39 +16,26 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
+package org.apache.james.task;
 
-package org.apache.james.server.task.json.dto;
+import java.util.Optional;
 
-import org.apache.james.server.task.json.TestTask;
+public class ThrowingTask implements Task {
+    public static final String TYPE = "throwing";
 
-import com.fasterxml.jackson.annotation.JsonCreator;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public class TestTaskDTO implements TaskDTO {
-    private final long parameter;
-    private final String type;
-
-
-    @JsonCreator
-    public TestTaskDTO(@JsonProperty("type") String type, 
@JsonProperty("parameter") long parameter) {
-        this.type = type;
-        this.parameter = parameter;
-    }
-
-    public long getParameter() {
-        return parameter;
+    @Override
+    public Result run() throws InterruptedException {
+        throw new RuntimeException("Throwing Task");
     }
 
     @Override
-    public String getType() {
-        return type;
+    public String type() {
+        return TYPE;
     }
 
-    @JsonIgnore
-    public TestTask toTask() {
-        return new TestTask(parameter);
+    @Override
+    public Optional<TaskExecutionDetails.AdditionalInformation> details() {
+        return Optional.empty();
     }
-
-
 }
+


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to