Skip to content

Commit

Permalink
JAMES-1595 create a Builder to handle add and addAll on Mappings
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/james/project/trunk@1711978 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
mbaechler committed Nov 2, 2015
1 parent 693bd65 commit ee73f63
Show file tree
Hide file tree
Showing 10 changed files with 80 additions and 46 deletions.
Expand Up @@ -28,8 +28,6 @@ public interface Mappings extends Iterable<String> {


Mappings addAll(Mappings toAdd); Mappings addAll(Mappings toAdd);


void add(String mapping);

boolean contains(String mapping); boolean contains(String mapping);


int size(); int size();
Expand Down
Expand Up @@ -28,10 +28,13 @@
import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest; import org.apache.james.rrt.lib.AbstractRecipientRewriteTableTest;
import org.apache.james.rrt.lib.Mappings; import org.apache.james.rrt.lib.Mappings;
import org.apache.james.rrt.lib.MappingsImpl; import org.apache.james.rrt.lib.MappingsImpl;
import org.apache.james.rrt.lib.MappingsImpl.Builder;
import org.apache.james.rrt.lib.RecipientRewriteTableUtil; import org.apache.james.rrt.lib.RecipientRewriteTableUtil;
import org.junit.Before; import org.junit.Before;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;


import com.google.common.base.Optional;

/** /**
* Test the XML Virtual User Table implementation. * Test the XML Virtual User Table implementation.
*/ */
Expand Down Expand Up @@ -59,31 +62,33 @@ protected boolean addMapping(String user, String domain, String mapping, int typ


Mappings mappings = virtualUserTable.getUserDomainMappings(user, domain); Mappings mappings = virtualUserTable.getUserDomainMappings(user, domain);


if (mappings == null) { if (mappings != null) {
mappings = MappingsImpl.empty();
} else {
removeMappingsFromConfig(user, domain, mappings); removeMappingsFromConfig(user, domain, mappings);
} }


Builder builder = MappingsImpl.from(Optional.fromNullable(mappings).or(MappingsImpl.empty()));

if (type == ERROR_TYPE) { if (type == ERROR_TYPE) {
mappings.add(RecipientRewriteTable.ERROR_PREFIX + mapping); builder.add(RecipientRewriteTable.ERROR_PREFIX + mapping);
} else if (type == REGEX_TYPE) { } else if (type == REGEX_TYPE) {
mappings.add(RecipientRewriteTable.REGEX_PREFIX + mapping); builder.add(RecipientRewriteTable.REGEX_PREFIX + mapping);
} else if (type == ADDRESS_TYPE) { } else if (type == ADDRESS_TYPE) {
mappings.add(mapping); builder.add(mapping);
} else if (type == ALIASDOMAIN_TYPE) { } else if (type == ALIASDOMAIN_TYPE) {
mappings.add(RecipientRewriteTable.ALIASDOMAIN_PREFIX + mapping); builder.add(RecipientRewriteTable.ALIASDOMAIN_PREFIX + mapping);
} }


if (mappings.size() > 0) { Mappings updatedMappings = builder.build();

if (!updatedMappings.isEmpty()) {
defaultConfiguration.addProperty("mapping", user + "@" + domain + "=" + RecipientRewriteTableUtil. defaultConfiguration.addProperty("mapping", user + "@" + domain + "=" + RecipientRewriteTableUtil.
CollectionToMapping(mappings)); CollectionToMapping(updatedMappings));
} }


try { try {
virtualUserTable.configure(defaultConfiguration); virtualUserTable.configure(defaultConfiguration);
} catch (Exception e) { } catch (Exception e) {
return mappings.size() <= 0; return updatedMappings.size() <= 0;
} }


return true; return true;
Expand Down
Expand Up @@ -37,11 +37,14 @@
import org.apache.james.rrt.lib.AbstractRecipientRewriteTable; import org.apache.james.rrt.lib.AbstractRecipientRewriteTable;
import org.apache.james.rrt.lib.Mappings; import org.apache.james.rrt.lib.Mappings;
import org.apache.james.rrt.lib.MappingsImpl; import org.apache.james.rrt.lib.MappingsImpl;
import org.apache.james.rrt.lib.MappingsImpl.Builder;
import org.apache.james.rrt.lib.RecipientRewriteTableUtil; import org.apache.james.rrt.lib.RecipientRewriteTableUtil;
import org.apache.james.system.hbase.TablePool; import org.apache.james.system.hbase.TablePool;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;


import com.google.common.base.Optional;

/** /**
* Implementation of the RecipientRewriteTable for a HBase persistence. * Implementation of the RecipientRewriteTable for a HBase persistence.
*/ */
Expand All @@ -62,8 +65,8 @@ protected void addMappingInternal(String user, String domain, String mapping) th
String fixedDomain = getFixedDomain(domain); String fixedDomain = getFixedDomain(domain);
Mappings map = getUserDomainMappings(fixedUser, fixedDomain); Mappings map = getUserDomainMappings(fixedUser, fixedDomain);
if (map != null && map.size() != 0) { if (map != null && map.size() != 0) {
map.add(mapping); Mappings updatedMappings = MappingsImpl.from(map).add(mapping).build();
doUpdateMapping(fixedUser, fixedDomain, RecipientRewriteTableUtil.CollectionToMapping(map)); doUpdateMapping(fixedUser, fixedDomain, RecipientRewriteTableUtil.CollectionToMapping(updatedMappings.getMappings()));
} else { } else {
doAddMapping(fixedUser, fixedDomain, mapping); doAddMapping(fixedUser, fixedDomain, mapping);
} }
Expand Down Expand Up @@ -131,12 +134,14 @@ protected Map<String, Mappings> getAllMappingsInternal() throws RecipientRewrite
if (map == null) { if (map == null) {
map = new HashMap<String, Mappings>(); map = new HashMap<String, Mappings>();
} }
Mappings list = map.get(email); Mappings mappings =
if (list == null) { MappingsImpl.from(
list = MappingsImpl.empty(); Optional.fromNullable(
} map.get(email))
list.add(Bytes.toString(keyValue.getRow())); .or(MappingsImpl.empty()))
map.put(email, list); .add(Bytes.toString(keyValue.getRow()))
.build();
map.put(email, mappings);
} }
} }
} }
Expand Down
Expand Up @@ -209,8 +209,8 @@ protected void addMappingInternal(String user, String domain, String regex) thro
String fixedDomain = getFixedDomain(domain); String fixedDomain = getFixedDomain(domain);
Mappings map = getUserDomainMappings(fixedUser, fixedDomain); Mappings map = getUserDomainMappings(fixedUser, fixedDomain);
if (map != null && map.size() != 0) { if (map != null && map.size() != 0) {
map.add(regex); Mappings updatedMappings = MappingsImpl.from(map).add(regex).build();
doUpdateMapping(fixedUser, fixedDomain, RecipientRewriteTableUtil.CollectionToMapping(map)); doUpdateMapping(fixedUser, fixedDomain, RecipientRewriteTableUtil.CollectionToMapping(updatedMappings));
} }
doAddMapping(fixedUser, fixedDomain, regex); doAddMapping(fixedUser, fixedDomain, regex);
} }
Expand Down
Expand Up @@ -65,8 +65,8 @@ protected void addMappingInternal(String user, String domain, String mapping) th
String fixedDomain = getFixedDomain(domain); String fixedDomain = getFixedDomain(domain);
Mappings map = getUserDomainMappings(fixedUser, fixedDomain); Mappings map = getUserDomainMappings(fixedUser, fixedDomain);
if (map != null && map.size() != 0) { if (map != null && map.size() != 0) {
map.add(mapping); Mappings updatedMappings = MappingsImpl.from(map).add(mapping).build();
doUpdateMapping(fixedUser, fixedDomain, RecipientRewriteTableUtil.CollectionToMapping(map)); doUpdateMapping(fixedUser, fixedDomain, RecipientRewriteTableUtil.CollectionToMapping(updatedMappings));
} else { } else {
doAddMapping(fixedUser, fixedDomain, mapping); doAddMapping(fixedUser, fixedDomain, mapping);
} }
Expand Down
Expand Up @@ -126,7 +126,7 @@ public Mappings getMappings(String user, String domain, int mappingLimit) throws


