You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by ma...@apache.org on 2018/04/24 12:50:39 UTC

[10/27] james-project git commit: JAMES-2366 Mapping ordering is in fact a policy

JAMES-2366 Mapping ordering is in fact a policy


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/f8c43adc
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/f8c43adc
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/f8c43adc

Branch: refs/heads/master
Commit: f8c43adc6dc916ab25c4f64a7c22b69ae1942b6b
Parents: 9fe1d26
Author: Matthieu Baechler <ma...@apache.org>
Authored: Tue Apr 17 14:37:04 2018 +0200
Committer: Matthieu Baechler <ma...@apache.org>
Committed: Tue Apr 24 14:45:26 2018 +0200

----------------------------------------------------------------------
 .../java/org/apache/james/rrt/lib/Mapping.java  | 20 ++++------
 .../org/apache/james/rrt/lib/MappingsImpl.java  | 39 ++++++++++++++++++--
 2 files changed, 42 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/f8c43adc/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
----------------------------------------------------------------------
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
index 39be80d..d85a6d2 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
@@ -53,19 +53,17 @@ public interface Mapping {
     Optional<MailAddress> asMailAddress();
 
     enum Type {
-        Regex("regex:", 4),
-        Domain("domain:", 1),
-        Error("error:", 4),
-        Forward("forward:", 3),
-        Group("group:", 2),
-        Address("", 4);
+        Regex("regex:"),
+        Domain("domain:"),
+        Error("error:"),
+        Forward("forward:"),
+        Group("group:"),
+        Address("");
 
         private final String asPrefix;
-        private final int order;
 
-        Type(String asPrefix, Integer order) {
+        Type(String asPrefix) {
             this.asPrefix = asPrefix;
-            this.order = order;
         }
 
         public String asPrefix() {
@@ -84,10 +82,6 @@ public interface Mapping {
                 || mapping.startsWith(Forward.asPrefix())
                 || mapping.startsWith(Group.asPrefix());
         }
-
-        public int getOrder() {
-            return order;
-        }
     }
 
     Type getType();

http://git-wip-us.apache.org/repos/asf/james-project/blob/f8c43adc/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
index ada8ac0..3b56c9e 100644
--- a/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
+++ b/server/data/data-library/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
@@ -44,9 +44,40 @@ public class MappingsImpl implements Mappings, Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    public static final Comparator<Mapping> MAPPING_COMPARATOR = Comparator
-        .<Mapping, Integer>comparing(mapping -> mapping.getType().getOrder())
-        .thenComparing(Mapping::asString);
+    private static class DefaultMappingOrderingPolicy {
+
+        private static final Comparator<Mapping> MAPPING_COMPARATOR = Comparator
+            .<Mapping, Integer>comparing(DefaultMappingOrderingPolicy::typeOrder)
+            .thenComparing(Mapping::asString);
+
+        private static int typeOrder(Mapping mapping) {
+            return typeOrder(mapping.getType());
+        }
+
+        private static int typeOrder(Mapping.Type type) {
+            switch (type) {
+                case Domain:
+                    return 1;
+                case Group:
+                    return 2;
+                case Forward:
+                    return 3;
+                case Regex:
+                    return 4;
+                case Error:
+                    return 4;
+                case Address:
+                    return 4;
+            }
+            throw new IllegalArgumentException("missing enum handling");
+        }
+
+        public Comparator<Mapping> comparator() {
+            return MAPPING_COMPARATOR;
+        }
+    }
+
+
 
     public static MappingsImpl empty() {
         return builder().build();
@@ -121,7 +152,7 @@ public class MappingsImpl implements Mappings, Serializable {
         public MappingsImpl build() {
             return new MappingsImpl(mappings.build()
                 .stream()
-                .sorted(MAPPING_COMPARATOR)
+                .sorted(new DefaultMappingOrderingPolicy().comparator())
                 .collect(Guavate.toImmutableList()));
         }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org