You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jc...@apache.org on 2013/07/30 06:07:11 UTC

svn commit: r1508296 - in /commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub: Behavior.java StubInterceptorBuilder.java TrainingContext.java

Author: jcarman
Date: Tue Jul 30 04:07:11 2013
New Revision: 1508296

URL: http://svn.apache.org/r1508296
Log:
Removing member variable from Behavior class.

Modified:
    commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java
    commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java
    commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java

Modified: commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java?rev=1508296&r1=1508295&r2=1508296&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java Tue Jul 30 04:07:11 2013
@@ -27,12 +27,6 @@ import org.apache.commons.proxy2.interce
 public abstract class Behavior<T>
 {
 //----------------------------------------------------------------------------------------------------------------------
-// Fields
-//----------------------------------------------------------------------------------------------------------------------
-
-    private TrainingContext trainingContext;
-
-//----------------------------------------------------------------------------------------------------------------------
 // Abstract Methods
 //----------------------------------------------------------------------------------------------------------------------
 
@@ -50,7 +44,7 @@ public abstract class Behavior<T>
 
     private void record(ArgumentMatcher matcher)
     {
-        trainingContext.addArgumentMatcher(matcher);
+        trainingContext().addArgumentMatcher(matcher);
     }
 
     protected <R> R eq(R value)
@@ -65,12 +59,6 @@ public abstract class Behavior<T>
         return ProxyUtils.nullValue(type);
     }
 
-    void train(TrainingContext context, T stub)
-    {
-        this.trainingContext = context;
-        train(stub);
-    }
-
     protected <R> WhenObject<R> when(R expression)
     {
         return new WhenObject<R>();
@@ -129,28 +117,33 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenThrow(Exception e)
         {
-            trainingContext.setInterceptor(InterceptorUtils.throwing(e));
+            trainingContext().setInterceptor(InterceptorUtils.throwing(e));
             return Behavior.this;
         }
 
         protected Behavior<T> thenThrow(ObjectProvider<? extends Exception> provider)
         {
-            trainingContext.setInterceptor(InterceptorUtils.throwing(provider));
+            trainingContext().setInterceptor(InterceptorUtils.throwing(provider));
             return Behavior.this;
         }
 
         protected <R> Behavior<T> thenAnswer(ObjectProvider<? extends R> provider)
         {
-            trainingContext.setInterceptor(InterceptorUtils.provider(provider));
+            trainingContext().setInterceptor(InterceptorUtils.provider(provider));
             return Behavior.this;
         }
     }
 
+    private TrainingContext trainingContext()
+    {
+        return TrainingContext.getTrainingContext();
+    }
+
     protected class WhenBooleanArray extends BaseWhen<boolean[]>
     {
         protected Behavior<T> thenReturn(boolean... values)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
+            trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
             return Behavior.this;
         }
     }
@@ -159,7 +152,7 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenReturn(byte... values)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
+            trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
             return Behavior.this;
         }
     }
@@ -168,7 +161,7 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenReturn(char... values)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
+            trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
             return Behavior.this;
         }
     }
@@ -177,7 +170,7 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenReturn(double... values)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
+            trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
             return Behavior.this;
         }
     }
@@ -186,7 +179,7 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenReturn(float... values)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
+            trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
             return Behavior.this;
         }
     }
@@ -195,7 +188,7 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenReturn(int... values)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
+            trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
             return Behavior.this;
         }
     }
@@ -204,7 +197,7 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenReturn(long... values)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
+            trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
             return Behavior.this;
         }
     }
@@ -213,7 +206,7 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenReturn(R value)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(value));
+            trainingContext().setInterceptor(InterceptorUtils.constant(value));
             return Behavior.this;
         }
     }
@@ -222,7 +215,7 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenReturn(R... values)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
+            trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
             return Behavior.this;
         }
     }
@@ -231,7 +224,7 @@ public abstract class Behavior<T>
     {
         protected Behavior<T> thenReturn(short... values)
         {
-            trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
+            trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values)));
             return Behavior.this;
         }
     }

Modified: commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java?rev=1508296&r1=1508295&r2=1508296&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java Tue Jul 30 04:07:11 2013
@@ -54,9 +54,16 @@ public class StubInterceptorBuilder
 
     public <T> StubInterceptorBuilder configure(Class<T> type, Behavior<T> behavior)
     {
-        final TrainingContext context = new TrainingContext(interceptor);
-        T stub = proxyFactory.createInvokerProxy(new TrainingContextInvoker(context), type);
-        behavior.train(context, stub);
+        try
+        {
+            TrainingContext.set(interceptor);
+            T stub = proxyFactory.createInvokerProxy(new TrainingContextInvoker(), type);
+            behavior.train(stub);
+        }
+        finally
+        {
+            TrainingContext.clear();
+        }
         return this;
     }
 
@@ -66,17 +73,10 @@ public class StubInterceptorBuilder
 
     private static final class TrainingContextInvoker implements Invoker
     {
-        private final TrainingContext trainingContext;
-
-        private TrainingContextInvoker(TrainingContext trainingContext)
-        {
-            this.trainingContext = trainingContext;
-        }
-
         @Override
         public Object invoke(Object proxy, Method method, Object[] arguments) throws Throwable
         {
-            trainingContext.stubMethodInvoked(method, arguments);
+            TrainingContext.getTrainingContext().stubMethodInvoked(method, arguments);
             return ProxyUtils.nullValue(method.getReturnType());
         }
     }

Modified: commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java
URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java?rev=1508296&r1=1508295&r2=1508296&view=diff
==============================================================================
--- commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java (original)
+++ commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java Tue Jul 30 04:07:11 2013
@@ -36,16 +36,36 @@ public class TrainingContext
 // Fields
 //----------------------------------------------------------------------------------------------------------------------
 
+    private static final ThreadLocal<TrainingContext> TRAINING_CONTEXT = new ThreadLocal<TrainingContext>();
     private List<ArgumentMatcher> argumentMatchers = new LinkedList<ArgumentMatcher>();
     private InvocationMatcher matcher;
     private Interceptor interceptor;
     private final SwitchInterceptor switchInterceptor;
 
 //----------------------------------------------------------------------------------------------------------------------
+// Static Methods
+//----------------------------------------------------------------------------------------------------------------------
+
+    public static void clear()
+    {
+        TRAINING_CONTEXT.remove();
+    }
+
+    public static TrainingContext getTrainingContext()
+    {
+        return TRAINING_CONTEXT.get();
+    }
+
+    public static void set(SwitchInterceptor interceptor)
+    {
+        TRAINING_CONTEXT.set(new TrainingContext(interceptor));
+    }
+
+//----------------------------------------------------------------------------------------------------------------------
 // Constructors
 //----------------------------------------------------------------------------------------------------------------------
 
-    public TrainingContext(SwitchInterceptor switchInterceptor)
+    private TrainingContext(SwitchInterceptor switchInterceptor)
     {
         this.switchInterceptor = switchInterceptor;
     }