[jbosscache-commits] JBoss Cache SVN: r4629 - in core/trunk/src: test/java/org/jboss/cache/util and 1 other directory.

jbosscache-commits at lists.jboss.org jbosscache-commits at lists.jboss.org
Tue Oct 16 23:33:43 EDT 2007


Author: genman
Date: 2007-10-16 23:33:42 -0400 (Tue, 16 Oct 2007)
New Revision: 4629

Modified:
   core/trunk/src/main/java/org/jboss/cache/util/DeltaMap.java
   core/trunk/src/test/java/org/jboss/cache/util/DeltaMapTest.java
Log:
Add factory method for exclusion of keys

Modified: core/trunk/src/main/java/org/jboss/cache/util/DeltaMap.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/util/DeltaMap.java	2007-10-17 03:11:06 UTC (rev 4628)
+++ core/trunk/src/main/java/org/jboss/cache/util/DeltaMap.java	2007-10-17 03:33:42 UTC (rev 4629)
@@ -2,6 +2,7 @@
 
 import java.util.AbstractMap;
 import java.util.AbstractSet;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -41,10 +42,9 @@
    private Map<K, V> original;
 
    /**
-    * Keys removed.
-    * This should not exceed the size of the original map.
+    * Keys excluded.
     */
-   private Set<K> removed = new HashSet<K>();
+   private Set<K> exclude;
 
    /**
     * Keys changed.
@@ -54,13 +54,15 @@
 
    /**
     * Constructs a new DeltaMap.
-    * @param original will not be modified.
     */
-   private DeltaMap(Map<K, V> original)
+   private DeltaMap(Map<K, V> original, Set<K> exclude)
    {
       if (original == null)
          throw new NullPointerException("original");
+      if (exclude == null)
+         throw new NullPointerException("exclude");
       this.original = original;
+      this.exclude = exclude;
    }
 
    /**
@@ -71,9 +73,29 @@
     */
    public static <K, V> DeltaMap<K, V> create(Map<K, V> original)
    {
-      return new DeltaMap<K, V>(original);
+      return new DeltaMap<K, V>(original, new HashSet<K>());
    }
 
