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]

Reply via email to