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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org