+   /**
+    * Creates and returns a DeltaMap for an original map, excluding some key mappings.
+    * 
+    * @param original will not be modified, except by {@link #commit()}
+    * @param excluded entries not to include
+    * @return a new instance
+    */
+   public static <K, V> DeltaMap<K, V> excludeKeys(Map<K, V> original, Set<K> exclude)
+   {
+      return new DeltaMap<K, V>(original, exclude);
+   }
+   
+   /**
+    * Creates and returns a DeltaMap for an original map, excluding some key mappings.
+    */
+   public static <K, V> DeltaMap<K, V> excludeKeys(Map<K, V> original, K... exclude)
+   {
+      return excludeKeys(original, new HashSet<K>(Arrays.asList(exclude)));
+   }
+
    @Override
    public Set<java.util.Map.Entry<K, V>> entrySet()
    {
@@ -89,7 +111,7 @@
          @Override
          public int size()
          {
-            int size = original.size() - removed.size();
+            int size = original.size() - exclude.size();
             for (Object o : changed.keySet())
             {
                if (!original.containsKey(o))
@@ -103,7 +125,7 @@
    @Override
    public boolean containsKey(Object key)
    {
-      if (removed.contains(key))
+      if (exclude.contains(key))
          return false;
       if (changed.containsKey(key))
          return true;
@@ -113,7 +135,7 @@
    @Override
    public V get(Object key)
    {
-      if (removed.contains(key))
+      if (exclude.contains(key))
          return null;
       if (changed.containsKey(key))
          return changed.get(key);
@@ -129,9 +151,9 @@
       else
          old = original.get(key);
       changed.put(key, value);
-      if (removed.contains(key))
+      if (exclude.contains(key))
       {
-         removed.remove(key);
+         exclude.remove(key);
          return null;
       }
       return old;
@@ -144,16 +166,16 @@
       if (changed.containsKey(key))
       {
           if (original.containsKey(key))
-             removed.add((K) key);
+             exclude.add((K) key);
          return changed.remove(key);
       }
-      if (removed.contains(key))
+      if (exclude.contains(key))
       {
          return null;
       }
       if (original.containsKey(key))
       {
-         removed.add((K) key);
+         exclude.add((K) key);
          return original.get(key);
       }
       return null;
@@ -165,9 +187,9 @@
     */
    public void commit()
    {
-      original.keySet().removeAll(removed);
+      original.keySet().removeAll(exclude);
       original.putAll(changed);
-      removed.clear();
+      exclude.clear();
       changed.clear();
    }
 
@@ -186,7 +208,7 @@
       private boolean redef(Entry<K, V> e)
       {
          K key = e.getKey();
-         return removed.contains(key) || changed.containsKey(key);
+         return exclude.contains(key) || changed.containsKey(key);
       }
 
       public boolean hasNext()
@@ -239,13 +261,13 @@
     * Returns a debug string.
     */
    public String toDebugString() {
-      return "DeltaMap original=" + original + " removed=" + removed + " changed=" + changed;
+      return "DeltaMap original=" + original + " exclude=" + exclude + " changed=" + changed;
    }
 
    @Override
    public void clear()
    {
-      removed.addAll(original.keySet());
+      exclude.addAll(original.keySet());
       changed.clear();
    }
 

Modified: core/trunk/src/test/java/org/jboss/cache/util/DeltaMapTest.java
===================================================================
--- core/trunk/src/test/java/org/jboss/cache/util/DeltaMapTest.java	2007-10-17 03:11:06 UTC (rev 4628)
+++ core/trunk/src/test/java/org/jboss/cache/util/DeltaMapTest.java	2007-10-17 03:33:42 UTC (rev 4629)
@@ -8,32 +8,39 @@
 import java.util.NoSuchElementException;
 import java.util.Map.Entry;
 
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 @Test(groups = {"functional", "transaction"})
 public class DeltaMapTest
 {
 
-   public static String Y = "y";
+   static String Y = "y";
 
-   public static String Z = "z";
+   static String Z = "z";
 
-   public static String K = "k";
+   static String K = "k";
 
-   HashMap<String, String> hm = new HashMap<String, String>();
+   HashMap<String, String> hm;
+   
+   HashMap<String, String> backup;
+
+   DeltaMap<String, String> dm;
+   
+   @BeforeMethod
+   public void setUp()
    {
+      hm = new HashMap<String, String>();
       hm.put(null, null);
       hm.put(Y, Z);
       hm.put(K, Y);
+      backup = new HashMap<String, String>(hm);
+      dm = DeltaMap.create(hm);
    }
-
-   HashMap<String, String> backup = new HashMap<String, String>(hm);
-
-   DeltaMap<String, String> dm = DeltaMap.create(hm);
-
+   
    public void testChanges() throws Exception
    {
-      assertEquals(backup, dm);
+      assertEquals("" + dm.toDebugString(), backup, dm);
       assertEquals(Z, dm.remove(Y));
       assertEquals(null, dm.remove(Y));
       assertEquals("changes not made to underlying map", backup, hm);
@@ -59,8 +66,20 @@
       assertEquals(null, dm.remove(K));
    }
 
-   public void testClear() throws Exception
+   public void testExclude() throws Exception
    {
+       dm = DeltaMap.excludeKeys(hm, Y);
+       assertEquals(false, dm.containsKey(Y));
+   }
+   
+   public void testExclude2() throws Exception
+   {
+       dm = DeltaMap.excludeKeys(hm, hm.keySet());
+       assertEquals(0, dm.size());
+   }
+   
+   public void testClearedMap() throws Exception
+   {
       dm.clear();
       assertEquals(0, dm.size());
       assertEquals(backup, hm);




More information about the jbosscache-commits mailing list