Author: matthieu
Date: Mon Nov 2 13:48:47 2015
New Revision: 1711994
URL: http://svn.apache.org/viewvc?rev=1711994&view=rev
Log:
JAMES-1595 fix AbstractRecipientRewriteTable mapping sorting
Modified:
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
james/project/trunk/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java
Modified:
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java?rev=1711994&r1=1711993&r2=1711994&view=diff
==============================================================================
---
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
(original)
+++
james/project/trunk/server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
Mon Nov 2 13:48:47 2015
@@ -18,9 +18,6 @@
****************************************************************/
package org.apache.james.rrt.lib;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
@@ -122,10 +119,11 @@ public abstract class AbstractRecipientR
if (mappingLimit == 0)
throw new ErrorMappingException("554 Too many mappings to
process");
- String targetString = mapAddress(user, domain);
+ Mappings targetMappings = mapAddress(user, domain);
// Only non-null mappings are translated
- if (targetString != null) {
+ if (targetMappings != null) {
+ String targetString = targetMappings.serialize();
MappingsImpl.Builder mappings = MappingsImpl.builder();
if (targetString.startsWith(RecipientRewriteTable.ERROR_PREFIX)) {
throw new
ErrorMappingException(targetString.substring(RecipientRewriteTable.ERROR_PREFIX.length()));
@@ -440,34 +438,24 @@ public abstract class AbstractRecipientR
* the domain
* @return the mappings
*/
- private String mapAddress(String user, String domain) throws
RecipientRewriteTableException {
+ private Mappings mapAddress(String user, String domain) throws
RecipientRewriteTableException {
String mappings = mapAddressInternal(user, domain);
- return sortMappings(mappings);
+ if (mappings != null) {
+ return sortMappings(MappingsImpl.fromRawString(mappings));
+ } else {
+ return null;
+ }
}
- @VisibleForTesting static String sortMappings(String mappings) {
- // check if we need to sort
- // TODO: Maybe we should just return the aliasdomain mapping
- if (mappings != null &&
mappings.contains(RecipientRewriteTable.ALIASDOMAIN_PREFIX)) {
- Mappings mapCol = MappingsImpl.fromRawString(mappings);
- Iterator<String> mapIt = mapCol.asStrings().iterator();
-
- List<String> col = new ArrayList<String>(mapCol.size());
-
- int i = 0;
- while (mapIt.hasNext()) {
- String mapping = mapIt.next();
-
- if
(mapping.startsWith(RecipientRewriteTable.ALIASDOMAIN_PREFIX)) {
- col.add(i, mapping);
- i++;
- } else {
- col.add(mapping);
- }
- }
- return MappingsImpl.fromCollection(col).serialize();
+ @VisibleForTesting static Mappings sortMappings(Mappings mappings) {
+ if (mappings.contains(Mapping.Type.Domain)) {
+ return
+ MappingsImpl.builder()
+ .addAll(mappings.select(Mapping.Type.Domain))
+ .addAll(mappings.exclude(Mapping.Type.Domain))
+ .build();
} else {
return mappings;
}
Modified:
james/project/trunk/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java?rev=1711994&r1=1711993&r2=1711994&view=diff
==============================================================================
---
james/project/trunk/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java
(original)
+++
james/project/trunk/server/data/data-library/src/test/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTableTest.java
Mon Nov 2 13:48:47 2015
@@ -292,21 +292,16 @@ public abstract class AbstractRecipientR
}
}
-
- @Test
- public void sortMappingsShouldReturnNullWhenNull() {
- assertThat(AbstractRecipientRewriteTable.sortMappings(null)).isNull();
- }
@Test
public void sortMappingsShouldReturnEmptyWhenEmpty() {
- assertThat(AbstractRecipientRewriteTable.sortMappings("")).isEmpty();
+
assertThat(AbstractRecipientRewriteTable.sortMappings(MappingsImpl.empty())).isEmpty();
}
@Test
public void sortMappingsShouldReturnSameStringWhenSingleDomainAlias() {
String singleDomainAlias = RecipientRewriteTable.ALIASDOMAIN_PREFIX +
"first";
-
assertThat(AbstractRecipientRewriteTable.sortMappings(singleDomainAlias)).isEqualTo(singleDomainAlias);
+
assertThat(AbstractRecipientRewriteTable.sortMappings(MappingsImpl.fromRawString(singleDomainAlias))).containsExactly(MappingImpl.domain("first"));
}
@Test
@@ -315,7 +310,7 @@ public abstract class AbstractRecipientR
.add(RecipientRewriteTable.ALIASDOMAIN_PREFIX + "first")
.add(RecipientRewriteTable.ALIASDOMAIN_PREFIX + "second")
.build();
-
assertThat(AbstractRecipientRewriteTable.sortMappings(mappings.serialize())).isEqualTo(mappings.serialize());
+
assertThat(AbstractRecipientRewriteTable.sortMappings(mappings)).isEqualTo(mappings);
}
@Test
@@ -326,11 +321,11 @@ public abstract class AbstractRecipientR
.add(regexMapping)
.add(domainMapping)
.build();
-
assertThat(AbstractRecipientRewriteTable.sortMappings(mappings.serialize()))
+ assertThat(AbstractRecipientRewriteTable.sortMappings(mappings))
.isEqualTo(MappingsImpl.builder()
.add(domainMapping)
.add(regexMapping)
- .build().serialize());
+ .build());
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]