Author: jcarman
Date: Mon Jul 29 15:10:07 2013
New Revision: 1508094

URL: http://svn.apache.org/r1508094
Log:
PROXY-20: Changing API around a bit to be more "fluent"

Modified:
    commons/proper/proxy/branches/version-2.0-work/   (props changed)
    
commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/SwitchInterceptor.java
    
commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/TestSwitchInterceptor.java

Propchange: commons/proper/proxy/branches/version-2.0-work/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Mon Jul 29 15:10:07 2013
@@ -5,3 +5,5 @@
 target
 
 commons-proxy2-parent.iml
+
+.idea

Modified: 
commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/SwitchInterceptor.java
URL: 
http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/SwitchInterceptor.java?rev=1508094&r1=1508093&r2=1508094&view=diff
==============================================================================
--- 
commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/SwitchInterceptor.java
 (original)
+++ 
commons/proper/proxy/branches/version-2.0-work/core/src/main/java/org/apache/commons/proxy2/interceptor/SwitchInterceptor.java
 Mon Jul 29 15:10:07 2013
@@ -17,6 +17,8 @@
 
 package org.apache.commons.proxy2.interceptor;
 
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
 import org.apache.commons.proxy2.Interceptor;
 import org.apache.commons.proxy2.Invocation;
 
@@ -36,7 +38,7 @@ public class SwitchInterceptor implement
 // Fields
 
//----------------------------------------------------------------------------------------------------------------------
 
-    private final List<Case> cases = new CopyOnWriteArrayList<Case>();
+    private final List<Pair<InvocationMatcher, Interceptor>> cases = new 
CopyOnWriteArrayList<Pair<InvocationMatcher, Interceptor>>();
 
 
//----------------------------------------------------------------------------------------------------------------------
 // Constructors
@@ -46,11 +48,6 @@ public class SwitchInterceptor implement
     {
     }
 
-    public SwitchInterceptor(InvocationMatcher matcher, Interceptor 
interceptor)
-    {
-        cases.add(new Case(matcher, interceptor));
-    }
-
 
//----------------------------------------------------------------------------------------------------------------------
 // Interceptor Implementation
 
//----------------------------------------------------------------------------------------------------------------------
@@ -58,11 +55,11 @@ public class SwitchInterceptor implement
     @Override
     public Object intercept(Invocation invocation) throws Throwable
     {
-        for (Case currentCase : cases)
+        for (Pair<InvocationMatcher, Interceptor> currentCase : cases)
         {
-            if(currentCase.matcher.matches(invocation))
+            if (currentCase.getLeft().matches(invocation))
             {
-                return currentCase.interceptor.intercept(invocation);
+                return currentCase.getRight().intercept(invocation);
             }
         }
         return invocation.proceed();
@@ -72,25 +69,28 @@ public class SwitchInterceptor implement
 // Other Methods
 
//----------------------------------------------------------------------------------------------------------------------
 
-    public SwitchInterceptor onCase(InvocationMatcher matcher, Interceptor 
interceptor)
+    public CaseBuilder when(InvocationMatcher matcher)
     {
-        cases.add(new Case(matcher, interceptor));
-        return this;
+        return new CaseBuilder(matcher);
     }
 
 
//----------------------------------------------------------------------------------------------------------------------
 // Inner Classes
 
//----------------------------------------------------------------------------------------------------------------------
 
-    private static final class Case implements Serializable
+    public class CaseBuilder
     {
-        private InvocationMatcher matcher;
-        private Interceptor interceptor;
+        private final InvocationMatcher matcher;
 
-        private Case(InvocationMatcher matcher, Interceptor interceptor)
+        public CaseBuilder(InvocationMatcher matcher)
         {
             this.matcher = matcher;
-            this.interceptor = interceptor;
+        }
+
+        public SwitchInterceptor then(Interceptor interceptor)
+        {
+            cases.add(new ImmutablePair<InvocationMatcher, 
Interceptor>(matcher, interceptor));
+            return SwitchInterceptor.this;
         }
     }
 }

Modified: 
commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/TestSwitchInterceptor.java
URL: 
http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/TestSwitchInterceptor.java?rev=1508094&r1=1508093&r2=1508094&view=diff
==============================================================================
--- 
commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/TestSwitchInterceptor.java
 (original)
+++ 
commons/proper/proxy/branches/version-2.0-work/core/src/test/java/org/apache/commons/proxy2/interceptor/TestSwitchInterceptor.java
 Mon Jul 29 15:10:07 2013
@@ -34,8 +34,8 @@ public class TestSwitchInterceptor exten
     public void testWithMultipleAdvices() throws Throwable
     {
         SwitchInterceptor interceptor = new SwitchInterceptor();
-        interceptor.onCase(new MethodNameMatcher("echo"), new 
ConstantInterceptor("bar"));
-        interceptor.onCase(new MethodNameMatcher("echoBack"), new 
ConstantInterceptor("baz"));
+        interceptor.when(new MethodNameMatcher("echo")).then(new 
ConstantInterceptor("bar"));
+        interceptor.when(new MethodNameMatcher("echoBack")).then(new 
ConstantInterceptor("baz"));
         Method method = Echo.class.getMethod("echoBack", String.class);
         Invocation invocation = new MockInvocation(method, "foo", "foo");
         assertEquals("baz", interceptor.intercept(invocation));
@@ -51,7 +51,7 @@ public class TestSwitchInterceptor exten
 
     public void testWithSingleAdviceWhichDoesNotMatch() throws Throwable
     {
-        SwitchInterceptor interceptor = new SwitchInterceptor(new 
MethodNameMatcher("echoBackZZZZ"), new ConstantInterceptor("bar"));
+        SwitchInterceptor interceptor = new SwitchInterceptor().when(new 
MethodNameMatcher("echoBackZZZZ")).then(new ConstantInterceptor("bar"));
         Method method = Echo.class.getMethod("echoBack", String.class);
         Invocation invocation = new MockInvocation(method, "foo", "foo");
         assertEquals("foo", interceptor.intercept(invocation));
@@ -59,7 +59,7 @@ public class TestSwitchInterceptor exten
 
     public void testWithSingleAdviceWhichMatches() throws Throwable
     {
-        SwitchInterceptor interceptor = new SwitchInterceptor(new 
MethodNameMatcher("echoBack"), new ConstantInterceptor("bar"));
+        SwitchInterceptor interceptor = new SwitchInterceptor().when(new 
MethodNameMatcher("echoBack")).then(new ConstantInterceptor("bar"));
         Method method = Echo.class.getMethod("echoBack", String.class);
         Invocation invocation = new MockInvocation(method, "foo", "foo");
         assertEquals("bar", interceptor.intercept(invocation));


Reply via email to