http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java index 8fe0e98..a82e94f 100644 --- a/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java +++ b/server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java @@ -22,6 +22,7 @@ import org.apache.commons.configuration.DefaultConfigurationBuilder; import org.apache.james.backends.cassandra.CassandraCluster; import org.apache.james.backends.cassandra.DockerCassandraRule; import org.apache.james.backends.cassandra.utils.CassandraUtils; +import org.apache.james.core.Domain; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest; @@ -58,7 +59,7 @@ public class CassandraRecipientRewriteTableTest extends AbstractRecipientRewrite } @Override - protected void addMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException { + protected void addMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { switch (type) { case ERROR_TYPE: virtualUserTable.addErrorMapping(user, domain, mapping); @@ -70,7 +71,7 @@ public class CassandraRecipientRewriteTableTest extends AbstractRecipientRewrite virtualUserTable.addAddressMapping(user, domain, mapping); break; case ALIASDOMAIN_TYPE: - virtualUserTable.addAliasDomainMapping(domain, mapping); + virtualUserTable.addAliasDomainMapping(domain, Domain.of(mapping)); break; default: throw new RuntimeException("Invalid mapping type: " + type); @@ -78,7 +79,7 @@ public class CassandraRecipientRewriteTableTest extends AbstractRecipientRewrite } @Override - protected void removeMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException { + protected void removeMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { switch (type) { case ERROR_TYPE: virtualUserTable.removeErrorMapping(user, domain, mapping); @@ -90,7 +91,7 @@ public class CassandraRecipientRewriteTableTest extends AbstractRecipientRewrite virtualUserTable.removeAddressMapping(user, domain, mapping); break; case ALIASDOMAIN_TYPE: - virtualUserTable.removeAliasDomainMapping(domain, mapping); + virtualUserTable.removeAliasDomainMapping(domain, Domain.of(mapping)); break; default: throw new RuntimeException("Invalid mapping type: " + type);
http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-file/src/main/java/org/apache/james/domainlist/xml/XMLDomainList.java ---------------------------------------------------------------------- diff --git a/server/data/data-file/src/main/java/org/apache/james/domainlist/xml/XMLDomainList.java b/server/data/data-file/src/main/java/org/apache/james/domainlist/xml/XMLDomainList.java index 1d2966e..73b9b31 100644 --- a/server/data/data-file/src/main/java/org/apache/james/domainlist/xml/XMLDomainList.java +++ b/server/data/data-file/src/main/java/org/apache/james/domainlist/xml/XMLDomainList.java @@ -21,13 +21,13 @@ package org.apache.james.domainlist.xml; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import javax.inject.Inject; import javax.inject.Singleton; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.core.Domain; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.domainlist.api.DomainListException; import org.apache.james.domainlist.lib.AbstractDomainList; @@ -39,7 +39,7 @@ import org.apache.james.lifecycle.api.Configurable; @Singleton public class XMLDomainList extends AbstractDomainList implements Configurable { - private final List<String> domainNames = new ArrayList<>(); + private final List<Domain> domainNames = new ArrayList<>(); private boolean isConfigured = false; @Inject @@ -54,17 +54,17 @@ public class XMLDomainList extends AbstractDomainList implements Configurable { } @Override - protected List<String> getDomainListInternal() { + protected List<Domain> getDomainListInternal() { return new ArrayList<>(domainNames); } @Override - protected boolean containsDomainInternal(String domains) throws DomainListException { - return domainNames.contains(domains.toLowerCase(Locale.US)); + protected boolean containsDomainInternal(Domain domain) throws DomainListException { + return domainNames.contains(domain); } @Override - public void addDomain(String domain) throws DomainListException { + public void addDomain(Domain domain) throws DomainListException { if (isConfigured) { throw new DomainListException("Read-Only DomainList implementation"); } @@ -72,7 +72,7 @@ public class XMLDomainList extends AbstractDomainList implements Configurable { } @Override - public void removeDomain(String domain) throws DomainListException { + public void removeDomain(Domain domain) throws DomainListException { if (isConfigured) { throw new DomainListException("Read-Only DomainList implementation"); } http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-file/src/main/java/org/apache/james/rrt/file/XMLRecipientRewriteTable.java ---------------------------------------------------------------------- diff --git a/server/data/data-file/src/main/java/org/apache/james/rrt/file/XMLRecipientRewriteTable.java b/server/data/data-file/src/main/java/org/apache/james/rrt/file/XMLRecipientRewriteTable.java index bab777e..f543ece 100644 --- a/server/data/data-file/src/main/java/org/apache/james/rrt/file/XMLRecipientRewriteTable.java +++ b/server/data/data-file/src/main/java/org/apache/james/rrt/file/XMLRecipientRewriteTable.java @@ -23,6 +23,7 @@ import java.util.Map; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.core.Domain; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; import org.apache.james.rrt.lib.Mapping; @@ -56,7 +57,7 @@ public class XMLRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected String mapAddressInternal(String user, String domain) throws RecipientRewriteTableException { + protected String mapAddressInternal(String user, Domain domain) throws RecipientRewriteTableException { if (mappings == null) { return null; } else { @@ -65,11 +66,11 @@ public class XMLRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected Mappings getUserDomainMappingsInternal(String user, String domain) throws RecipientRewriteTableException { + protected Mappings getUserDomainMappingsInternal(String user, Domain domain) throws RecipientRewriteTableException { if (mappings == null) { return null; } else { - String maps = mappings.get(user + "@" + domain); + String maps = mappings.get(user + "@" + domain.asString()); if (maps != null) { return MappingsImpl.fromRawString(maps); } else { @@ -92,12 +93,12 @@ public class XMLRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected void addMappingInternal(String user, String domain, Mapping mapping) throws RecipientRewriteTableException { + protected void addMappingInternal(String user, Domain domain, Mapping mapping) throws RecipientRewriteTableException { throw new RecipientRewriteTableException("Read-Only implementation"); } @Override - protected void removeMappingInternal(String user, String domain, Mapping mapping) throws RecipientRewriteTableException { + protected void removeMappingInternal(String user, Domain domain, Mapping mapping) throws RecipientRewriteTableException { throw new RecipientRewriteTableException("Read-Only implementation"); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-file/src/test/java/org/apache/james/domainlist/xml/XMLDomainListTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-file/src/test/java/org/apache/james/domainlist/xml/XMLDomainListTest.java b/server/data/data-file/src/test/java/org/apache/james/domainlist/xml/XMLDomainListTest.java index 80a8628..7a99107 100644 --- a/server/data/data-file/src/test/java/org/apache/james/domainlist/xml/XMLDomainListTest.java +++ b/server/data/data-file/src/test/java/org/apache/james/domainlist/xml/XMLDomainListTest.java @@ -28,6 +28,7 @@ import java.util.List; import org.apache.commons.configuration.DefaultConfigurationBuilder; import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.core.Domain; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.dnsservice.api.mock.MockDNSService; import org.apache.james.domainlist.api.DomainListException; @@ -39,7 +40,7 @@ import com.google.common.collect.ImmutableList; public class XMLDomainListTest { - public static final String DEFAULT_DOMAIN = "default.domain"; + public static final Domain DEFAULT_DOMAIN = Domain.of("default.domain"); @Rule public ExpectedException expectedException = ExpectedException.none(); @@ -52,7 +53,7 @@ public class XMLDomainListTest { for (String name : names) { configuration.addProperty("domainnames.domainname", name); } - configuration.addProperty("defaultDomain", DEFAULT_DOMAIN); + configuration.addProperty("defaultDomain", DEFAULT_DOMAIN.asString()); return configuration; } @@ -130,7 +131,7 @@ public class XMLDomainListTest { XMLDomainList testee = new XMLDomainList(setUpDNSServer("hostname")); testee.configure(setUpConfiguration(true, false, domains)); - testee.addDomain("newDomain"); + testee.addDomain(Domain.of("newDomain")); } @Test @@ -143,7 +144,7 @@ public class XMLDomainListTest { XMLDomainList testee = new XMLDomainList(setUpDNSServer("localhost")); testee.configure(setUpConfiguration(true, false, domains)); - testee.removeDomain("newDomain"); + testee.removeDomain(Domain.of("newDomain")); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java b/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java index 0c59bea..c683c60 100644 --- a/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java +++ b/server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Optional; import org.apache.commons.configuration.DefaultConfigurationBuilder; +import org.apache.james.core.Domain; import org.apache.james.rrt.api.RecipientRewriteTable; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; @@ -69,7 +70,7 @@ public class XMLRecipientRewriteTableTest extends AbstractRecipientRewriteTableT } @Override - protected void addMapping(String user, String domain, String mapping, int type) throws + protected void addMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { Mappings mappings = virtualUserTable.getUserDomainMappings(user, domain); @@ -93,7 +94,7 @@ public class XMLRecipientRewriteTableTest extends AbstractRecipientRewriteTableT Mappings updatedMappings = builder.build(); if (!updatedMappings.isEmpty()) { - defaultConfiguration.addProperty("mapping", user + "@" + domain + "=" + updatedMappings.serialize()); + defaultConfiguration.addProperty("mapping", user + "@" + domain.asString() + "=" + updatedMappings.serialize()); } try { @@ -107,7 +108,7 @@ public class XMLRecipientRewriteTableTest extends AbstractRecipientRewriteTableT } @Override - protected void removeMapping(String user, String domain, String mapping, int type) throws + protected void removeMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { Mappings mappings = virtualUserTable.getUserDomainMappings(user, domain); @@ -125,11 +126,11 @@ public class XMLRecipientRewriteTableTest extends AbstractRecipientRewriteTableT } else if (type == ADDRESS_TYPE) { mappings = mappings.remove(MappingImpl.address(mapping)); } else if (type == ALIASDOMAIN_TYPE) { - mappings = mappings.remove(MappingImpl.domain(mapping)); + mappings = mappings.remove(MappingImpl.domain(Domain.of(mapping))); } if (mappings.size() > 0) { - defaultConfiguration.addProperty("mapping", user + "@" + domain + "=" + mappings.serialize()); + defaultConfiguration.addProperty("mapping", user + "@" + domain.asString() + "=" + mappings.serialize()); } try { @@ -141,10 +142,10 @@ public class XMLRecipientRewriteTableTest extends AbstractRecipientRewriteTableT } } - private void removeMappingsFromConfig(String user, String domain, Mappings mappings) { + private void removeMappingsFromConfig(String user, Domain domain, Mappings mappings) { List<String> stored = new ArrayList<>(); for (String c : defaultConfiguration.getStringArray("mapping")) { - String mapping = user + "@" + domain + "=" + mappings.serialize(); + String mapping = user + "@" + domain.asString() + "=" + mappings.serialize(); if (!c.equalsIgnoreCase(mapping)) { stored.add(c); } http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java ---------------------------------------------------------------------- diff --git a/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java b/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java index d7bdbcc..4e262e2 100644 --- a/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java +++ b/server/data/data-hbase/src/main/java/org/apache/james/domainlist/hbase/HBaseDomainList.java @@ -21,7 +21,6 @@ package org.apache.james.domainlist.hbase; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import javax.inject.Inject; @@ -33,6 +32,7 @@ import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.james.core.Domain; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.domainlist.api.DomainListException; import org.apache.james.domainlist.hbase.def.HDomainList; @@ -57,11 +57,11 @@ public class HBaseDomainList extends AbstractDomainList { } @Override - protected boolean containsDomainInternal(String domain) throws DomainListException { + protected boolean containsDomainInternal(Domain domain) throws DomainListException { HTableInterface table = null; try { table = TablePool.getInstance().getDomainlistTable(); - Get get = new Get(Bytes.toBytes(domain.toLowerCase(Locale.US))); + Get get = new Get(Bytes.toBytes(domain.asString())); Result result = table.get(get); if (!result.isEmpty()) { return true; @@ -82,15 +82,14 @@ public class HBaseDomainList extends AbstractDomainList { } @Override - public void addDomain(String domain) throws DomainListException { - String lowerCasedDomain = domain.toLowerCase(Locale.US); - if (containsDomain(lowerCasedDomain)) { - throw new DomainListException(lowerCasedDomain + " already exists."); + public void addDomain(Domain domain) throws DomainListException { + if (containsDomain(domain)) { + throw new DomainListException(domain + " already exists."); } HTableInterface table = null; try { table = TablePool.getInstance().getDomainlistTable(); - Put put = new Put(Bytes.toBytes(lowerCasedDomain)); + Put put = new Put(Bytes.toBytes(domain.asString())); put.add(HDomainList.COLUMN_FAMILY_NAME, HDomainList.COLUMN.DOMAIN, null); table.put(put); table.flushCommits(); @@ -109,11 +108,11 @@ public class HBaseDomainList extends AbstractDomainList { } @Override - public void removeDomain(String domain) throws DomainListException { + public void removeDomain(Domain domain) throws DomainListException { HTableInterface table = null; try { table = TablePool.getInstance().getDomainlistTable(); - Delete delete = new Delete(Bytes.toBytes(domain.toLowerCase(Locale.US))); + Delete delete = new Delete(Bytes.toBytes(domain.asString())); table.delete(delete); table.flushCommits(); } catch (IOException e) { @@ -131,8 +130,8 @@ public class HBaseDomainList extends AbstractDomainList { } @Override - protected List<String> getDomainListInternal() throws DomainListException { - List<String> list = new ArrayList<>(); + protected List<Domain> getDomainListInternal() throws DomainListException { + List<Domain> list = new ArrayList<>(); HTableInterface table = null; ResultScanner resultScanner = null; try { @@ -143,7 +142,7 @@ public class HBaseDomainList extends AbstractDomainList { resultScanner = table.getScanner(scan); Result result; while ((result = resultScanner.next()) != null) { - list.add(Bytes.toString(result.getRow())); + list.add(Domain.of(Bytes.toString(result.getRow()))); } } catch (IOException e) { log.error("Error while counting domains from HBase", e); http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java ---------------------------------------------------------------------- diff --git a/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java b/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java index 1a3cf51..dd9b042 100644 --- a/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java +++ b/server/data/data-hbase/src/main/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTable.java @@ -33,6 +33,7 @@ import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.james.core.Domain; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.hbase.def.HRecipientRewriteTable; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; @@ -55,9 +56,9 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { private static final String ROW_SEPARATOR = "@"; @Override - protected void addMappingInternal(String user, String domain, Mapping mapping) throws RecipientRewriteTableException { + protected void addMappingInternal(String user, Domain domain, Mapping mapping) throws RecipientRewriteTableException { String fixedUser = getFixedUser(user); - String fixedDomain = getFixedDomain(domain); + Domain fixedDomain = getFixedDomain(domain); Mappings map = getUserDomainMappings(fixedUser, fixedDomain); if (map != null && map.size() != 0) { Mappings updatedMappings = MappingsImpl.from(map).add(mapping).build(); @@ -68,7 +69,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected Mappings getUserDomainMappingsInternal(String user, String domain) throws + protected Mappings getUserDomainMappingsInternal(String user, Domain domain) throws RecipientRewriteTableException { HTableInterface table = null; Mappings list = MappingsImpl.empty(); @@ -90,7 +91,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { } } - private Mappings feedUserDomainMappingsList(HTableInterface table, String user, String domain, Mappings list) throws + private Mappings feedUserDomainMappingsList(HTableInterface table, String user, Domain domain, Mappings list) throws IOException { Get get = new Get(Bytes.toBytes(getRowKey(user, domain))); Result result = table.get(get); @@ -153,7 +154,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected String mapAddressInternal(String user, String domain) throws RecipientRewriteTableException { + protected String mapAddressInternal(String user, Domain domain) throws RecipientRewriteTableException { HTableInterface table = null; String mappings = null; try { @@ -163,7 +164,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { mappings = getMapping(table, WILDCARD, domain); } if (mappings == null) { - mappings = getMapping(table, user, WILDCARD); + mappings = getMapping(table, user, Domains.WILDCARD); } } catch (IOException e) { log.error("Error while mapping address in HBase", e); @@ -180,7 +181,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { return mappings; } - private String getMapping(HTableInterface table, String user, String domain) throws IOException { + private String getMapping(HTableInterface table, String user, Domain domain) throws IOException { Get get = new Get(Bytes.toBytes(getRowKey(user, domain))); Result result = table.get(get); List<KeyValue> keyValues = result.getColumn(HRecipientRewriteTable.COLUMN_FAMILY_NAME, @@ -192,10 +193,10 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected void removeMappingInternal(String user, String domain, Mapping mapping) throws + protected void removeMappingInternal(String user, Domain domain, Mapping mapping) throws RecipientRewriteTableException { String fixedUser = getFixedUser(user); - String fixedDomain = getFixedDomain(domain); + Domain fixedDomain = getFixedDomain(domain); Mappings map = getUserDomainMappings(fixedUser, fixedDomain); if (map != null && map.size() > 1) { Mappings updatedMappings = map.remove(mapping); @@ -215,7 +216,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { * @param mapping the mapping * @throws RecipientRewriteTableException */ - private void doUpdateMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { + private void doUpdateMapping(String user, Domain domain, String mapping) throws RecipientRewriteTableException { doAddMapping(user, domain, mapping); } @@ -227,7 +228,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { * @param mapping the mapping * @throws RecipientRewriteTableException */ - private void doRemoveMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { + private void doRemoveMapping(String user, Domain domain, String mapping) throws RecipientRewriteTableException { HTableInterface table = null; try { table = TablePool.getInstance().getRecipientRewriteTable(); @@ -256,7 +257,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { * @param mapping the mapping * @throws RecipientRewriteTableException */ - private void doAddMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { + private void doAddMapping(String user, Domain domain, String mapping) throws RecipientRewriteTableException { HTableInterface table = null; try { table = TablePool.getInstance().getRecipientRewriteTable(); @@ -286,7 +287,7 @@ public class HBaseRecipientRewriteTable extends AbstractRecipientRewriteTable { * @param domain * @return the key */ - private String getRowKey(String user, String domain) { - return user + ROW_SEPARATOR + domain; + private String getRowKey(String user, Domain domain) { + return user + ROW_SEPARATOR + domain.asString(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java b/server/data/data-hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java index d8af78c..a9ddf11 100644 --- a/server/data/data-hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java +++ b/server/data/data-hbase/src/test/java/org/apache/james/domainlist/hbase/HBaseDomainListTest.java @@ -20,6 +20,7 @@ package org.apache.james.domainlist.hbase; import java.io.IOException; +import org.apache.james.core.Domain; import org.apache.james.domainlist.api.DomainList; import org.apache.james.domainlist.api.DomainListException; import org.apache.james.domainlist.lib.AbstractDomainListTest; @@ -55,7 +56,7 @@ public class HBaseDomainListTest extends AbstractDomainListTest { @After public void tearDown() throws Exception { DomainList domainList = createDomainList(); - for (String domain: domainList.getDomains()) { + for (Domain domain: domainList.getDomains()) { domainList.removeDomain(domain); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java b/server/data/data-hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java index 7015000..116bc63 100644 --- a/server/data/data-hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java +++ b/server/data/data-hbase/src/test/java/org/apache/james/rrt/hbase/HBaseRecipientRewriteTableTest.java @@ -19,6 +19,7 @@ package org.apache.james.rrt.hbase; import org.apache.commons.configuration.DefaultConfigurationBuilder; +import org.apache.james.core.Domain; import org.apache.james.mailbox.hbase.HBaseClusterSingleton; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; @@ -57,7 +58,7 @@ public class HBaseRecipientRewriteTableTest extends AbstractRecipientRewriteTabl } @Override - protected void addMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException { + protected void addMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { switch (type) { case ERROR_TYPE: virtualUserTable.addErrorMapping(user, domain, mapping); @@ -69,7 +70,7 @@ public class HBaseRecipientRewriteTableTest extends AbstractRecipientRewriteTabl virtualUserTable.addAddressMapping(user, domain, mapping); break; case ALIASDOMAIN_TYPE: - virtualUserTable.addAliasDomainMapping(domain, mapping); + virtualUserTable.addAliasDomainMapping(domain, Domain.of(mapping)); break; default: throw new RuntimeException("Invalid mapping type: " + type); @@ -77,7 +78,7 @@ public class HBaseRecipientRewriteTableTest extends AbstractRecipientRewriteTabl } @Override - protected void removeMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException { + protected void removeMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { switch (type) { case ERROR_TYPE: virtualUserTable.removeErrorMapping(user, domain, mapping); @@ -89,7 +90,7 @@ public class HBaseRecipientRewriteTableTest extends AbstractRecipientRewriteTabl virtualUserTable.removeAddressMapping(user, domain, mapping); break; case ALIASDOMAIN_TYPE: - virtualUserTable.removeAliasDomainMapping(domain, mapping); + virtualUserTable.removeAliasDomainMapping(domain, Domain.of(mapping)); break; default: throw new RuntimeException("Invalid mapping type: " + type); http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-jdbc/src/main/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTable.java ---------------------------------------------------------------------- diff --git a/server/data/data-jdbc/src/main/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTable.java b/server/data/data-jdbc/src/main/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTable.java index a25d33d..9c9ffba 100644 --- a/server/data/data-jdbc/src/main/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTable.java +++ b/server/data/data-jdbc/src/main/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTable.java @@ -35,6 +35,7 @@ import javax.sql.DataSource; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.core.Domain; import org.apache.james.filesystem.api.FileSystem; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; @@ -184,9 +185,9 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected void addMappingInternal(String user, String domain, Mapping mapping) throws RecipientRewriteTableException { + protected void addMappingInternal(String user, Domain domain, Mapping mapping) throws RecipientRewriteTableException { String fixedUser = getFixedUser(user); - String fixedDomain = getFixedDomain(domain); + Domain fixedDomain = getFixedDomain(domain); Mappings map = getUserDomainMappings(fixedUser, fixedDomain); if (map != null && map.size() != 0) { Mappings updatedMappings = MappingsImpl.from(map).add(mapping).build(); @@ -196,7 +197,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected String mapAddressInternal(String user, String domain) throws RecipientRewriteTableException { + protected String mapAddressInternal(String user, Domain domain) throws RecipientRewriteTableException { Connection conn = null; PreparedStatement mappingStmt = null; try { @@ -206,7 +207,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { ResultSet mappingRS = null; try { mappingStmt.setString(1, user); - mappingStmt.setString(2, domain); + mappingStmt.setString(2, domain.asString()); mappingRS = mappingStmt.executeQuery(); if (mappingRS.next()) { return mappingRS.getString(1); @@ -226,7 +227,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected Mappings getUserDomainMappingsInternal(String user, String domain) throws RecipientRewriteTableException { + protected Mappings getUserDomainMappingsInternal(String user, Domain domain) throws RecipientRewriteTableException { Connection conn = null; PreparedStatement mappingStmt = null; try { @@ -235,7 +236,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { ResultSet mappingRS = null; try { mappingStmt.setString(1, user); - mappingStmt.setString(2, domain); + mappingStmt.setString(2, domain.asString()); mappingRS = mappingStmt.executeQuery(); if (mappingRS.next()) { return MappingsImpl.fromRawString(mappingRS.getString(1)); @@ -266,9 +267,9 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { mappingRS = mappingStmt.executeQuery(); while (mappingRS.next()) { String user = mappingRS.getString(1); - String domain = mappingRS.getString(2); + Domain domain = Domain.of(mappingRS.getString(2)); String map = mappingRS.getString(3); - mapping.put(user + "@" + domain, MappingsImpl.fromRawString(map)); + mapping.put(user + "@" + domain.asString(), MappingsImpl.fromRawString(map)); } if (mapping.size() > 0) { return mapping; @@ -288,9 +289,9 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { } @Override - protected void removeMappingInternal(String user, String domain, Mapping mapping) throws RecipientRewriteTableException { + protected void removeMappingInternal(String user, Domain domain, Mapping mapping) throws RecipientRewriteTableException { String fixedUser = getFixedUser(user); - String fixedDomain = getFixedDomain(domain); + Domain fixedDomain = getFixedDomain(domain); Mappings map = getUserDomainMappings(fixedUser, fixedDomain); if (map != null && map.size() > 1) { Mappings updatedMappings = map.remove(mapping); @@ -312,7 +313,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { * @return true if update was successfully * @throws RecipientRewriteTableException */ - private void doUpdateMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { + private void doUpdateMapping(String user, Domain domain, String mapping) throws RecipientRewriteTableException { Connection conn = null; PreparedStatement mappingStmt = null; @@ -324,7 +325,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { try { mappingStmt.setString(1, mapping); mappingStmt.setString(2, user); - mappingStmt.setString(3, domain); + mappingStmt.setString(3, domain.asString()); if (mappingStmt.executeUpdate() < 1) { throw new RecipientRewriteTableException("Mapping not found"); @@ -354,7 +355,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { * @return true if succesfully * @throws RecipientRewriteTableException */ - private void doRemoveMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { + private void doRemoveMapping(String user, Domain domain, String mapping) throws RecipientRewriteTableException { Connection conn = null; PreparedStatement mappingStmt = null; @@ -365,7 +366,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { ResultSet mappingRS = null; try { mappingStmt.setString(1, user); - mappingStmt.setString(2, domain); + mappingStmt.setString(2, domain.asString()); mappingStmt.setString(3, mapping); if (mappingStmt.executeUpdate() < 1) { throw new RecipientRewriteTableException("Mapping not found"); @@ -394,7 +395,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { * @return true if successfully * @throws RecipientRewriteTableException */ - private void doAddMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { + private void doAddMapping(String user, Domain domain, String mapping) throws RecipientRewriteTableException { Connection conn = null; PreparedStatement mappingStmt = null; @@ -405,7 +406,7 @@ public class JDBCRecipientRewriteTable extends AbstractRecipientRewriteTable { ResultSet mappingRS = null; try { mappingStmt.setString(1, user); - mappingStmt.setString(2, domain); + mappingStmt.setString(2, domain.asString()); mappingStmt.setString(3, mapping); if (mappingStmt.executeUpdate() < 1) { http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-jdbc/src/test/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTableTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-jdbc/src/test/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTableTest.java b/server/data/data-jdbc/src/test/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTableTest.java index 6549074..eb7a734 100644 --- a/server/data/data-jdbc/src/test/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTableTest.java +++ b/server/data/data-jdbc/src/test/java/org/apache/james/rrt/jdbc/JDBCRecipientRewriteTableTest.java @@ -21,6 +21,7 @@ package org.apache.james.rrt.jdbc; import org.apache.commons.configuration.DefaultConfigurationBuilder; import org.apache.commons.dbcp.BasicDataSource; import org.apache.derby.jdbc.EmbeddedDriver; +import org.apache.james.core.Domain; import org.apache.james.filesystem.api.mock.MockFileSystem; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; @@ -69,7 +70,7 @@ public class JDBCRecipientRewriteTableTest extends AbstractRecipientRewriteTable } @Override - protected void addMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException { + protected void addMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { switch (type) { case ERROR_TYPE: virtualUserTable.addErrorMapping(user, domain, mapping); @@ -81,7 +82,7 @@ public class JDBCRecipientRewriteTableTest extends AbstractRecipientRewriteTable virtualUserTable.addAddressMapping(user, domain, mapping); break; case ALIASDOMAIN_TYPE: - virtualUserTable.addAliasDomainMapping(domain, mapping); + virtualUserTable.addAliasDomainMapping(domain, Domain.of(mapping)); break; default: throw new RuntimeException("Invalid mapping type: " + type); @@ -89,7 +90,7 @@ public class JDBCRecipientRewriteTableTest extends AbstractRecipientRewriteTable } @Override - protected void removeMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException { + protected void removeMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { switch (type) { case ERROR_TYPE: virtualUserTable.removeErrorMapping(user, domain, mapping); @@ -101,7 +102,7 @@ public class JDBCRecipientRewriteTableTest extends AbstractRecipientRewriteTable virtualUserTable.removeAddressMapping(user, domain, mapping); break; case ALIASDOMAIN_TYPE: - virtualUserTable.removeAliasDomainMapping(domain, mapping); + virtualUserTable.removeAliasDomainMapping(domain, Domain.of(mapping)); break; default: throw new RuntimeException("Invalid mapping type: " + type); http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java ---------------------------------------------------------------------- diff --git a/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java b/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java index 6188139..4a4fde6 100644 --- a/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java +++ b/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java @@ -20,7 +20,6 @@ package org.apache.james.domainlist.jpa; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import javax.annotation.PostConstruct; import javax.inject.Inject; @@ -31,6 +30,7 @@ import javax.persistence.NoResultException; import javax.persistence.PersistenceException; import javax.persistence.PersistenceUnit; +import org.apache.james.core.Domain; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.domainlist.api.DomainListException; import org.apache.james.domainlist.jpa.model.JPADomain; @@ -38,6 +38,7 @@ import org.apache.james.domainlist.lib.AbstractDomainList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.github.steveash.guavate.Guavate; import com.google.common.collect.ImmutableList; /** @@ -77,13 +78,19 @@ public class JPADomainList extends AbstractDomainList { @SuppressWarnings("unchecked") @Override - protected List<String> getDomainListInternal() throws DomainListException { - List<String> domains = new ArrayList<>(); + protected List<Domain> getDomainListInternal() throws DomainListException { + List<Domain> domains = new ArrayList<>(); EntityManager entityManager = entityManagerFactory.createEntityManager(); final EntityTransaction transaction = entityManager.getTransaction(); try { transaction.begin(); - domains = entityManager.createNamedQuery("listDomainNames").getResultList(); + List<String> resultList = entityManager + .createNamedQuery("listDomainNames") + .getResultList(); + domains = resultList + .stream() + .map(domainAsString -> Domain.of(domainAsString)) + .collect(Guavate.toImmutableList()); transaction.commit(); } catch (PersistenceException e) { LOGGER.error("Failed to list domains", e); @@ -96,13 +103,12 @@ public class JPADomainList extends AbstractDomainList { } @Override - protected boolean containsDomainInternal(String domain) throws DomainListException { - String lowerCasedDomain = domain.toLowerCase(Locale.US); + protected boolean containsDomainInternal(Domain domain) throws DomainListException { EntityManager entityManager = entityManagerFactory.createEntityManager(); final EntityTransaction transaction = entityManager.getTransaction(); try { transaction.begin(); - boolean result = containsDomainInternal(lowerCasedDomain, entityManager); + boolean result = containsDomainInternal(domain, entityManager); transaction.commit(); return result; } catch (PersistenceException e) { @@ -115,17 +121,16 @@ public class JPADomainList extends AbstractDomainList { } @Override - public void addDomain(String domain) throws DomainListException { - String lowerCasedDomain = domain.toLowerCase(Locale.US); + public void addDomain(Domain domain) throws DomainListException { EntityManager entityManager = entityManagerFactory.createEntityManager(); final EntityTransaction transaction = entityManager.getTransaction(); try { transaction.begin(); - if (containsDomainInternal(lowerCasedDomain, entityManager)) { + if (containsDomainInternal(domain, entityManager)) { transaction.commit(); - throw new DomainListException(lowerCasedDomain + " already exists."); + throw new DomainListException(domain + " already exists."); } - JPADomain jpaDomain = new JPADomain(lowerCasedDomain); + JPADomain jpaDomain = new JPADomain(domain); entityManager.persist(jpaDomain); transaction.commit(); } catch (PersistenceException e) { @@ -138,17 +143,16 @@ public class JPADomainList extends AbstractDomainList { } @Override - public void removeDomain(String domain) throws DomainListException { - String lowerCasedDomain = domain.toLowerCase(Locale.US); + public void removeDomain(Domain domain) throws DomainListException { EntityManager entityManager = entityManagerFactory.createEntityManager(); final EntityTransaction transaction = entityManager.getTransaction(); try { transaction.begin(); - if (!containsDomainInternal(lowerCasedDomain, entityManager)) { + if (!containsDomainInternal(domain, entityManager)) { transaction.commit(); throw new DomainListException(domain + " was not found."); } - entityManager.createNamedQuery("deleteDomainByName").setParameter("name", lowerCasedDomain).executeUpdate(); + entityManager.createNamedQuery("deleteDomainByName").setParameter("name", domain.asString()).executeUpdate(); transaction.commit(); } catch (PersistenceException e) { LOGGER.error("Failed to remove domain", e); @@ -165,10 +169,10 @@ public class JPADomainList extends AbstractDomainList { } } - private boolean containsDomainInternal(String domain, EntityManager entityManager) { + private boolean containsDomainInternal(Domain domain, EntityManager entityManager) { try { return entityManager.createNamedQuery("findDomainByName") - .setParameter("name", domain) + .setParameter("name", domain.asString()) .getSingleResult() != null; } catch (NoResultException e) { LOGGER.debug("No domain found", e); http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/model/JPADomain.java ---------------------------------------------------------------------- diff --git a/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/model/JPADomain.java b/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/model/JPADomain.java index f504e49..3b43674 100644 --- a/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/model/JPADomain.java +++ b/server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/model/JPADomain.java @@ -25,6 +25,8 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; +import org.apache.james.core.Domain; + /** * Domain class for the James Domain to be used for JPA persistence. */ @@ -60,8 +62,8 @@ public class JPADomain { * @param name * the name of the Domain */ - public JPADomain(String name) { - this.name = name; + public JPADomain(Domain name) { + this.name = name.asString(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java ---------------------------------------------------------------------- diff --git a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java index 0f7a339..44c5c9f 100644 --- a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java +++ b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java @@ -1,262 +1,279 @@ -/**************************************************************** - * 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.rrt.jpa; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.inject.Inject; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; -import javax.persistence.EntityTransaction; -import javax.persistence.PersistenceException; -import javax.persistence.PersistenceUnit; - -import org.apache.james.rrt.api.RecipientRewriteTableException; -import org.apache.james.rrt.jpa.model.JPARecipientRewrite; -import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; -import org.apache.james.rrt.lib.Mapping; -import org.apache.james.rrt.lib.Mappings; -import org.apache.james.rrt.lib.MappingsImpl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Class responsible to implement the Virtual User Table in database with JPA - * access. - */ -public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable { - private static final Logger LOGGER = LoggerFactory.getLogger(JPARecipientRewriteTable.class); - - /** - * The entity manager to access the database. - */ - private EntityManagerFactory entityManagerFactory; - - /** - * Set the entity manager to use. - * - * @param entityManagerFactory - */ - @Inject - @PersistenceUnit(unitName = "James") - public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) { - this.entityManagerFactory = entityManagerFactory; - } - - @Override - protected void addMappingInternal(String user, String domain, Mapping mapping) throws RecipientRewriteTableException { - String fixedUser = getFixedUser(user); - String fixedDomain = getFixedDomain(domain); - Mappings map = getUserDomainMappings(fixedUser, fixedDomain); - if (map != null && map.size() != 0) { - Mappings updatedMappings = MappingsImpl.from(map).add(mapping).build(); - doUpdateMapping(fixedUser, fixedDomain, updatedMappings.serialize()); - } else { - doAddMapping(fixedUser, fixedDomain, mapping.asString()); - } - } - - @Override - protected String mapAddressInternal(String user, String domain) throws RecipientRewriteTableException { - String mapping = getMapping(user, domain, "selectExactMappings"); - if (mapping != null) { - return mapping; - } - return getMapping(user, domain, "selectMappings"); - } - - private String getMapping(String user, String domain, String queryName) throws RecipientRewriteTableException { - EntityManager entityManager = entityManagerFactory.createEntityManager(); - final EntityTransaction transaction = entityManager.getTransaction(); - try { - transaction.begin(); - @SuppressWarnings("unchecked") - List<JPARecipientRewrite> virtualUsers = entityManager.createNamedQuery(queryName).setParameter("user", user).setParameter("domain", domain).getResultList(); - transaction.commit(); - if (virtualUsers.size() > 0) { - return virtualUsers.get(0).getTargetAddress(); - } - } catch (PersistenceException e) { - LOGGER.debug("Failed to find mapping for user={} and domain={}", user, domain, e); - if (transaction.isActive()) { - transaction.rollback(); - } - throw new RecipientRewriteTableException("Error while retrieve mappings", e); - } finally { - entityManager.close(); - } - return null; - } - - @Override - protected Mappings getUserDomainMappingsInternal(String user, String domain) throws RecipientRewriteTableException { - EntityManager entityManager = entityManagerFactory.createEntityManager(); - final EntityTransaction transaction = entityManager.getTransaction(); - try { - transaction.begin(); - @SuppressWarnings("unchecked") - List<JPARecipientRewrite> virtualUsers = entityManager.createNamedQuery("selectUserDomainMapping").setParameter("user", user).setParameter("domain", domain).getResultList(); - transaction.commit(); - if (virtualUsers.size() > 0) { - return MappingsImpl.fromRawString(virtualUsers.get(0).getTargetAddress()); - } - } catch (PersistenceException e) { - LOGGER.debug("Failed to get user domain mappings", e); - if (transaction.isActive()) { - transaction.rollback(); - } - throw new RecipientRewriteTableException("Error while retrieve mappings", e); - - } finally { - entityManager.close(); - } - return null; - } - - @Override - protected Map<String, Mappings> getAllMappingsInternal() throws RecipientRewriteTableException { - EntityManager entityManager = entityManagerFactory.createEntityManager(); - final EntityTransaction transaction = entityManager.getTransaction(); - Map<String, Mappings> mapping = new HashMap<>(); - try { - transaction.begin(); - @SuppressWarnings("unchecked") - List<JPARecipientRewrite> virtualUsers = entityManager.createNamedQuery("selectAllMappings").getResultList(); - transaction.commit(); - for (JPARecipientRewrite virtualUser : virtualUsers) { - mapping.put(virtualUser.getUser() + "@" + virtualUser.getDomain(), MappingsImpl.fromRawString(virtualUser.getTargetAddress())); - } - if (mapping.size() > 0) { - return mapping; - } - } catch (PersistenceException e) { - LOGGER.debug("Failed to get all mappings", e); - if (transaction.isActive()) { - transaction.rollback(); - } - throw new RecipientRewriteTableException("Error while retrieve mappings", e); - - } finally { - entityManager.close(); - } - return null; - } - - @Override - protected void removeMappingInternal(String user, String domain, Mapping mapping) throws RecipientRewriteTableException { - String fixedUser = getFixedUser(user); - String fixedDomain = getFixedDomain(domain); - Mappings map = getUserDomainMappings(fixedUser, fixedDomain); - if (map != null && map.size() > 1) { - Mappings updatedMappings = map.remove(mapping); - doUpdateMapping(fixedUser, fixedDomain, updatedMappings.serialize()); - } else { - doRemoveMapping(fixedUser, fixedDomain, mapping.asString()); - } - } - - /** - * Update the mapping for the given user and domain - * - * @param user the user - * @param domain the domain - * @param mapping the mapping - * @return true if update was successfully - * @throws RecipientRewriteTableException - */ - private boolean doUpdateMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { - EntityManager entityManager = entityManagerFactory.createEntityManager(); - final EntityTransaction transaction = entityManager.getTransaction(); - try { - transaction.begin(); - int updated = entityManager.createNamedQuery("updateMapping").setParameter("targetAddress", mapping).setParameter("user", user).setParameter("domain", domain).executeUpdate(); - transaction.commit(); - if (updated > 0) { - return true; - } - } catch (PersistenceException e) { - LOGGER.debug("Failed to update mapping", e); - if (transaction.isActive()) { - transaction.rollback(); - } - throw new RecipientRewriteTableException("Unable to update mapping", e); - } finally { - entityManager.close(); - } - return false; - } - - /** - * Remove a mapping for the given user and domain - * - * @param user the user - * @param domain the domain - * @param mapping the mapping - * @throws RecipientRewriteTableException - */ - private void doRemoveMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { - EntityManager entityManager = entityManagerFactory.createEntityManager(); - final EntityTransaction transaction = entityManager.getTransaction(); - try { - transaction.begin(); - entityManager.createNamedQuery("deleteMapping").setParameter("user", user).setParameter("domain", domain).setParameter("targetAddress", mapping).executeUpdate(); - transaction.commit(); - - } catch (PersistenceException e) { - LOGGER.debug("Failed to remove mapping", e); - if (transaction.isActive()) { - transaction.rollback(); - } - throw new RecipientRewriteTableException("Unable to remove mapping", e); - - } finally { - entityManager.close(); - } - } - - /** - * Add mapping for given user and domain - * - * @param user the user - * @param domain the domain - * @param mapping the mapping - * @throws RecipientRewriteTableException - */ - private void doAddMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { - EntityManager entityManager = entityManagerFactory.createEntityManager(); - final EntityTransaction transaction = entityManager.getTransaction(); - try { - transaction.begin(); - JPARecipientRewrite jpaRecipientRewrite = new JPARecipientRewrite(user, domain, mapping); - entityManager.persist(jpaRecipientRewrite); - transaction.commit(); - } catch (PersistenceException e) { - LOGGER.debug("Failed to save virtual user", e); - if (transaction.isActive()) { - transaction.rollback(); - } - throw new RecipientRewriteTableException("Unable to add mapping", e); - } finally { - entityManager.close(); - } - } - -} +/**************************************************************** + * 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.rrt.jpa; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.EntityTransaction; +import javax.persistence.PersistenceException; +import javax.persistence.PersistenceUnit; + +import org.apache.james.core.Domain; +import org.apache.james.rrt.api.RecipientRewriteTableException; +import org.apache.james.rrt.jpa.model.JPARecipientRewrite; +import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; +import org.apache.james.rrt.lib.Mapping; +import org.apache.james.rrt.lib.Mappings; +import org.apache.james.rrt.lib.MappingsImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Class responsible to implement the Virtual User Table in database with JPA + * access. + */ +public class JPARecipientRewriteTable extends AbstractRecipientRewriteTable { + private static final Logger LOGGER = LoggerFactory.getLogger(JPARecipientRewriteTable.class); + + /** + * The entity manager to access the database. + */ + private EntityManagerFactory entityManagerFactory; + + /** + * Set the entity manager to use. + * + * @param entityManagerFactory + */ + @Inject + @PersistenceUnit(unitName = "James") + public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) { + this.entityManagerFactory = entityManagerFactory; + } + + @Override + protected void addMappingInternal(String user, Domain domain, Mapping mapping) throws RecipientRewriteTableException { + String fixedUser = getFixedUser(user); + Domain fixedDomain = getFixedDomain(domain); + Mappings map = getUserDomainMappings(fixedUser, fixedDomain); + if (map != null && map.size() != 0) { + Mappings updatedMappings = MappingsImpl.from(map).add(mapping).build(); + doUpdateMapping(fixedUser, fixedDomain, updatedMappings.serialize()); + } else { + doAddMapping(fixedUser, fixedDomain, mapping.asString()); + } + } + + @Override + protected String mapAddressInternal(String user, Domain domain) throws RecipientRewriteTableException { + String mapping = getMapping(user, domain, "selectExactMappings"); + if (mapping != null) { + return mapping; + } + return getMapping(user, domain, "selectMappings"); + } + + private String getMapping(String user, Domain domain, String queryName) throws RecipientRewriteTableException { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction(); + try { + transaction.begin(); + @SuppressWarnings("unchecked") + List<JPARecipientRewrite> virtualUsers = entityManager + .createNamedQuery(queryName) + .setParameter("user", user) + .setParameter("domain", domain.asString()) + .getResultList(); + transaction.commit(); + if (virtualUsers.size() > 0) { + return virtualUsers.get(0).getTargetAddress(); + } + } catch (PersistenceException e) { + LOGGER.debug("Failed to find mapping for user={} and domain={}", user, domain, e); + if (transaction.isActive()) { + transaction.rollback(); + } + throw new RecipientRewriteTableException("Error while retrieve mappings", e); + } finally { + entityManager.close(); + } + return null; + } + + @Override + protected Mappings getUserDomainMappingsInternal(String user, Domain domain) throws RecipientRewriteTableException { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction(); + try { + transaction.begin(); + @SuppressWarnings("unchecked") + List<JPARecipientRewrite> virtualUsers = entityManager.createNamedQuery("selectUserDomainMapping") + .setParameter("user", user) + .setParameter("domain", domain.asString()) + .getResultList(); + transaction.commit(); + if (virtualUsers.size() > 0) { + return MappingsImpl.fromRawString(virtualUsers.get(0).getTargetAddress()); + } + } catch (PersistenceException e) { + LOGGER.debug("Failed to get user domain mappings", e); + if (transaction.isActive()) { + transaction.rollback(); + } + throw new RecipientRewriteTableException("Error while retrieve mappings", e); + + } finally { + entityManager.close(); + } + return null; + } + + @Override + protected Map<String, Mappings> getAllMappingsInternal() throws RecipientRewriteTableException { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction(); + Map<String, Mappings> mapping = new HashMap<>(); + try { + transaction.begin(); + @SuppressWarnings("unchecked") + List<JPARecipientRewrite> virtualUsers = entityManager.createNamedQuery("selectAllMappings").getResultList(); + transaction.commit(); + for (JPARecipientRewrite virtualUser : virtualUsers) { + mapping.put(virtualUser.getUser() + "@" + virtualUser.getDomain(), MappingsImpl.fromRawString(virtualUser.getTargetAddress())); + } + if (mapping.size() > 0) { + return mapping; + } + } catch (PersistenceException e) { + LOGGER.debug("Failed to get all mappings", e); + if (transaction.isActive()) { + transaction.rollback(); + } + throw new RecipientRewriteTableException("Error while retrieve mappings", e); + + } finally { + entityManager.close(); + } + return null; + } + + @Override + protected void removeMappingInternal(String user, Domain domain, Mapping mapping) throws RecipientRewriteTableException { + String fixedUser = getFixedUser(user); + Domain fixedDomain = getFixedDomain(domain); + Mappings map = getUserDomainMappings(fixedUser, fixedDomain); + if (map != null && map.size() > 1) { + Mappings updatedMappings = map.remove(mapping); + doUpdateMapping(fixedUser, fixedDomain, updatedMappings.serialize()); + } else { + doRemoveMapping(fixedUser, fixedDomain, mapping.asString()); + } + } + + /** + * Update the mapping for the given user and domain + * + * @param user the user + * @param domain the domain + * @param mapping the mapping + * @return true if update was successfully + * @throws RecipientRewriteTableException + */ + private boolean doUpdateMapping(String user, Domain domain, String mapping) throws RecipientRewriteTableException { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction(); + try { + transaction.begin(); + int updated = entityManager + .createNamedQuery("updateMapping") + .setParameter("targetAddress", mapping) + .setParameter("user", user) + .setParameter("domain", domain.asString()) + .executeUpdate(); + transaction.commit(); + if (updated > 0) { + return true; + } + } catch (PersistenceException e) { + LOGGER.debug("Failed to update mapping", e); + if (transaction.isActive()) { + transaction.rollback(); + } + throw new RecipientRewriteTableException("Unable to update mapping", e); + } finally { + entityManager.close(); + } + return false; + } + + /** + * Remove a mapping for the given user and domain + * + * @param user the user + * @param domain the domain + * @param mapping the mapping + * @throws RecipientRewriteTableException + */ + private void doRemoveMapping(String user, Domain domain, String mapping) throws RecipientRewriteTableException { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction(); + try { + transaction.begin(); + entityManager.createNamedQuery("deleteMapping") + .setParameter("user", user) + .setParameter("domain", domain.asString()) + .setParameter("targetAddress", mapping) + .executeUpdate(); + transaction.commit(); + + } catch (PersistenceException e) { + LOGGER.debug("Failed to remove mapping", e); + if (transaction.isActive()) { + transaction.rollback(); + } + throw new RecipientRewriteTableException("Unable to remove mapping", e); + + } finally { + entityManager.close(); + } + } + + /** + * Add mapping for given user and domain + * + * @param user the user + * @param domain the domain + * @param mapping the mapping + * @throws RecipientRewriteTableException + */ + private void doAddMapping(String user, Domain domain, String mapping) throws RecipientRewriteTableException { + EntityManager entityManager = entityManagerFactory.createEntityManager(); + final EntityTransaction transaction = entityManager.getTransaction(); + try { + transaction.begin(); + JPARecipientRewrite jpaRecipientRewrite = new JPARecipientRewrite(user, domain, mapping); + entityManager.persist(jpaRecipientRewrite); + transaction.commit(); + } catch (PersistenceException e) { + LOGGER.debug("Failed to save virtual user", e); + if (transaction.isActive()) { + transaction.rollback(); + } + throw new RecipientRewriteTableException("Unable to add mapping", e); + } finally { + entityManager.close(); + } + } + +} http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java ---------------------------------------------------------------------- diff --git a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java index 20e7675..e1f2639 100644 --- a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java +++ b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java @@ -28,6 +28,8 @@ import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; +import org.apache.james.core.Domain; + import com.google.common.base.Objects; /** @@ -114,9 +116,9 @@ public class JPARecipientRewrite { * @param user * , domain and their associated targetAddress */ - public JPARecipientRewrite(String user, String domain, String targetAddress) { + public JPARecipientRewrite(String user, Domain domain, String targetAddress) { this.user = user; - this.domain = domain; + this.domain = domain.asString(); this.targetAddress = targetAddress; } http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-jpa/src/test/java/org/apache/james/domainlist/jpa/JPADomainListTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-jpa/src/test/java/org/apache/james/domainlist/jpa/JPADomainListTest.java b/server/data/data-jpa/src/test/java/org/apache/james/domainlist/jpa/JPADomainListTest.java index 1527e65..0126bb1 100644 --- a/server/data/data-jpa/src/test/java/org/apache/james/domainlist/jpa/JPADomainListTest.java +++ b/server/data/data-jpa/src/test/java/org/apache/james/domainlist/jpa/JPADomainListTest.java @@ -19,6 +19,7 @@ package org.apache.james.domainlist.jpa; import org.apache.james.backends.jpa.JpaTestCluster; +import org.apache.james.core.Domain; import org.apache.james.domainlist.api.DomainList; import org.apache.james.domainlist.jpa.model.JPADomain; import org.apache.james.domainlist.lib.AbstractDomainListTest; @@ -41,7 +42,7 @@ public class JPADomainListTest extends AbstractDomainListTest { @After public void tearDown() throws Exception { DomainList domainList = createDomainList(); - for (String domain: domainList.getDomains()) { + for (Domain domain: domainList.getDomains()) { domainList.removeDomain(domain); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java b/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java index 85ad4f3..5c6ba96 100644 --- a/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java +++ b/server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java @@ -20,6 +20,7 @@ package org.apache.james.rrt.jpa; import org.apache.commons.configuration.DefaultConfigurationBuilder; import org.apache.james.backends.jpa.JpaTestCluster; +import org.apache.james.core.Domain; import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.jpa.model.JPARecipientRewrite; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; @@ -56,7 +57,7 @@ public class JPARecipientRewriteTableTest extends AbstractRecipientRewriteTableT } @Override - protected void addMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException { + protected void addMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { switch (type) { case ERROR_TYPE: virtualUserTable.addErrorMapping(user, domain, mapping); @@ -68,7 +69,7 @@ public class JPARecipientRewriteTableTest extends AbstractRecipientRewriteTableT virtualUserTable.addAddressMapping(user, domain, mapping); break; case ALIASDOMAIN_TYPE: - virtualUserTable.addAliasDomainMapping(domain, mapping); + virtualUserTable.addAliasDomainMapping(domain, Domain.of(mapping)); break; default: throw new RuntimeException("Invalid mapping type: " + type); @@ -76,7 +77,7 @@ public class JPARecipientRewriteTableTest extends AbstractRecipientRewriteTableT } @Override - protected void removeMapping(String user, String domain, String mapping, int type) throws RecipientRewriteTableException { + protected void removeMapping(String user, Domain domain, String mapping, int type) throws RecipientRewriteTableException { switch (type) { case ERROR_TYPE: virtualUserTable.removeErrorMapping(user, domain, mapping); @@ -88,7 +89,7 @@ public class JPARecipientRewriteTableTest extends AbstractRecipientRewriteTableT virtualUserTable.removeAddressMapping(user, domain, mapping); break; case ALIASDOMAIN_TYPE: - virtualUserTable.removeAliasDomainMapping(domain, mapping); + virtualUserTable.removeAliasDomainMapping(domain, Domain.of(mapping)); break; default: throw new RuntimeException("Invalid mapping type: " + type); http://git-wip-us.apache.org/repos/asf/james-project/blob/33cb12e5/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java ---------------------------------------------------------------------- diff --git a/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java b/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java index e448492..849dbf6 100644 --- a/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java +++ b/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java @@ -23,11 +23,11 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Arrays; import java.util.List; -import java.util.Locale; import java.util.stream.Stream; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; +import org.apache.james.core.Domain; import org.apache.james.dnsservice.api.DNSService; import org.apache.james.domainlist.api.DomainList; import org.apache.james.domainlist.api.DomainListException; @@ -35,6 +35,7 @@ import org.apache.james.lifecycle.api.Configurable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.github.fge.lambdas.Throwing; import com.github.steveash.guavate.Guavate; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; @@ -61,7 +62,7 @@ public abstract class AbstractDomainList implements DomainList, Configurable { private final EnvDetector envDetector; private boolean autoDetect = true; private boolean autoDetectIP = true; - private String defaultDomain; + private Domain defaultDomain; public AbstractDomainList(DNSService dns, EnvDetector envDetector) { this.dns = dns; @@ -84,26 +85,23 @@ public abstract class AbstractDomainList implements DomainList, Configurable { } protected void addConfiguredDomains(HierarchicalConfiguration config) { - String[] configuredDomainNames = config.getStringArray(CONFIGURE_DOMAIN_NAMES); - try { - if (configuredDomainNames != null) { - for (String domain : Arrays.asList(configuredDomainNames)) { + Arrays.stream(config.getStringArray(CONFIGURE_DOMAIN_NAMES)) + .map(Domain::of) + .forEach( + Throwing.consumer((Domain domain) -> { if (!containsDomainInternal(domain)) { - addDomain(domain.toLowerCase(Locale.US)); + addDomain(domain); } - } - } - } catch (DomainListException e) { - throw Throwables.propagate(e); - } + }).sneakyThrow()); } + private void addEnvDomain() { String envDomain = envDetector.getEnv(ENV_DOMAIN); if (!Strings.isNullOrEmpty(envDomain)) { try { LOGGER.info("Adding environment defined domain {}", envDomain); - addDomain(envDomain); + addDomain(Domain.of(envDomain)); } catch (DomainListException e) { throw Throwables.propagate(e); } @@ -112,11 +110,11 @@ public abstract class AbstractDomainList implements DomainList, Configurable { @VisibleForTesting void configureDefaultDomain(HierarchicalConfiguration config) throws ConfigurationException { try { - setDefaultDomain(config.getString(CONFIGURE_DEFAULT_DOMAIN, LOCALHOST)); + setDefaultDomain(Domain.of(config.getString(CONFIGURE_DEFAULT_DOMAIN, LOCALHOST))); String hostName = InetAddress.getLocalHost().getHostName(); if (mayChangeDefaultDomain()) { - setDefaultDomain(hostName); + setDefaultDomain(Domain.of(hostName)); } } catch (UnknownHostException e) { LOGGER.warn("Unable to retrieve hostname.", e); @@ -129,7 +127,7 @@ public abstract class AbstractDomainList implements DomainList, Configurable { return LOCALHOST.equals(defaultDomain); } - private void setDefaultDomain(String defaultDomain) throws DomainListException { + private void setDefaultDomain(Domain defaultDomain) throws DomainListException { if (defaultDomain != null && !containsDomain(defaultDomain)) { addDomain(defaultDomain); } @@ -137,7 +135,7 @@ public abstract class AbstractDomainList implements DomainList, Configurable { } @Override - public String getDefaultDomain() throws DomainListException { + public Domain getDefaultDomain() throws DomainListException { if (defaultDomain != null) { return defaultDomain; } else { @@ -146,25 +144,25 @@ public abstract class AbstractDomainList implements DomainList, Configurable { } @Override - public boolean containsDomain(String domain) throws DomainListException { + public boolean containsDomain(Domain domain) throws DomainListException { boolean internalAnswer = containsDomainInternal(domain); return internalAnswer || getDomains().contains(domain); } @Override - public ImmutableList<String> getDomains() throws DomainListException { - List<String> domains = getDomainListInternal(); - ImmutableList<String> detectedDomains = detectDomains(); + public ImmutableList<Domain> getDomains() throws DomainListException { + List<Domain> domains = getDomainListInternal(); + ImmutableList<Domain> detectedDomains = detectDomains(); // Guava does not support concatenating ImmutableLists at this time: // https://stackoverflow.com/questions/37919648/concatenating-immutablelists // A work-around is to use Iterables.concat() until something like // https://github.com/google/guava/issues/1029 is implemented. - Iterable<String> domainsWithoutIp = Iterables.concat(domains, detectedDomains); - ImmutableList<String> detectedIps = detectIps(domainsWithoutIp); - ImmutableList<String> allDomains = ImmutableList.copyOf(Iterables.concat(domainsWithoutIp, detectedIps)); + Iterable<Domain> domainsWithoutIp = Iterables.concat(domains, detectedDomains); + ImmutableList<Domain> detectedIps = detectIps(domainsWithoutIp); + ImmutableList<Domain> allDomains = ImmutableList.copyOf(Iterables.concat(domainsWithoutIp, detectedIps)); if (LOGGER.isDebugEnabled()) { - for (String domain : allDomains) { + for (Domain domain : allDomains) { LOGGER.debug("Handling mail for: " + domain); } } @@ -172,7 +170,7 @@ public abstract class AbstractDomainList implements DomainList, Configurable { return allDomains; } - private ImmutableList<String> detectIps(Iterable<String> domains) { + private ImmutableList<Domain> detectIps(Iterable<Domain> domains) { if (autoDetectIP) { return getDomainsIpStream(domains, dns, LOGGER) .collect(Guavate.toImmutableList()); @@ -180,7 +178,7 @@ public abstract class AbstractDomainList implements DomainList, Configurable { return ImmutableList.of(); } - private ImmutableList<String> detectDomains() { + private ImmutableList<Domain> detectDomains() { if (autoDetect) { String hostName; try { @@ -191,7 +189,7 @@ public abstract class AbstractDomainList implements DomainList, Configurable { LOGGER.info("Local host is: {}", hostName); if (hostName != null && !hostName.equals("localhost")) { - return ImmutableList.of(hostName.toLowerCase(Locale.US)); + return ImmutableList.of(Domain.of(hostName)); } } return ImmutableList.of(); @@ -204,16 +202,17 @@ public abstract class AbstractDomainList implements DomainList, Configurable { * Iterable of domains * @return Stream of ipaddress for domains */ - private static Stream<String> getDomainsIpStream(Iterable<String> domains, DNSService dns, Logger log) { + private static Stream<Domain> getDomainsIpStream(Iterable<Domain> domains, DNSService dns, Logger log) { return Guavate.stream(domains) .flatMap(domain -> getDomainIpStream(domain, dns, log)) .distinct(); } - private static Stream<String> getDomainIpStream(String domain, DNSService dns, Logger log) { + private static Stream<Domain> getDomainIpStream(Domain domain, DNSService dns, Logger log) { try { - return dns.getAllByName(domain).stream() + return dns.getAllByName(domain.name()).stream() .map(InetAddress::getHostAddress) + .map(Domain::of) .distinct(); } catch (UnknownHostException e) { log.error("Cannot get IP address(es) for {}", domain); @@ -259,8 +258,8 @@ public abstract class AbstractDomainList implements DomainList, Configurable { * * @return List */ - protected abstract List<String> getDomainListInternal() throws DomainListException; + protected abstract List<Domain> getDomainListInternal() throws DomainListException; - protected abstract boolean containsDomainInternal(String domain) throws DomainListException; + protected abstract boolean containsDomainInternal(Domain domain) throws DomainListException; } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org