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

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

commit 10c4b4d59161f759dd3635498ee7faad0bce26a2
Author: Benoit Tellier <[email protected]>
AuthorDate: Thu May 21 15:06:57 2020 +0700

    JAMES-3184 RecomputeCurrentQuotasTask should take RunningOptions as a 
parameter
---
 .../quota/task/RecomputeCurrentQuotasTask.java     | 21 ++++++++---
 ...eCurrentQuotasTaskAdditionalInformationDTO.java | 13 ++++++-
 .../quota/task/RecomputeCurrentQuotasTaskDTO.java  | 18 ++++++++--
 ...ntQuotasTaskDTO.java => RunningOptionsDTO.java} | 41 +++++++++-------------
 ...ecomputeCurrentQuotasTaskSerializationTest.java | 39 ++++++++++++++++++--
 .../james/webadmin/routes/UserQuotaRoutes.java     |  3 +-
 6 files changed, 98 insertions(+), 37 deletions(-)

diff --git 
a/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTask.java
 
b/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTask.java
index 82d142d..355c6bb 100644
--- 
a/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTask.java
+++ 
b/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTask.java
@@ -44,11 +44,13 @@ public class RecomputeCurrentQuotasTask implements Task {
         private final Instant instant;
         private final long processedQuotaRoots;
         private final ImmutableList<String> failedQuotaRoots;
+        private final RunningOptions runningOptions;
 
-        Details(Instant instant, long processedQuotaRoots, 
ImmutableList<String> failedQuotaRoots) {
+        Details(Instant instant, long processedQuotaRoots, 
ImmutableList<String> failedQuotaRoots, RunningOptions runningOptions) {
             this.instant = instant;
             this.processedQuotaRoots = processedQuotaRoots;
             this.failedQuotaRoots = failedQuotaRoots;
+            this.runningOptions = runningOptions;
         }
 
         @Override
@@ -65,14 +67,19 @@ public class RecomputeCurrentQuotasTask implements Task {
         ImmutableList<String> getFailedQuotaRoots() {
             return failedQuotaRoots;
         }
+
+        public RunningOptions getRunningOptions() {
+            return runningOptions;
+        }
     }
 
     private final RecomputeCurrentQuotasService service;
+    private final RunningOptions runningOptions;
+    private final Context context;
 
-    private Context context;
-
-    public RecomputeCurrentQuotasTask(RecomputeCurrentQuotasService service) {
+    public RecomputeCurrentQuotasTask(RecomputeCurrentQuotasService service, 
RunningOptions runningOptions) {
         this.service = service;
+        this.runningOptions = runningOptions;
         this.context = new Context();
     }
 
@@ -88,6 +95,10 @@ public class RecomputeCurrentQuotasTask implements Task {
         return RECOMPUTE_CURRENT_QUOTAS;
     }
 
+    public RunningOptions getRunningOptions() {
+        return runningOptions;
+    }
+
     @Override
     public Optional<TaskExecutionDetails.AdditionalInformation> details() {
         Snapshot snapshot = context.snapshot();
@@ -97,6 +108,6 @@ public class RecomputeCurrentQuotasTask implements Task {
             snapshot.getFailedQuotaRoots()
                 .stream()
                 .map(QuotaRoot::asString)
-                .collect(Guavate.toImmutableList())));
+                .collect(Guavate.toImmutableList()), runningOptions));
     }
 }
diff --git 
a/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskAdditionalInformationDTO.java
 
b/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskAdditionalInformationDTO.java
index 5bebcee..5d8a56f 100644
--- 
a/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskAdditionalInformationDTO.java
+++ 
b/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskAdditionalInformationDTO.java
@@ -20,8 +20,10 @@
 package org.apache.james.mailbox.quota.task;
 
 import java.time.Instant;
+import java.util.Optional;
 
 import org.apache.james.json.DTOModule;
+import 
org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService.RunningOptions;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTO;
 import org.apache.james.server.task.json.dto.AdditionalInformationDTOModule;
 
@@ -34,6 +36,7 @@ public class 
RecomputeCurrentQuotasTaskAdditionalInformationDTO implements Addit
             type,
             details.getProcessedQuotaRoots(),
             details.getFailedQuotaRoots(),
+            Optional.of(RunningOptionsDTO.asDTO(details.getRunningOptions())),
             details.timestamp());
     }
 
