[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