// Only non-null mappings are translated // Only non-null mappings are translated
if (targetString != null) { if (targetString != null) {
Mappings mappings = MappingsImpl.empty(); MappingsImpl.Builder mappings = MappingsImpl.builder();
if (targetString.startsWith(RecipientRewriteTable.ERROR_PREFIX)) { if (targetString.startsWith(RecipientRewriteTable.ERROR_PREFIX)) {
throw new ErrorMappingException(targetString.substring(RecipientRewriteTable.ERROR_PREFIX.length())); throw new ErrorMappingException(targetString.substring(RecipientRewriteTable.ERROR_PREFIX.length()));


Expand Down Expand Up @@ -189,7 +189,7 @@ public Mappings getMappings(String user, String domain, int mappingLimit) throws
} }
} }


return mappings; return mappings.build();


} }


Expand Down
Expand Up @@ -23,9 +23,9 @@
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer; import java.util.StringTokenizer;


import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;


Expand Down Expand Up @@ -53,6 +53,40 @@ public static Mappings fromCollection(Collection<String> mappings) {
return new MappingsImpl(mappings); return new MappingsImpl(mappings);
} }


public static Builder from(Mappings from) {
Builder builder = new Builder();
builder.addAll(from);
return builder;
}

public static Builder builder() {
return new Builder();
}