@@ -49,15 +52,18 @@ public class 
RecomputeCurrentQuotasTaskAdditionalInformationDTO implements Addit
     private final String type;
     private final long processedQuotaRoots;
     private final ImmutableList<String> failedQuotaRoots;
+    private final Optional<RunningOptionsDTO> runningOptions;
     private final Instant timestamp;
 
     public 
RecomputeCurrentQuotasTaskAdditionalInformationDTO(@JsonProperty("type") String 
type,
                                                               
@JsonProperty("processedQuotaRoots") long processedQuotaRoots,
                                                               
@JsonProperty("failedQuotaRoots") ImmutableList<String> failedQuotaRoots,
+                                                              
@JsonProperty("runningOptions") Optional<RunningOptionsDTO> runningOptions,
                                                               
@JsonProperty("timestamp") Instant timestamp) {
         this.type = type;
         this.processedQuotaRoots = processedQuotaRoots;
         this.failedQuotaRoots = failedQuotaRoots;
+        this.runningOptions = runningOptions;
         this.timestamp = timestamp;
     }
 
@@ -79,9 +85,14 @@ public class 
RecomputeCurrentQuotasTaskAdditionalInformationDTO implements Addit
         return type;
     }
 
+    public Optional<RunningOptionsDTO> getRunningOptions() {
+        return runningOptions;
+    }
+
     private RecomputeCurrentQuotasTask.Details toDomainObject() {
         return new RecomputeCurrentQuotasTask.Details(timestamp,
             processedQuotaRoots,
-            failedQuotaRoots);
+            failedQuotaRoots,
+            
runningOptions.map(RunningOptionsDTO::asDomainObject).orElse(RunningOptions.DEFAULT));
     }
 }
diff --git 
a/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskDTO.java
 
b/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskDTO.java
index 33d5a4e..03a854f 100644
--- 
a/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskDTO.java
+++ 
b/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskDTO.java
@@ -19,7 +19,10 @@
 
 package org.apache.james.mailbox.quota.task;
 
+import java.util.Optional;
+
 import org.apache.james.json.DTOModule;
+import 
org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService.RunningOptions;
 import org.apache.james.server.task.json.dto.TaskDTO;
 import org.apache.james.server.task.json.dto.TaskDTOModule;
 
