You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/07/11 21:06:02 UTC

svn commit: r963128 - in /tapestry/tapestry5/trunk/tapestry-ioc/src: main/java/org/apache/tapestry5/ioc/internal/services/ main/java/org/apache/tapestry5/ioc/services/ test/java/org/apache/tapestry5/ioc/internal/services/

Author: hlship
Date: Sun Jul 11 19:06:02 2010
New Revision: 963128

URL: http://svn.apache.org/viewvc?rev=963128&view=rev
Log:
TAP5-1197: Add an exists() method to PerThreadValue

Modified:
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java?rev=963128&r1=963127&r2=963128&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImpl.java Sun Jul 11 19:06:02 2010
@@ -121,7 +121,7 @@ public class PerthreadManagerImpl implem
             lock.lock();
 
             // Discard the per-thread map of values.
-            
+
             holder.remove();
         }
         finally
@@ -141,6 +141,8 @@ public class PerthreadManagerImpl implem
         return getPerthreadMap().get(key);
     }
 
+    private static Object NULL_VALUE = new Object();
+
     public <T> PerThreadValue<T> createValue(final Object key)
     {
         return new PerThreadValue<T>()
@@ -148,12 +150,24 @@ public class PerthreadManagerImpl implem
             @SuppressWarnings("unchecked")
             public T get()
             {
-                return (T) PerthreadManagerImpl.this.get(key);
+                Object storedValue = PerthreadManagerImpl.this.get(key);
+
+                if (storedValue == NULL_VALUE)
+                    return null;
+
+                return (T) storedValue;
+            }
+
+            public T set(T newValue)
+            {
+                put(key, newValue == null ? NULL_VALUE : newValue);
+
+                return newValue;
             }
 
-            public void set(T newValue)
+            public boolean exists()
             {
-                put(key, newValue);
+                return getPerthreadMap().containsKey(key);
             }
         };
     }

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java?rev=963128&r1=963127&r2=963128&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/services/PerThreadValue.java Sun Jul 11 19:06:02 2010
@@ -21,9 +21,12 @@ package org.apache.tapestry5.ioc.service
  */
 public interface PerThreadValue<T>
 {
+    /** Is a value stored (even null)? */
+    boolean exists();
+    
     /** Reads the current per-thread value, or returns null if no value has been stored. */
     T get();
 
-    /** Sets the current per-thread value. */
-    void set(T newValue);
+    /** Sets the current per-thread value, then returns that value. */
+    T set(T newValue);
 }

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java?rev=963128&r1=963127&r2=963128&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/test/java/org/apache/tapestry5/ioc/internal/services/PerthreadManagerImplTest.java Sun Jul 11 19:06:02 2010
@@ -129,12 +129,28 @@ public class PerthreadManagerImplTest ex
 
         PerThreadValue<Object> v = m.createValue(key);
 
+        assertFalse(v.exists());
         assertNull(m.get(key));
         assertNull(v.get());
 
         v.set(value);
 
+        assertTrue(v.exists());
         assertSame(m.get(key), value);
         assertSame(v.get(), value);
     }
+    
+    @Test
+    public void per_thread_null()
+    {
+        PerthreadManagerImpl m = new PerthreadManagerImpl(null);
+
+        PerThreadValue<Object> v = m.createValue(new Object());
+
+        v.set(null);
+        
+        assertTrue(v.exists());
+        
+        assertNull(v.get());
+    }
 }