public static class Builder {

private final ImmutableList.Builder<String> mappings;

private Builder() {
mappings = ImmutableList.builder();
}

public Builder add(String mapping) {
mappings.add(mapping);
return this;
}

public Builder addAll(Mappings mappings) {
this.mappings.addAll(mappings);
return this;
}

public Mappings build() {
return new MappingsImpl(mappings.build());
}

}

private final Collection<String> mappings; private final Collection<String> mappings;


private MappingsImpl(Collection<String> mappings) { private MappingsImpl(Collection<String> mappings) {
Expand All @@ -74,11 +108,6 @@ public Mappings addAll(Mappings toAdd) {
return MappingsImpl.fromCollection(Lists.newArrayList(Iterables.concat(this, toAdd.getMappings()))); return MappingsImpl.fromCollection(Lists.newArrayList(Iterables.concat(this, toAdd.getMappings())));
} }


@Override
public void add(String mapping) {
mappings.add(mapping);
}

@Override @Override
public boolean contains(String mapping) { public boolean contains(String mapping) {
return mappings.contains(mapping); return mappings.contains(mapping);
Expand All @@ -94,10 +123,6 @@ public boolean remove(String mapping) {
return mappings.remove(mapping); return mappings.remove(mapping);
} }


public void addAll(List<String> target) {
mappings.addAll(target);
}

@Override @Override
public boolean isEmpty() { public boolean isEmpty() {
return mappings.isEmpty(); return mappings.isEmpty();
Expand Down
Expand Up @@ -29,6 +29,7 @@
import org.apache.james.rrt.api.RecipientRewriteTableException; import org.apache.james.rrt.api.RecipientRewriteTableException;
import org.apache.james.rrt.lib.Mappings; import org.apache.james.rrt.lib.Mappings;
import org.apache.james.rrt.lib.MappingsImpl; import org.apache.james.rrt.lib.MappingsImpl;
import org.apache.james.rrt.lib.MappingsImpl.Builder;
import org.apache.james.user.api.JamesUsersRepository; import org.apache.james.user.api.JamesUsersRepository;
import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepository;
import org.apache.james.user.api.UsersRepositoryException; import org.apache.james.user.api.UsersRepositoryException;
Expand Down Expand Up @@ -121,7 +122,7 @@ public void updateUser(User user) throws UsersRepositoryException {
* java.lang.String) * java.lang.String)
*/ */
public Mappings getMappings(String username, String domain) throws ErrorMappingException, RecipientRewriteTableException { public Mappings getMappings(String username, String domain) throws ErrorMappingException, RecipientRewriteTableException {
MappingsImpl mappings = MappingsImpl.empty(); Builder mappingsBuilder = MappingsImpl.builder();
try { try {
User user = getUserByName(username); User user = getUserByName(username);


Expand All @@ -131,14 +132,14 @@ public Mappings getMappings(String username, String domain) throws ErrorMappingE
if (enableAliases && jUser.getAliasing()) { if (enableAliases && jUser.getAliasing()) {
String alias = jUser.getAlias(); String alias = jUser.getAlias();
if (alias != null) { if (alias != null) {
mappings.add(alias + "@" + domain); mappingsBuilder.add(alias + "@" + domain);
} }
} }


if (enableForwarding && jUser.getForwarding()) { if (enableForwarding && jUser.getForwarding()) {
String forward; String forward;
if (jUser.getForwardingDestination() != null && ((forward = jUser.getForwardingDestination().toString()) != null)) { if (jUser.getForwardingDestination() != null && ((forward = jUser.getForwardingDestination().toString()) != null)) {
mappings.add(forward); mappingsBuilder.add(forward);
} else { } else {
String errorBuffer = "Forwarding was enabled for " + username + " but no forwarding address was set for this account."; String errorBuffer = "Forwarding was enabled for " + username + " but no forwarding address was set for this account.";
getLogger().error(errorBuffer); getLogger().error(errorBuffer);
Expand All @@ -148,6 +149,7 @@ public Mappings getMappings(String username, String domain) throws ErrorMappingE
} catch (UsersRepositoryException e) { } catch (UsersRepositoryException e) {
throw new RecipientRewriteTableException("Unable to lookup forwards/aliases", e); throw new RecipientRewriteTableException("Unable to lookup forwards/aliases", e);
} }
Mappings mappings = mappingsBuilder.build();
if (mappings.size() == 0) { if (mappings.size() == 0) {
return null; return null;
} else { } else {
Expand Down
Expand Up @@ -109,18 +109,17 @@ public Mappings getMappings(String user, String domain) throws ErrorMappingExcep
} }


private void addRawMapping(String user, String domain, String mapping) throws RecipientRewriteTableException { private void addRawMapping(String user, String domain, String mapping) throws RecipientRewriteTableException {
MappingsImpl map;
String key = user + "@" + domain; String key = user + "@" + domain;
String mappings = (String) store.get(key); String mappings = (String) store.get(key);


if (mappings != null) { if (mappings != null) {
map = MappingsImpl.fromRawString(mappings); MappingsImpl map = MappingsImpl.fromRawString(mappings);


if (map.contains(mapping)) { if (map.contains(mapping)) {
throw new RecipientRewriteTableException("Mapping " + mapping + " already exist!"); throw new RecipientRewriteTableException("Mapping " + mapping + " already exist!");
} else { } else {
map.add(mapping); Mappings updateMappings = MappingsImpl.from(map).add(mapping).build();
store.put(key, RecipientRewriteTableUtil.CollectionToMapping(map)); store.put(key, RecipientRewriteTableUtil.CollectionToMapping(updateMappings));
} }
} else { } else {
store.put(key, mapping); store.put(key, mapping);
Expand Down
Expand Up @@ -21,6 +21,7 @@
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;


import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;


Expand Down Expand Up @@ -115,13 +116,12 @@ private RecipientRewriteTable setUpRecipientRewriteTable() {
@Override @Override
public Mappings getMappings(String user, String domain) throws ErrorMappingException, public Mappings getMappings(String user, String domain) throws ErrorMappingException,
RecipientRewriteTableException { RecipientRewriteTableException {
Mappings mappings = MappingsImpl.empty();
if (user.equals(USER1)) { if (user.equals(USER1)) {
mappings.add("address@localhost"); return MappingsImpl.fromCollection(Arrays.asList("address@localhost"));
} else if (user.equals(USER2)) { } else if (user.equals(USER2)) {
throw new ErrorMappingException("554 BOUNCE"); throw new ErrorMappingException("554 BOUNCE");
} }
return mappings; return MappingsImpl.empty();
} }


@Override @Override
Expand Down

0 comments on commit ee73f63

Please sign in to comment.