You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2018/06/13 14:58:19 UTC
[3/5] james-project git commit: JAMES-2418 Strong typing for
repository URLs and keys
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailKeyDTO.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailKeyDTO.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailKeyDTO.java
new file mode 100644
index 0000000..64d4504
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailKeyDTO.java
@@ -0,0 +1,52 @@
+/****************************************************************
+ * 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.webadmin.dto;
+
+import java.util.Objects;
+
+import org.apache.james.mailrepository.api.MailKey;
+
+public class MailKeyDTO {
+
+ private final MailKey mailKey;
+
+ public MailKeyDTO(MailKey mailKey) {
+ this.mailKey = mailKey;
+ }
+
+ public String getMailKey() {
+ return mailKey.asString();
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof MailKeyDTO) {
+ MailKeyDTO that = (MailKeyDTO) o;
+
+ return Objects.equals(this.mailKey, that.mailKey);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(mailKey);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailRepositoryResponse.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailRepositoryResponse.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailRepositoryResponse.java
index 6e58052..962ffa0 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailRepositoryResponse.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailRepositoryResponse.java
@@ -20,22 +20,22 @@
package org.apache.james.webadmin.dto;
import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
+
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
public class MailRepositoryResponse {
- private final String repository;
+ private final MailRepositoryUrl repository;
- public MailRepositoryResponse(String repository) {
+ public MailRepositoryResponse(MailRepositoryUrl repository) {
this.repository = repository;
}
public String getRepository() {
- return repository;
+ return repository.asString();
}
public String getId() throws UnsupportedEncodingException {
- return URLEncoder.encode(repository, StandardCharsets.UTF_8.displayName());
+ return repository.urlEncoded();
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
index b60bb6f..29ea380 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
@@ -22,8 +22,6 @@ package org.apache.james.webadmin.routes;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Optional;
import java.util.function.Supplier;
@@ -38,7 +36,9 @@ import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.queue.api.MailQueueFactory;
import org.apache.james.task.Task;
import org.apache.james.task.TaskId;
@@ -124,7 +124,7 @@ public class MailRepositoriesRoutes implements Routes {
})
public void definePutMailRepository() {
service.put(MAIL_REPOSITORIES + "/:encodedUrl", (request, response) -> {
- String url = decodedRepositoryUrl(request);
+ MailRepositoryUrl url = decodedRepositoryUrl(request);
try {
repositoryStoreService.createMailRepository(url);
response.status(HttpStatus.NO_CONTENT_204);
@@ -134,7 +134,7 @@ public class MailRepositoriesRoutes implements Routes {
.statusCode(HttpStatus.INTERNAL_SERVER_ERROR_500)
.type(ErrorResponder.ErrorType.SERVER_ERROR)
.cause(e)
- .message(String.format("Error while creating a mail repository with url '%s'", url))
+ .message(String.format("Error while creating a mail repository with url '%s'", url.asString()))
.haltError();
}
}, jsonTransformer);
@@ -172,7 +172,7 @@ public class MailRepositoriesRoutes implements Routes {
Offset offset = ParametersExtractor.extractOffset(request);
Limit limit = ParametersExtractor.extractLimit(request);
String encodedUrl = request.params("encodedUrl");
- String url = decodedRepositoryUrl(request);
+ MailRepositoryUrl url = MailRepositoryUrl.fromEncoded(encodedUrl);
try {
return repositoryStoreService.listMails(url, offset, limit)
.orElseThrow(() -> ErrorResponder.builder()
@@ -214,13 +214,17 @@ public class MailRepositoriesRoutes implements Routes {
@ApiResponse(code = HttpStatus.NOT_FOUND_404, message = "Not found - Could not retrieve the given mail.")
})
public void defineGetMail() {
-
service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", Constants.JSON_CONTENT_TYPE,
- (request, response) -> getMailAsJson(decodedRepositoryUrl(request), request.params("mailKey")), jsonTransformer);
+ (request, response) -> getMailAsJson(
+ decodedRepositoryUrl(request),
+ new MailKey(request.params("mailKey"))),
+ jsonTransformer);
service.get(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", Constants.RFC822_CONTENT_TYPE,
(request, response) -> writeMimeMessage(
- getMailAsMimeMessage(decodedRepositoryUrl(request), request.params("mailKey")),
+ getMailAsMimeMessage(
+ decodedRepositoryUrl(request),
+ new MailKey(request.params("mailKey"))),
response.raw()));
}
@@ -237,7 +241,7 @@ public class MailRepositoriesRoutes implements Routes {
return byteArrayOutputStream.size();
}
- private MimeMessage getMailAsMimeMessage(String url, String mailKey) {
+ private MimeMessage getMailAsMimeMessage(MailRepositoryUrl url, MailKey mailKey) {
try {
return repositoryStoreService.retrieveMessage(url, mailKey)
.orElseThrow(mailNotFoundError(mailKey));
@@ -246,7 +250,7 @@ public class MailRepositoriesRoutes implements Routes {
}
}
- private MailDto getMailAsJson(String url, String mailKey) {
+ private MailDto getMailAsJson(MailRepositoryUrl url, MailKey mailKey) {
try {
return repositoryStoreService.retrieveMail(url, mailKey)
.orElseThrow(mailNotFoundError(mailKey));
@@ -255,11 +259,11 @@ public class MailRepositoriesRoutes implements Routes {
}
}
- private Supplier<HaltException> mailNotFoundError(String mailKey) {
+ private Supplier<HaltException> mailNotFoundError(MailKey mailKey) {
return () -> ErrorResponder.builder()
.statusCode(HttpStatus.NOT_FOUND_404)
.type(ErrorResponder.ErrorType.NOT_FOUND)
- .message("Could not retrieve " + mailKey)
+ .message("Could not retrieve " + mailKey.asString())
.haltError();
}
@@ -283,7 +287,7 @@ public class MailRepositoriesRoutes implements Routes {
public void defineGetMailRepository() {
service.get(MAIL_REPOSITORIES + "/:encodedUrl", (request, response) -> {
String encodedUrl = request.params("encodedUrl");
- String url = URLDecoder.decode(encodedUrl, StandardCharsets.UTF_8.displayName());
+ MailRepositoryUrl url = MailRepositoryUrl.fromEncoded(encodedUrl);
try {
long size = repositoryStoreService.size(url)
.orElseThrow(() -> ErrorResponder.builder()
@@ -312,8 +316,8 @@ public class MailRepositoriesRoutes implements Routes {
})
public void defineDeleteMail() {
service.delete(MAIL_REPOSITORIES + "/:encodedUrl/mails/:mailKey", (request, response) -> {
- String url = decodedRepositoryUrl(request);
- String mailKey = request.params("mailKey");
+ MailRepositoryUrl url = decodedRepositoryUrl(request);
+ MailKey mailKey = new MailKey(request.params("mailKey"));
try {
response.status(HttpStatus.NO_CONTENT_204);
repositoryStoreService.deleteMail(url, mailKey);
@@ -339,7 +343,7 @@ public class MailRepositoriesRoutes implements Routes {
})
public void defineDeleteAll() {
service.delete(MAIL_REPOSITORIES + "/:encodedUrl/mails", (request, response) -> {
- String url = decodedRepositoryUrl(request);
+ MailRepositoryUrl url = decodedRepositoryUrl(request);
try {
Task task = repositoryStoreService.createClearMailRepositoryTask(url);
TaskId taskId = taskManager.submit(task);
@@ -398,7 +402,7 @@ public class MailRepositoriesRoutes implements Routes {
}
private Task toAllMailReprocessingTask(Request request) throws UnsupportedEncodingException, MailRepositoryStore.MailRepositoryStoreException, MessagingException {
- String url = decodedRepositoryUrl(request);
+ MailRepositoryUrl url = decodedRepositoryUrl(request);
enforceActionParameter(request);
Optional<String> targetProcessor = Optional.ofNullable(request.queryParams("processor"));
String targetQueue = Optional.ofNullable(request.queryParams("queue")).orElse(MailQueueFactory.SPOOL);
@@ -450,8 +454,8 @@ public class MailRepositoriesRoutes implements Routes {
}
private Task toOneMailReprocessingTask(Request request) throws UnsupportedEncodingException {
- String url = decodedRepositoryUrl(request);
- String key = request.params("key");
+ MailRepositoryUrl url = decodedRepositoryUrl(request);
+ MailKey key = new MailKey(request.params("key"));
enforceActionParameter(request);
Optional<String> targetProcessor = Optional.ofNullable(request.queryParams("processor"));
String targetQueue = Optional.ofNullable(request.queryParams("queue")).orElse(MailQueueFactory.SPOOL);
@@ -470,7 +474,7 @@ public class MailRepositoriesRoutes implements Routes {
}
}
- private String decodedRepositoryUrl(Request request) throws UnsupportedEncodingException {
- return URLDecoder.decode(request.params("encodedUrl"), StandardCharsets.UTF_8.displayName());
+ private MailRepositoryUrl decodedRepositoryUrl(Request request) throws UnsupportedEncodingException {
+ return MailRepositoryUrl.fromEncoded(request.params("encodedUrl"));
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java
index 4dfc43e..853e530 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java
@@ -25,6 +25,7 @@ import java.util.function.Supplier;
import javax.mail.MessagingException;
import org.apache.james.mailrepository.api.MailRepository;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.task.Task;
import org.apache.james.task.TaskExecutionDetails;
@@ -33,18 +34,18 @@ public class ClearMailRepositoryTask implements Task {
public static final String TYPE = "clearMailRepository";
public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
- private final String repositoryUrl;
+ private final MailRepositoryUrl repositoryUrl;
private final Supplier<Long> countSupplier;
private final long initialCount;
- public AdditionalInformation(String repositoryUrl, Supplier<Long> countSupplier) {
+ public AdditionalInformation(MailRepositoryUrl repositoryUrl, Supplier<Long> countSupplier) {
this.repositoryUrl = repositoryUrl;
this.initialCount = countSupplier.get();
this.countSupplier = countSupplier;
}
public String getRepositoryUrl() {
- return repositoryUrl;
+ return repositoryUrl.asString();
}
public long getRemainingCount() {
@@ -59,7 +60,7 @@ public class ClearMailRepositoryTask implements Task {
private final MailRepository mailRepository;
private final AdditionalInformation additionalInformation;
- public ClearMailRepositoryTask(MailRepository mailRepository, String url) {
+ public ClearMailRepositoryTask(MailRepository mailRepository, MailRepositoryUrl url) {
this.mailRepository = mailRepository;
this.additionalInformation = new AdditionalInformation(url, this::getRemainingSize);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
index de33041..7a0d691 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
@@ -26,14 +26,16 @@ import javax.inject.Inject;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
+import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepository;
import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.task.Task;
import org.apache.james.util.streams.Iterators;
import org.apache.james.util.streams.Limit;
import org.apache.james.util.streams.Offset;
import org.apache.james.webadmin.dto.MailDto;
-import org.apache.james.webadmin.dto.MailKey;
+import org.apache.james.webadmin.dto.MailKeyDTO;
import org.apache.james.webadmin.dto.MailRepositoryResponse;
import org.apache.james.webadmin.utils.ErrorResponder;
import org.apache.mailet.Mail;
@@ -58,53 +60,53 @@ public class MailRepositoryStoreService {
.collect(Guavate.toImmutableList());
}
- public MailRepository createMailRepository(String repositoryUrl) throws MailRepositoryStore.MailRepositoryStoreException {
+ public MailRepository createMailRepository(MailRepositoryUrl repositoryUrl) throws MailRepositoryStore.MailRepositoryStoreException {
return mailRepositoryStore.create(repositoryUrl);
}
- public Optional<List<MailKey>> listMails(String url, Offset offset, Limit limit) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+ public Optional<List<MailKeyDTO>> listMails(MailRepositoryUrl url, Offset offset, Limit limit) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
Optional<MailRepository> mailRepository = Optional.ofNullable(getRepository(url));
- ThrowingFunction<MailRepository, List<MailKey>> list = repository -> list(repository, offset, limit);
+ ThrowingFunction<MailRepository, List<MailKeyDTO>> list = repository -> list(repository, offset, limit);
return mailRepository.map(Throwing.function(list).sneakyThrow());
}
- private List<MailKey> list(MailRepository mailRepository, Offset offset, Limit limit) throws MessagingException {
+ private List<MailKeyDTO> list(MailRepository mailRepository, Offset offset, Limit limit) throws MessagingException {
return limit.applyOnStream(
Iterators.toStream(mailRepository.list())
.skip(offset.getOffset()))
- .map(MailKey::new)
+ .map(MailKeyDTO::new)
.collect(Guavate.toImmutableList());
}
- public Optional<Long> size(String url) throws MailRepositoryStore.MailRepositoryStoreException {
+ public Optional<Long> size(MailRepositoryUrl url) throws MailRepositoryStore.MailRepositoryStoreException {
Optional<MailRepository> mailRepository = Optional.ofNullable(getRepository(url));
return mailRepository.map(Throwing.function(MailRepository::size).sneakyThrow());
}
- public Optional<MailDto> retrieveMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+ public Optional<MailDto> retrieveMail(MailRepositoryUrl url, MailKey mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
MailRepository mailRepository = getRepository(url);
return Optional.ofNullable(mailRepository.retrieve(mailKey))
.map(Throwing.function(MailDto::fromMail).sneakyThrow());
}
- public Optional<MimeMessage> retrieveMessage(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+ public Optional<MimeMessage> retrieveMessage(MailRepositoryUrl url, MailKey mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
MailRepository mailRepository = getRepository(url);
return Optional.ofNullable(mailRepository.retrieve(mailKey))
.map(Throwing.function(Mail::getMessage).sneakyThrow());
}
- public void deleteMail(String url, String mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+ public void deleteMail(MailRepositoryUrl url, MailKey mailKey) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
getRepository(url)
.remove(mailKey);
}
- public Task createClearMailRepositoryTask(String url) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+ public Task createClearMailRepositoryTask(MailRepositoryUrl url) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
return new ClearMailRepositoryTask(getRepository(url), url);
}
- public MailRepository getRepository(String url) throws MailRepositoryStore.MailRepositoryStoreException {
+ public MailRepository getRepository(MailRepositoryUrl url) throws MailRepositoryStore.MailRepositoryStoreException {
return mailRepositoryStore.get(url)
.orElseThrow(() -> ErrorResponder.builder()
.statusCode(HttpStatus.NOT_FOUND_404)
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java
index 6f75e2e..26ad50d 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java
@@ -24,7 +24,9 @@ import java.util.concurrent.atomic.AtomicLong;
import javax.mail.MessagingException;
+import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.task.Task;
import org.apache.james.task.TaskExecutionDetails;
@@ -35,13 +37,13 @@ public class ReprocessingAllMailsTask implements Task {
public static final String TYPE = "reprocessingAllTask";
public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
- private final String repositoryUrl;
+ private final MailRepositoryUrl repositoryUrl;
private final String targetQueue;
private final Optional<String> targetProcessor;
private final long initialCount;
private final AtomicLong processedCount;
- public AdditionalInformation(String repositoryUrl, String targetQueue, Optional<String> targetProcessor, long initialCount) {
+ public AdditionalInformation(MailRepositoryUrl repositoryUrl, String targetQueue, Optional<String> targetProcessor, long initialCount) {
this.repositoryUrl = repositoryUrl;
this.targetQueue = targetQueue;
this.targetProcessor = targetProcessor;
@@ -58,7 +60,7 @@ public class ReprocessingAllMailsTask implements Task {
}
public String getRepositoryUrl() {
- return repositoryUrl;
+ return repositoryUrl.asString();
}
public long getRemainingCount() {
@@ -70,19 +72,19 @@ public class ReprocessingAllMailsTask implements Task {
}
@JsonIgnore
- public void notifyProgress(String key) {
+ public void notifyProgress(MailKey key) {
processedCount.incrementAndGet();
}
}
private final ReprocessingService reprocessingService;
- private final String repositoryUrl;
+ private final MailRepositoryUrl repositoryUrl;
private final String targetQueue;
private final Optional<String> targetProcessor;
private final AdditionalInformation additionalInformation;
public ReprocessingAllMailsTask(ReprocessingService reprocessingService, long repositorySize,
- String repositoryUrl, String targetQueue, Optional<String> targetProcessor) {
+ MailRepositoryUrl repositoryUrl, String targetQueue, Optional<String> targetProcessor) {
this.reprocessingService = reprocessingService;
this.repositoryUrl = repositoryUrl;
this.targetQueue = targetQueue;
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java
index d476bfc..453ff8b 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java
@@ -23,7 +23,9 @@ import java.util.Optional;
import javax.mail.MessagingException;
+import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.task.Task;
import org.apache.james.task.TaskExecutionDetails;
@@ -32,12 +34,12 @@ public class ReprocessingOneMailTask implements Task {
public static final String TYPE = "reprocessingOneTask";
public static class AdditionalInformation implements TaskExecutionDetails.AdditionalInformation {
- private final String repositoryUrl;
+ private final MailRepositoryUrl repositoryUrl;
private final String targetQueue;
- private final String mailKey;
+ private final MailKey mailKey;
private final Optional<String> targetProcessor;
- public AdditionalInformation(String repositoryUrl, String targetQueue, String mailKey, Optional<String> targetProcessor) {
+ public AdditionalInformation(MailRepositoryUrl repositoryUrl, String targetQueue, MailKey mailKey, Optional<String> targetProcessor) {
this.repositoryUrl = repositoryUrl;
this.targetQueue = targetQueue;
this.mailKey = mailKey;
@@ -45,7 +47,7 @@ public class ReprocessingOneMailTask implements Task {
}
public String getMailKey() {
- return mailKey;
+ return mailKey.asString();
}
public String getTargetQueue() {
@@ -57,19 +59,19 @@ public class ReprocessingOneMailTask implements Task {
}
public String getRepositoryUrl() {
- return repositoryUrl;
+ return repositoryUrl.asString();
}
}
private final ReprocessingService reprocessingService;
- private final String repositoryUrl;
+ private final MailRepositoryUrl repositoryUrl;
private final String targetQueue;
- private final String mailKey;
+ private final MailKey mailKey;
private final Optional<String> targetProcessor;
private final AdditionalInformation additionalInformation;
public ReprocessingOneMailTask(ReprocessingService reprocessingService,
- String repositoryUrl, String targetQueue, String mailKey, Optional<String> targetProcessor) {
+ MailRepositoryUrl repositoryUrl, String targetQueue, MailKey mailKey, Optional<String> targetProcessor) {
this.reprocessingService = reprocessingService;
this.repositoryUrl = repositoryUrl;
this.targetQueue = targetQueue;
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java
index 8eee51b..fbe68a4 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java
@@ -25,8 +25,10 @@ import java.util.function.Consumer;
import javax.inject.Inject;
import javax.mail.MessagingException;
+import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepository;
import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.queue.api.MailQueue;
import org.apache.james.queue.api.MailQueueFactory;
import org.apache.james.util.streams.Iterators;
@@ -46,7 +48,7 @@ public class ReprocessingService {
this.mailRepositoryStoreService = mailRepositoryStoreService;
}
- public void reprocessAll(String url, Optional<String> targetProcessor, String targetQueue, Consumer<String> keyListener) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+ public void reprocessAll(MailRepositoryUrl url, Optional<String> targetProcessor, String targetQueue, Consumer<MailKey> keyListener) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
MailRepository repository = mailRepositoryStoreService.getRepository(url);
MailQueue mailQueue = getMailQueue(targetQueue);
@@ -55,14 +57,14 @@ public class ReprocessingService {
.forEach(Throwing.consumer(key -> reprocess(repository, mailQueue, key, targetProcessor)));
}
- public void reprocess(String url, String key, Optional<String> targetProcessor, String targetQueue) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
+ public void reprocess(MailRepositoryUrl url, MailKey key, Optional<String> targetProcessor, String targetQueue) throws MailRepositoryStore.MailRepositoryStoreException, MessagingException {
MailRepository repository = mailRepositoryStoreService.getRepository(url);
MailQueue mailQueue = getMailQueue(targetQueue);
reprocess(repository, mailQueue, key, targetProcessor);
}
- private void reprocess(MailRepository repository, MailQueue mailQueue, String key, Optional<String> targetProcessor) throws MessagingException {
+ private void reprocess(MailRepository repository, MailQueue mailQueue, MailKey key, Optional<String> targetProcessor) throws MessagingException {
Mail mail = repository.retrieve(key);
targetProcessor.ifPresent(mail::setState);
mailQueue.enQueue(mail);
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
index 7370e3c..ae90244 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
@@ -32,7 +32,7 @@ import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.isEmptyOrNullString;
import static org.hamcrest.Matchers.notNullValue;
-import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -43,7 +43,9 @@ import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Optional;
+import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.mailrepository.memory.MemoryMailRepository;
import org.apache.james.metrics.api.NoopMetricFactory;
import org.apache.james.queue.api.MailQueueFactory;
@@ -69,6 +71,7 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import com.github.steveash.guavate.Guavate;
import com.google.common.collect.ImmutableList;
import com.jayway.restassured.RestAssured;
import com.jayway.restassured.builder.RequestSpecBuilder;
@@ -77,7 +80,7 @@ import com.jayway.restassured.parsing.Parser;
public class MailRepositoriesRoutesTest {
- private static final String URL_MY_REPO = "url://myRepo";
+ private static final MailRepositoryUrl URL_MY_REPO = MailRepositoryUrl.from("url://myRepo");
private static final String URL_ESCAPED_MY_REPO = "url%3A%2F%2FmyRepo";
private static final String MY_REPO_MAILS = "url%3A%2F%2FmyRepo/mails";
private static final String CUSTOM_QUEUE = "customQueue";
@@ -152,7 +155,7 @@ public class MailRepositoriesRoutesTest {
@Test
public void putMailRepositoryShouldReturnServerErrorWhenCannotCreateRepository() throws Exception {
- when(mailRepositoryStore.create(anyString()))
+ when(mailRepositoryStore.create(any()))
.thenThrow(new MailRepositoryStore.MailRepositoryStoreException("Error while selecting repository url://myRepo"));
when()
@@ -191,13 +194,13 @@ public class MailRepositoriesRoutesTest {
.then()
.statusCode(HttpStatus.OK_200)
.body("", hasSize(1))
- .body("[0].repository", is(URL_MY_REPO))
+ .body("[0].repository", is(URL_MY_REPO.asString()))
.body("[0].id", is(URL_ESCAPED_MY_REPO));
}
@Test
public void getMailRepositoriesShouldReturnTwoRepositoriesWhenTwo() {
- ImmutableList<String> myRepositories = ImmutableList.of(URL_MY_REPO, "url://mySecondRepo");
+ ImmutableList<MailRepositoryUrl> myRepositories = ImmutableList.of(URL_MY_REPO, MailRepositoryUrl.from("url://mySecondRepo"));
when(mailRepositoryStore.getUrls())
.thenReturn(myRepositories);
@@ -212,7 +215,10 @@ public class MailRepositoriesRoutesTest {
.jsonPath()
.getList("repository");
- assertThat(mailRepositories).containsOnlyElementsOf(myRepositories);
+ assertThat(mailRepositories)
+ .containsOnlyElementsOf(myRepositories.stream()
+ .map(MailRepositoryUrl::asString)
+ .collect(Guavate.toImmutableList()));
}
@Test
@@ -423,7 +429,7 @@ public class MailRepositoriesRoutesTest {
.then()
.statusCode(HttpStatus.OK_200)
.contentType(ContentType.JSON)
- .body("repository", is(URL_MY_REPO))
+ .body("repository", is(URL_MY_REPO.asString()))
.body("id", is(URL_ESCAPED_MY_REPO));
}
@@ -653,7 +659,7 @@ public class MailRepositoriesRoutesTest {
.body("status", is("completed"))
.body("taskId", is(notNullValue()))
.body("type", is(ClearMailRepositoryTask.TYPE))
- .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+ .body("additionalInformation.repositoryUrl", is(URL_MY_REPO.asString()))
.body("additionalInformation.initialCount", is(2))
.body("additionalInformation.remainingCount", is(0))
.body("startedDate", is(notNullValue()))
@@ -780,7 +786,7 @@ public class MailRepositoriesRoutesTest {
.body("status", is("completed"))
.body("taskId", is(notNullValue()))
.body("type", is(ReprocessingAllMailsTask.TYPE))
- .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+ .body("additionalInformation.repositoryUrl", is(URL_MY_REPO.asString()))
.body("additionalInformation.initialCount", is(2))
.body("additionalInformation.remainingCount", is(0))
.body("additionalInformation.targetProcessor", isEmptyOrNullString())
@@ -819,7 +825,7 @@ public class MailRepositoriesRoutesTest {
.body("status", is("completed"))
.body("taskId", is(notNullValue()))
.body("type", is(ReprocessingAllMailsTask.TYPE))
- .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+ .body("additionalInformation.repositoryUrl", is(URL_MY_REPO.asString()))
.body("additionalInformation.initialCount", is(2))
.body("additionalInformation.remainingCount", is(0))
.body("additionalInformation.targetProcessor", is(transport))
@@ -1052,7 +1058,7 @@ public class MailRepositoriesRoutesTest {
.body("status", is("completed"))
.body("taskId", is(notNullValue()))
.body("type", is(ReprocessingOneMailTask.TYPE))
- .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+ .body("additionalInformation.repositoryUrl", is(URL_MY_REPO.asString()))
.body("additionalInformation.mailKey", is(NAME_1))
.body("additionalInformation.targetProcessor", isEmptyOrNullString())
.body("additionalInformation.targetQueue", is(MailQueueFactory.SPOOL))
@@ -1090,7 +1096,7 @@ public class MailRepositoriesRoutesTest {
.body("status", is("completed"))
.body("taskId", is(notNullValue()))
.body("type", is(ReprocessingOneMailTask.TYPE))
- .body("additionalInformation.repositoryUrl", is(URL_MY_REPO))
+ .body("additionalInformation.repositoryUrl", is(URL_MY_REPO.asString()))
.body("additionalInformation.mailKey", is(NAME_1))
.body("additionalInformation.targetProcessor", is(transport))
.body("additionalInformation.targetQueue", is(CUSTOM_QUEUE))
@@ -1125,7 +1131,7 @@ public class MailRepositoriesRoutesTest {
.get(taskId + "/await");
assertThat(mailRepository.list())
- .containsOnly(NAME_2);
+ .containsOnly(new MailKey(NAME_2));
}
@Test
http://git-wip-us.apache.org/repos/asf/james-project/blob/946c68be/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
index 100959a..927c5136 100644
--- a/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
+++ b/server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
@@ -29,13 +29,15 @@ import java.util.Optional;
import javax.mail.internet.MimeMessage;
import org.apache.commons.io.IOUtils;
+import org.apache.james.mailrepository.api.MailKey;
import org.apache.james.mailrepository.api.MailRepositoryStore;
+import org.apache.james.mailrepository.api.MailRepositoryUrl;
import org.apache.james.mailrepository.memory.MemoryMailRepository;
import org.apache.james.server.core.MimeMessageInputStream;
import org.apache.james.util.ClassLoaderUtils;
import org.apache.james.util.streams.Limit;
import org.apache.james.util.streams.Offset;
-import org.apache.james.webadmin.dto.MailKey;
+import org.apache.james.webadmin.dto.MailKeyDTO;
import org.apache.james.webadmin.dto.MailRepositoryResponse;
import org.apache.mailet.base.test.FakeMail;
import org.junit.Before;
@@ -44,10 +46,10 @@ import org.junit.Test;
import com.google.common.collect.ImmutableList;
public class MailRepositoryStoreServiceTest {
- private static final String FIRST_REPOSITORY = "url://repository";
- private static final String SECOND_REPOSITORY = "url://repository2";
- private static final String NAME_1 = "name1";
- private static final String NAME_2 = "name2";
+ private static final MailRepositoryUrl FIRST_REPOSITORY = MailRepositoryUrl.from("url://repository");
+ private static final MailRepositoryUrl SECOND_REPOSITORY = MailRepositoryUrl.from("url://repository2");
+ private static final MailKey NAME_1 = new MailKey("name1");
+ private static final MailKey NAME_2 = new MailKey("name2");
private MailRepositoryStore mailRepositoryStore;
private MailRepositoryStoreService testee;
@@ -71,7 +73,7 @@ public class MailRepositoryStoreServiceTest {
.thenReturn(ImmutableList.of(FIRST_REPOSITORY));
assertThat(testee.listMailRepositories())
.extracting(MailRepositoryResponse::getRepository)
- .containsOnly(FIRST_REPOSITORY);
+ .containsOnly(FIRST_REPOSITORY.asString());
}
@Test
@@ -80,7 +82,7 @@ public class MailRepositoryStoreServiceTest {
.thenReturn(ImmutableList.of(FIRST_REPOSITORY, SECOND_REPOSITORY));
assertThat(testee.listMailRepositories())
.extracting(MailRepositoryResponse::getRepository)
- .containsOnly(FIRST_REPOSITORY, SECOND_REPOSITORY);
+ .containsOnly(FIRST_REPOSITORY.asString(), SECOND_REPOSITORY.asString());
}
@Test
@@ -105,14 +107,14 @@ public class MailRepositoryStoreServiceTest {
when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
repository.store(FakeMail.builder()
- .name(NAME_1)
+ .name(NAME_1.asString())
.build());
repository.store(FakeMail.builder()
- .name(NAME_2)
+ .name(NAME_2.asString())
.build());
assertThat(testee.listMails(FIRST_REPOSITORY, Offset.none(), Limit.unlimited()).get())
- .containsOnly(new MailKey(NAME_1), new MailKey(NAME_2));
+ .containsOnly(new MailKeyDTO(NAME_1), new MailKeyDTO(NAME_2));
}
@Test
@@ -120,22 +122,22 @@ public class MailRepositoryStoreServiceTest {
when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
repository.store(FakeMail.builder()
- .name(NAME_1)
+ .name(NAME_1.asString())
.build());
repository.store(FakeMail.builder()
- .name(NAME_2)
+ .name(NAME_2.asString())
.build());
repository.store(FakeMail.builder()
.name("name3")
.build());
assertThat(testee.listMails(FIRST_REPOSITORY, Offset.from(1), Limit.from(1)).get())
- .containsOnly(new MailKey(NAME_2));
+ .containsOnly(new MailKeyDTO(NAME_2));
}
@Test
public void retrieveMessageShouldThrownWhenUnknownRepository() throws Exception {
- when(mailRepositoryStore.get("unkown")).thenReturn(Optional.empty());
+ when(mailRepositoryStore.get(MailRepositoryUrl.from("proto://unkown"))).thenReturn(Optional.empty());
assertThatThrownBy(() -> testee.retrieveMessage(FIRST_REPOSITORY, NAME_1))
.isInstanceOf(NullPointerException.class);
@@ -163,7 +165,7 @@ public class MailRepositoryStoreServiceTest {
when(mailRepositoryStore.get(FIRST_REPOSITORY)).thenReturn(Optional.of(repository));
FakeMail mail = FakeMail.builder()
- .name(NAME_1)
+ .name(NAME_1.asString())
.fileName("mail.eml")
.build();
repository.store(mail);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org