@@ -27,7 +30,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class RecomputeCurrentQuotasTaskDTO implements TaskDTO {
     private static RecomputeCurrentQuotasTaskDTO 
toDTO(RecomputeCurrentQuotasTask domainObject, String typeName) {
-        return new RecomputeCurrentQuotasTaskDTO(typeName);
+        return new RecomputeCurrentQuotasTaskDTO(typeName,
+            
Optional.of(RunningOptionsDTO.asDTO(domainObject.getRunningOptions())));
     }
 
     public static TaskDTOModule<RecomputeCurrentQuotasTask, 
RecomputeCurrentQuotasTaskDTO> module(RecomputeCurrentQuotasService service) {
@@ -41,13 +45,21 @@ public class RecomputeCurrentQuotasTaskDTO implements 
TaskDTO {
     }
 
     private final String type;
+    private final Optional<RunningOptionsDTO> runningOptions;
 
-    public RecomputeCurrentQuotasTaskDTO(@JsonProperty("type") String type) {
+    public RecomputeCurrentQuotasTaskDTO(@JsonProperty("type") String type,
+                                         @JsonProperty("runningOptions") 
Optional<RunningOptionsDTO> runningOptions) {
         this.type = type;
+        this.runningOptions = runningOptions;
     }
 
     private RecomputeCurrentQuotasTask 
toDomainObject(RecomputeCurrentQuotasService service) {
-        return new RecomputeCurrentQuotasTask(service);
+        return new RecomputeCurrentQuotasTask(service,
+            
runningOptions.map(RunningOptionsDTO::asDomainObject).orElse(RunningOptions.DEFAULT));
+    }
+
+    public Optional<RunningOptionsDTO> getRunningOptions() {
+        return runningOptions;
     }
 
     @Override
diff --git 
a/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskDTO.java
 
b/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RunningOptionsDTO.java
similarity index 50%
copy from 
mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskDTO.java
copy to 
mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RunningOptionsDTO.java
index 33d5a4e..e73d267 100644
--- 
a/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskDTO.java
+++ 
b/mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RunningOptionsDTO.java
@@ -19,39 +19,32 @@
 
 package org.apache.james.mailbox.quota.task;
 
-import org.apache.james.json.DTOModule;
-import org.apache.james.server.task.json.dto.TaskDTO;
-import org.apache.james.server.task.json.dto.TaskDTOModule;
+import java.util.Optional;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
+import 
org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService.RunningOptions;
 
-public class RecomputeCurrentQuotasTaskDTO implements TaskDTO {
-    private static RecomputeCurrentQuotasTaskDTO 
toDTO(RecomputeCurrentQuotasTask domainObject, String typeName) {
-        return new RecomputeCurrentQuotasTaskDTO(typeName);
-    }
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
-    public static TaskDTOModule<RecomputeCurrentQuotasTask, 
RecomputeCurrentQuotasTaskDTO> module(RecomputeCurrentQuotasService service) {
-        return DTOModule
-            .forDomainObject(RecomputeCurrentQuotasTask.class)
-            .convertToDTO(RecomputeCurrentQuotasTaskDTO.class)
-            .toDomainObjectConverter(dto -> dto.toDomainObject(service))
-            .toDTOConverter(RecomputeCurrentQuotasTaskDTO::toDTO)
-            
.typeName(RecomputeCurrentQuotasTask.RECOMPUTE_CURRENT_QUOTAS.asString())
-            .withFactory(TaskDTOModule::new);
+public class RunningOptionsDTO {
+    public static RunningOptionsDTO asDTO(RunningOptions domainObject) {
+        return new 
RunningOptionsDTO(Optional.of(domainObject.getUsersPerSecond()));
     }
 
-    private final String type;
+    private final Optional<Integer> usersPerSecond;
 
-    public RecomputeCurrentQuotasTaskDTO(@JsonProperty("type") String type) {
-        this.type = type;
+    @JsonCreator
+    public RunningOptionsDTO(
+            @JsonProperty("usersPerSecond") Optional<Integer> usersPerSecond) {
+        this.usersPerSecond = usersPerSecond;
     }
 
-    private RecomputeCurrentQuotasTask 
toDomainObject(RecomputeCurrentQuotasService service) {
-        return new RecomputeCurrentQuotasTask(service);
+    public Optional<Integer> getUsersPerSecond() {
+        return usersPerSecond;
     }
 
-    @Override
-    public String getType() {
-        return type;
+    public RunningOptions asDomainObject() {
+        return usersPerSecond.map(RunningOptions::withUsersPerSecond)
+            .orElse(RunningOptions.DEFAULT);
     }
 }
diff --git 
a/mailbox/tools/quota-recompute/src/test/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskSerializationTest.java
 
b/mailbox/tools/quota-recompute/src/test/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskSerializationTest.java
index 9eb7405..73fbc5b 100644
--- 
a/mailbox/tools/quota-recompute/src/test/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskSerializationTest.java
+++ 
b/mailbox/tools/quota-recompute/src/test/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskSerializationTest.java
@@ -19,11 +19,14 @@
 
 package org.apache.james.mailbox.quota.task;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 
 import java.time.Instant;
 
 import org.apache.james.JsonSerializationVerifier;
+import org.apache.james.json.JsonGenericSerializer;
+import 
org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService.RunningOptions;
 import org.junit.jupiter.api.Test;
 
 import com.google.common.collect.ImmutableList;
@@ -33,13 +36,23 @@ class RecomputeCurrentQuotasTaskSerializationTest {
     static final String QUOTA_ROOT_AS_STRING = "bob@localhost";
 
     static final RecomputeCurrentQuotasService SERVICE = 
mock(RecomputeCurrentQuotasService.class);
-    static final RecomputeCurrentQuotasTask TASK = new 
RecomputeCurrentQuotasTask(SERVICE);
-    static final String SERIALIZED_TASK = "{\"type\": 
\"recompute-current-quotas\"}";
-    static final RecomputeCurrentQuotasTask.Details DETAILS = new 
RecomputeCurrentQuotasTask.Details(TIMESTAMP, 12, 
ImmutableList.of(QUOTA_ROOT_AS_STRING));
+    static final RecomputeCurrentQuotasTask TASK = new 
RecomputeCurrentQuotasTask(SERVICE, RunningOptions.withUsersPerSecond(17));
+    static final RecomputeCurrentQuotasTask TASK_DEFAULT = new 
RecomputeCurrentQuotasTask(SERVICE, RunningOptions.DEFAULT);
+    static final String SERIALIZED_TASK_LEGACY = "{\"type\": 
\"recompute-current-quotas\"}";
+    static final String SERIALIZED_TASK = "{\"type\": 
\"recompute-current-quotas\",\"runningOptions\":{\"usersPerSecond\":17}}";
+    static final RecomputeCurrentQuotasTask.Details DETAILS = new 
RecomputeCurrentQuotasTask.Details(TIMESTAMP, 12, 
ImmutableList.of(QUOTA_ROOT_AS_STRING), RunningOptions.withUsersPerSecond(17));
+    static final RecomputeCurrentQuotasTask.Details DETAILS_DEFAULT = new 
RecomputeCurrentQuotasTask.Details(TIMESTAMP, 12, 
ImmutableList.of(QUOTA_ROOT_AS_STRING), RunningOptions.DEFAULT);
+    static final String SERIALIZED_ADDITIONAL_INFORMATION_LEGACY = "{" +
+        "  \"type\":\"recompute-current-quotas\"," +
+        "  \"processedQuotaRoots\":12," +
+        "  \"failedQuotaRoots\":[\"bob@localhost\"]," +
+        "  \"timestamp\":\"2018-11-13T12:00:55Z\"" +
+        "}";
     static final String SERIALIZED_ADDITIONAL_INFORMATION = "{" +
         "  \"type\":\"recompute-current-quotas\"," +
         "  \"processedQuotaRoots\":12," +
         "  \"failedQuotaRoots\":[\"bob@localhost\"]," +
+        "  \"runningOptions\":{\"usersPerSecond\":17}," +
         "  \"timestamp\":\"2018-11-13T12:00:55Z\"" +
         "}";
 
@@ -58,4 +71,24 @@ class RecomputeCurrentQuotasTaskSerializationTest {
             .json(SERIALIZED_ADDITIONAL_INFORMATION)
             .verify();
     }
+
+    @Test
+    void shouldDeserializeLegacyTask() throws Exception {
+        RecomputeCurrentQuotasTask legacyTask = 
JsonGenericSerializer.forModules(RecomputeCurrentQuotasTaskDTO.module(SERVICE))
+            .withoutNestedType()
+            .deserialize(SERIALIZED_TASK_LEGACY);
+
+        assertThat(legacyTask)
+            .isEqualToComparingFieldByFieldRecursively(TASK_DEFAULT);
+    }
+
+    @Test
+    void shouldDeserializeLegacyDetails() throws Exception {
+        RecomputeCurrentQuotasTask.Details legacyDetails = 
JsonGenericSerializer.forModules(RecomputeCurrentQuotasTaskAdditionalInformationDTO.MODULE)
+            .withoutNestedType()
+            .deserialize(SERIALIZED_ADDITIONAL_INFORMATION_LEGACY);
+
+        assertThat(legacyDetails)
+            .isEqualToComparingFieldByFieldRecursively(DETAILS_DEFAULT);
+    }
 }
diff --git 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
index 0f73118..4201768 100644
--- 
a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
+++ 
b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
@@ -42,6 +42,7 @@ import org.apache.james.core.Username;
 import org.apache.james.core.quota.QuotaCountLimit;
 import org.apache.james.core.quota.QuotaSizeLimit;
 import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService;
+import 
org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasService.RunningOptions;
 import org.apache.james.mailbox.quota.task.RecomputeCurrentQuotasTask;
 import org.apache.james.quota.search.Limit;
 import org.apache.james.quota.search.Offset;
@@ -90,7 +91,7 @@ public class UserQuotaRoutes implements Routes {
     public static class RecomputeCurrentQuotasRequestToTask extends 
TaskFromRequestRegistry.TaskRegistration {
         @Inject
         public 
RecomputeCurrentQuotasRequestToTask(RecomputeCurrentQuotasService service) {
-            super(RECOMPUTE_CURRENT_QUOTAS, request -> new 
RecomputeCurrentQuotasTask(service));
+            super(RECOMPUTE_CURRENT_QUOTAS, request -> new 
RecomputeCurrentQuotasTask(service, RunningOptions.DEFAULT));
         }
     }
 


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

Reply via email to