CaseBuilder could be static as well. Matt
On Mon, Jul 29, 2013 at 10:10 AM, <jcar...@apache.org> wrote: > 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)); > > >