提交 e986434a 编写于 作者: K Keith Donald

moved collection utilities to util

上级 4bf3a9c9
/**
* Collection extensions used in the framework.
*/
package org.springframework.core.collection;
......@@ -13,18 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.core.collection;
package org.springframework.util;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.NoSuchElementException;
import org.springframework.util.Assert;
/**
* Iterator that combines multiple other iterators. This is a simple implementation that just maintains a list of
* iterators which are invoked in sequence untill all iterators are exhausted.
* Iterator that combines multiple other iterators.
* This implementation maintains a list of iterators which are invoked in sequence until all iterators are exhausted.
* @author Erwin Vervaet
*/
public class CompositeIterator<E> implements Iterator<E> {
......
......@@ -13,16 +13,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.core.collection;
package org.springframework.util;
import java.util.Map;
/**
* A simple subinterface of {@link Map} that exposes a mutex that application code can synchronize on.
* <p>
* Expected to be implemented by Maps that are backed by shared objects that require synchronization between multiple
* threads. An example would be the HTTP session map.
*
* Expected to be implemented by Maps that are backed by shared objects that require synchronization between multiple threads.
* An example would be the HTTP session map.
* @author Keith Donald
*/
public interface SharedMap<K, V> extends Map<K, V> {
......
......@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.core.collection;
package org.springframework.util;
import java.io.Serializable;
import java.util.Collection;
......@@ -23,9 +23,9 @@ import java.util.Set;
import org.springframework.core.style.ToStringCreator;
/**
* A map decorator that implements <code>SharedMap</code>. By default, simply returns the map itself as the mutex.
* A map decorator that implements <code>SharedMap</code>.
* By default, simply returns the map itself as the mutex.
* Subclasses may override to return a different mutex object.
*
* @author Keith Donald
*/
@SuppressWarnings("serial")
......
......@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.core.collection;
package org.springframework.util;
import java.util.AbstractSet;
import java.util.Collection;
......@@ -23,9 +23,8 @@ import java.util.NoSuchElementException;
import java.util.Set;
/**
* Base class for map adapters whose keys are String values. Concrete classes need only implement the abstract hook
* methods defined by this class.
*
* Base class for map adapters whose keys are String values.
* Concrete classes need only implement the abstract hook methods defined by this class.
* @author Keith Donald
*/
public abstract class StringKeyedMapAdapter<V> implements Map<String, V> {
......
package org.springframework.util;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import junit.framework.TestCase;
/**
* Test case for {@link CompositeIterator}.
*
* @author Erwin Vervaet
*/
public class CompositeIteratorTests extends TestCase {
public void testNoIterators() {
CompositeIterator it = new CompositeIterator();
assertFalse(it.hasNext());
try {
it.next();
fail();
} catch (NoSuchElementException e) {
// expected
}
}
public void testSingleIterator() {
CompositeIterator it = new CompositeIterator();
it.add(Arrays.asList(new String[] { "0", "1" }).iterator());
for (int i = 0; i < 2; i++) {
assertTrue(it.hasNext());
assertEquals(String.valueOf(i), it.next());
}
assertFalse(it.hasNext());
try {
it.next();
fail();
} catch (NoSuchElementException e) {
// expected
}
}
public void testMultipleIterators() {
CompositeIterator it = new CompositeIterator();
it.add(Arrays.asList(new String[] { "0", "1" }).iterator());
it.add(Arrays.asList(new String[] { "2" }).iterator());
it.add(Arrays.asList(new String[] { "3", "4" }).iterator());
for (int i = 0; i < 5; i++) {
assertTrue(it.hasNext());
assertEquals(String.valueOf(i), it.next());
}
assertFalse(it.hasNext());
try {
it.next();
fail();
} catch (NoSuchElementException e) {
// expected
}
}
public void testInUse() {
List list = Arrays.asList(new String[] { "0", "1" });
CompositeIterator it = new CompositeIterator();
it.add(list.iterator());
it.hasNext();
try {
it.add(list.iterator());
fail();
} catch (IllegalStateException e) {
// expected
}
it = new CompositeIterator();
it.add(list.iterator());
it.next();
try {
it.add(list.iterator());
fail();
} catch (IllegalStateException e) {
// expected
}
}
public void testDuplicateIterators() {
List list = Arrays.asList(new String[] { "0", "1" });
Iterator iterator = list.iterator();
CompositeIterator it = new CompositeIterator();
it.add(iterator);
it.add(list.iterator());
try {
it.add(iterator);
fail();
} catch (IllegalArgumentException e) {
// expected
}
}
}
package org.springframework.util;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import junit.framework.TestCase;
/**
* Unit tests for {@link org.springframework.binding.collection.SharedMapDecorator}.
*/
public class SharedMapDecoratorTests extends TestCase {
private SharedMapDecorator map = new SharedMapDecorator(new HashMap());
public void testGetPutRemove() {
assertTrue(map.size() == 0);
assertTrue(map.isEmpty());
assertNull(map.get("foo"));
assertFalse(map.containsKey("foo"));
map.put("foo", "bar");
assertTrue(map.size() == 1);
assertFalse(map.isEmpty());
assertNotNull(map.get("foo"));
assertTrue(map.containsKey("foo"));
assertTrue(map.containsValue("bar"));
assertEquals("bar", map.get("foo"));
map.remove("foo");
assertTrue(map.size() == 0);
assertNull(map.get("foo"));
}
public void testPutAll() {
Map all = new HashMap();
all.put("foo", "bar");
all.put("bar", "baz");
map.putAll(all);
assertTrue(map.size() == 2);
}
public void testEntrySet() {
map.put("foo", "bar");
map.put("bar", "baz");
Set entrySet = map.entrySet();
assertTrue(entrySet.size() == 2);
}
public void testKeySet() {
map.put("foo", "bar");
map.put("bar", "baz");
Set keySet = map.keySet();
assertTrue(keySet.size() == 2);
}
public void testValues() {
map.put("foo", "bar");
map.put("bar", "baz");
Collection values = map.values();
assertTrue(values.size() == 2);
}
}
package org.springframework.util;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import junit.framework.TestCase;
/**
* Unit tests for {@link org.springframework.binding.collection.StringKeyedMapAdapter}.
*/
public class StringKeyedMapAdapterTests extends TestCase {
private Map contents = new HashMap();
private StringKeyedMapAdapter map = new StringKeyedMapAdapter() {
protected Object getAttribute(String key) {
return contents.get(key);
}
protected Iterator getAttributeNames() {
return contents.keySet().iterator();
}
protected void removeAttribute(String key) {
contents.remove(key);
}
protected void setAttribute(String key, Object value) {
contents.put(key, value);
}
};
public void testGetPutRemove() {
assertTrue(map.size() == 0);
assertTrue(map.isEmpty());
assertNull(map.get("foo"));
assertFalse(map.containsKey("foo"));
map.put("foo", "bar");
assertTrue(map.size() == 1);
assertFalse(map.isEmpty());
assertNotNull(map.get("foo"));
assertTrue(map.containsKey("foo"));
assertTrue(map.containsValue("bar"));
assertEquals("bar", map.get("foo"));
map.remove("foo");
assertTrue(map.size() == 0);
assertNull(map.get("foo"));
}
public void testPutAll() {
Map all = new HashMap();
all.put("foo", "bar");
all.put("bar", "baz");
map.putAll(all);
assertTrue(map.size() == 2);
}
public void testEntrySet() {
map.put("foo", "bar");
map.put("bar", "baz");
Set entrySet = map.entrySet();
assertTrue(entrySet.size() == 2);
}
public void testKeySet() {
map.put("foo", "bar");
map.put("bar", "baz");
Set keySet = map.keySet();
assertTrue(keySet.size() == 2);
}
public void testValues() {
map.put("foo", "bar");
map.put("bar", "baz");
Collection values = map.values();
assertTrue(values.size() == 2);
}
}
......@@ -17,8 +17,8 @@ package org.springframework.web.context.request;
import java.util.Iterator;
import org.springframework.core.collection.StringKeyedMapAdapter;
import org.springframework.util.Assert;
import org.springframework.util.StringKeyedMapAdapter;
/**
* Map backed by a Web request parameter map for accessing request parameters.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册