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 bt...@apache.org on 2019/01/16 06:59:16 UTC
[08/17] james-project git commit: JAMES-2637 refactoring forward and
group routes
JAMES-2637 refactoring forward and group routes
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/331a888c
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/331a888c
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/331a888c
Branch: refs/heads/master
Commit: 331a888c71674cc7f77a3a4cd836cd5561b742d2
Parents: b312b87
Author: Rene Cordier <rc...@linagora.com>
Authored: Thu Jan 10 17:34:40 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Wed Jan 16 13:48:56 2019 +0700
----------------------------------------------------------------------
.../james/modules/server/DataRoutesModules.java | 5 ++
.../james/rrt/api/RecipientRewriteTable.java | 12 +++-
.../org/apache/james/rrt/lib/MappingSource.java | 19 ++++++-
.../james/webadmin/dto/MappingSourceModule.java | 60 ++++++++++++++++++++
.../james/webadmin/routes/ForwardRoutes.java | 17 +-----
.../james/webadmin/routes/GroupsRoutes.java | 15 +----
.../webadmin/routes/ForwardRoutesTest.java | 8 ++-
.../james/webadmin/routes/GroupsRoutesTest.java | 8 ++-
8 files changed, 108 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/331a888c/server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DataRoutesModules.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DataRoutesModules.java b/server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DataRoutesModules.java
index a2726af..f6400ea 100644
--- a/server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DataRoutesModules.java
+++ b/server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DataRoutesModules.java
@@ -20,12 +20,14 @@
package org.apache.james.modules.server;
import org.apache.james.webadmin.Routes;
+import org.apache.james.webadmin.dto.MappingSourceModule;
import org.apache.james.webadmin.routes.AliasRoutes;
import org.apache.james.webadmin.routes.DomainMappingsRoutes;
import org.apache.james.webadmin.routes.DomainsRoutes;
import org.apache.james.webadmin.routes.ForwardRoutes;
import org.apache.james.webadmin.routes.GroupsRoutes;
import org.apache.james.webadmin.routes.UserRoutes;
+import org.apache.james.webadmin.utils.JsonTransformerModule;
import com.google.inject.AbstractModule;
import com.google.inject.multibindings.Multibinder;
@@ -41,5 +43,8 @@ public class DataRoutesModules extends AbstractModule {
routesMultibinder.addBinding().to(ForwardRoutes.class);
routesMultibinder.addBinding().to(GroupsRoutes.class);
routesMultibinder.addBinding().to(UserRoutes.class);
+
+ Multibinder<JsonTransformerModule> jsonTransformerModuleMultibinder = Multibinder.newSetBinder(binder(), JsonTransformerModule.class);
+ jsonTransformerModuleMultibinder.addBinding().to(MappingSourceModule.class);
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/331a888c/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
index 4970f1b..2c53f3a 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
@@ -115,9 +115,19 @@ public interface RecipientRewriteTable {
Preconditions.checkArgument(listSourcesSupportedType.contains(mapping.getType()),
String.format("Not supported mapping of type %s", mapping.getType()));
- return getAllMappings().entrySet().stream()
+ return getAllMappings()
+ .entrySet().stream()
.filter(entry -> entry.getValue().contains(mapping))
.map(Map.Entry::getKey)
.collect(Guavate.toImmutableList());
}
+
+ default List<MappingSource> getSourcesForType(Mapping.Type type) throws RecipientRewriteTableException {
+ return getAllMappings()
+ .entrySet().stream()
+ .filter(e -> e.getValue().contains(type))
+ .map(Map.Entry::getKey)
+ .sorted()
+ .collect(Guavate.toImmutableList());
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/331a888c/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
index 7bd6298..68ad8b4 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
@@ -32,7 +32,7 @@ import org.apache.james.util.OptionalUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class MappingSource implements Serializable {
+public class MappingSource implements Serializable, Comparable<MappingSource> {
private static final Logger LOGGER = LoggerFactory.getLogger(MappingSource.class);
private static final String WILDCARD = "*";
@@ -145,4 +145,21 @@ public class MappingSource implements Serializable {
public final int hashCode() {
return Objects.hash(domain, user, wildcard);
}
+
+ @Override
+ public int compareTo(MappingSource mappingSource) {
+ final int result;
+ final MailAddress mailAddress1 = this.asMailAddress().get();
+ final MailAddress mailAddress2 = mappingSource.asMailAddress().get();
+
+ if (mailAddress1 == null) {
+ result = mailAddress2 == null ? 0 : 1;
+ } else if (mailAddress2 == null) {
+ result = -1;
+ } else {
+ result = mailAddress1.asString().compareTo(mailAddress2.asString());
+ }
+
+ return result;
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/331a888c/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/MappingSourceModule.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/MappingSourceModule.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/MappingSourceModule.java
new file mode 100644
index 0000000..424a04e
--- /dev/null
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/MappingSourceModule.java
@@ -0,0 +1,60 @@
+/****************************************************************
+ * 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.io.IOException;
+import java.util.Optional;
+
+import org.apache.james.core.MailAddress;
+import org.apache.james.rrt.lib.MappingSource;
+import org.apache.james.webadmin.utils.JsonTransformerModule;
+
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.JsonSerializer;
+import com.fasterxml.jackson.databind.Module;
+import com.fasterxml.jackson.databind.SerializerProvider;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+
+public class MappingSourceModule implements JsonTransformerModule {
+
+ private final SimpleModule simpleModule;
+
+ public MappingSourceModule() {
+ simpleModule = new SimpleModule()
+ .addSerializer(MappingSource.class, new JsonSerializer<MappingSource>() {
+ @Override
+ public void serialize(MappingSource t, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
+ jsonGenerator.writeString(serialize(t.asMailAddress()));
+ }
+
+ private String serialize(Optional<MailAddress> mailAddress) {
+ if (mailAddress.isPresent()) {
+ return mailAddress.get().asString();
+ }
+ return "";
+ }
+ });
+ }
+
+ @Override
+ public Module asJacksonModule() {
+ return simpleModule;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/331a888c/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
index d69a568..5484f58 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
@@ -23,9 +23,6 @@ import static org.apache.james.webadmin.Constants.SEPARATOR;
import static spark.Spark.halt;
import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
import javax.inject.Inject;
import javax.ws.rs.DELETE;
@@ -44,7 +41,6 @@ import org.apache.james.rrt.lib.MappingSource;
import org.apache.james.rrt.lib.Mappings;
import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.api.UsersRepositoryException;
-import org.apache.james.util.OptionalUtils;
import org.apache.james.webadmin.Constants;
import org.apache.james.webadmin.Routes;
import org.apache.james.webadmin.dto.ForwardDestinationResponse;
@@ -56,7 +52,6 @@ import org.eclipse.jetty.http.HttpStatus;
import com.github.steveash.guavate.Guavate;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSortedSet;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@@ -128,16 +123,8 @@ public class ForwardRoutes implements Routes {
@ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500,
message = "Internal server error - Something went bad on the server side.")
})
- public Set<String> listForwards(Request request, Response response) throws RecipientRewriteTableException {
- return Optional.ofNullable(recipientRewriteTable.getAllMappings())
- .map(mappings ->
- mappings.entrySet().stream()
- .filter(e -> e.getValue().contains(Mapping.Type.Forward))
- .map(Map.Entry::getKey)
- .flatMap(source -> OptionalUtils.toStream(source.asMailAddress()))
- .map(MailAddress::asString)
- .collect(Guavate.toImmutableSortedSet()))
- .orElse(ImmutableSortedSet.of());
+ public List<MappingSource> listForwards(Request request, Response response) throws RecipientRewriteTableException {
+ return recipientRewriteTable.getSourcesForType(Mapping.Type.Forward);
}
@PUT
http://git-wip-us.apache.org/repos/asf/james-project/blob/331a888c/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
index 3ce454e..f191b31 100644
--- a/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
+++ b/server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
@@ -23,9 +23,6 @@ import static org.apache.james.webadmin.Constants.SEPARATOR;
import static spark.Spark.halt;
import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
import javax.inject.Inject;
import javax.ws.rs.DELETE;
@@ -123,16 +120,8 @@ public class GroupsRoutes implements Routes {
@ApiResponse(code = HttpStatus.INTERNAL_SERVER_ERROR_500,
message = "Internal server error - Something went bad on the server side.")
})
- public Set<String> listGroups(Request request, Response response) throws RecipientRewriteTableException {
- return Optional.ofNullable(recipientRewriteTable.getAllMappings())
- .map(mappings ->
- mappings.entrySet().stream()
- .filter(e -> e.getValue().contains(Mapping.Type.Group))
- .map(Map.Entry::getKey)
- .flatMap(source -> OptionalUtils.toStream(source.asMailAddress()))
- .map(MailAddress::asString)
- .collect(Guavate.toImmutableSortedSet()))
- .orElse(ImmutableSortedSet.of());
+ public List<MappingSource> listGroups(Request request, Response response) throws RecipientRewriteTableException {
+ return recipientRewriteTable.getSourcesForType(Mapping.Type.Group);
}
@PUT
http://git-wip-us.apache.org/repos/asf/james-project/blob/331a888c/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
index 288b050..f254860 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
@@ -52,6 +52,7 @@ import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.memory.MemoryUsersRepository;
import org.apache.james.webadmin.WebAdminServer;
import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.james.webadmin.dto.MappingSourceModule;
import org.apache.james.webadmin.utils.JsonTransformer;
import org.eclipse.jetty.http.HttpStatus;
import org.junit.jupiter.api.AfterEach;
@@ -113,6 +114,7 @@ class ForwardRoutesTest {
.autoDetect(false)
.autoDetectIp(false));
domainList.addDomain(DOMAIN);
+ MappingSourceModule mappingSourceModule = new MappingSourceModule();
usersRepository = MemoryUsersRepository.withVirtualHosting();
usersRepository.setDomainList(domainList);
@@ -123,7 +125,7 @@ class ForwardRoutesTest {
usersRepository.addUser(ALICE_WITH_SLASH, ALICE_SLASH_PASSWORD);
usersRepository.addUser(CEDRIC, CEDRIC_PASSWORD);
- createServer(new ForwardRoutes(memoryRecipientRewriteTable, usersRepository, new JsonTransformer()));
+ createServer(new ForwardRoutes(memoryRecipientRewriteTable, usersRepository, new JsonTransformer(mappingSourceModule)));
}
@Test
@@ -617,7 +619,7 @@ class ForwardRoutesTest {
void getAllShouldReturnErrorWhenRecipientRewriteTableExceptionIsThrown() throws Exception {
doThrow(RecipientRewriteTableException.class)
.when(memoryRecipientRewriteTable)
- .getAllMappings();
+ .getSourcesForType(any());
when()
.get()
@@ -629,7 +631,7 @@ class ForwardRoutesTest {
void getAllShouldReturnErrorWhenRuntimeExceptionIsThrown() throws Exception {
doThrow(RuntimeException.class)
.when(memoryRecipientRewriteTable)
- .getAllMappings();
+ .getSourcesForType(any());
when()
.get()
http://git-wip-us.apache.org/repos/asf/james-project/blob/331a888c/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
----------------------------------------------------------------------
diff --git a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
index 1edf80d..713a8ff 100644
--- a/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
+++ b/server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
@@ -50,6 +50,7 @@ import org.apache.james.user.api.UsersRepositoryException;
import org.apache.james.user.memory.MemoryUsersRepository;
import org.apache.james.webadmin.WebAdminServer;
import org.apache.james.webadmin.WebAdminUtils;
+import org.apache.james.webadmin.dto.MappingSourceModule;
import org.apache.james.webadmin.utils.JsonTransformer;
import org.eclipse.jetty.http.HttpStatus;
import org.junit.jupiter.api.AfterEach;
@@ -109,7 +110,8 @@ class GroupsRoutesTest {
domainList.addDomain(DOMAIN);
usersRepository = MemoryUsersRepository.withVirtualHosting();
usersRepository.setDomainList(domainList);
- createServer(new GroupsRoutes(memoryRecipientRewriteTable, usersRepository, domainList, new JsonTransformer()));
+ MappingSourceModule mappingSourceModule = new MappingSourceModule();
+ createServer(new GroupsRoutes(memoryRecipientRewriteTable, usersRepository, domainList, new JsonTransformer(mappingSourceModule)));
}
@Test
@@ -622,7 +624,7 @@ class GroupsRoutesTest {
void getAllShouldReturnErrorWhenRecipientRewriteTableExceptionIsThrown() throws Exception {
doThrow(RecipientRewriteTableException.class)
.when(memoryRecipientRewriteTable)
- .getAllMappings();
+ .getSourcesForType(any());
when()
.get()
@@ -634,7 +636,7 @@ class GroupsRoutesTest {
void getAllShouldReturnErrorWhenRuntimeExceptionIsThrown() throws Exception {
doThrow(RuntimeException.class)
.when(memoryRecipientRewriteTable)
- .getAllMappings();
+ .getSourcesForType(any());
when()
.get()
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org