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

[05/18] commons-collections git commit: to ease maintenance, removed all unreleased classes from the 1.x branch

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/03ef3163/src/java/org/apache/commons/collections/MultiMap.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/MultiMap.java b/src/java/org/apache/commons/collections/MultiMap.java
deleted file mode 100644
index f9eb99f..0000000
--- a/src/java/org/apache/commons/collections/MultiMap.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/MultiMap.java,v 1.2 2002/02/10 08:07:42 jstrachan Exp $
- * $Revision: 1.2 $
- * $Date: 2002/02/10 08:07:42 $
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-package org.apache.commons.collections;
-
-import java.util.Map;
-
-/** 
- * This is simply a Map with slightly different semantics.
- * Instead of returning an Object, it returns a Collection.
- * So for example, you can put( key, new Integer(1) ); 
- * and then a Object get( key ); will return you a Collection 
- * instead of an Integer.
- * Thus, this is simply a tag interface.
- *
- * @author Christopher Berry
- * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
- */
-public interface MultiMap extends Map {
-    
-    public Object remove( Object key, Object item );
-   
-}

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/03ef3163/src/java/org/apache/commons/collections/SequencedHashMap.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/SequencedHashMap.java b/src/java/org/apache/commons/collections/SequencedHashMap.java
deleted file mode 100644
index b6a76f6..0000000
--- a/src/java/org/apache/commons/collections/SequencedHashMap.java
+++ /dev/null
@@ -1,888 +0,0 @@
-/*
- * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/SequencedHashMap.java,v 1.3 2002/02/18 20:34:57 morgand Exp $
- * $Revision: 1.3 $
- * $Date: 2002/02/18 20:34:57 $
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-package org.apache.commons.collections;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.AbstractCollection;
-import java.util.AbstractMap;
-import java.util.AbstractSet;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.NoSuchElementException;
-
-/**
- *  A map of objects whose mapping entries are sequenced based on the order in
- *  which they were added.  This data structure has fast <I>O(1)</I> search
- *  time, deletion time, and insertion time.
- *
- *  This class inherits from {@link java.util.HashMap} purely for backwards
- *  compatibility.  It should really be inheriting from {@link
- *  java.util.AbstractMap}, or with a tiny extra bit of work, implement the
- *  full map interface on its own. APIs should not rely on this class being an
- *  actual {@link java.util.HashMap}, and instead should recognize it only as a
- *  generic {@link java.util.Map} (unless, of course, you need the sequencing
- *  functionality, but even in that case, this class should not be referred to
- *  as a java.util.HashMap).
- *
- *  <P>Although this map is sequenced, it cannot implement {@link
- *  java.util.List} because of incompatible interface definitions.  The remove
- *  methods in List and Map have different return values (see: {@link
- *  java.util.List#remove(Object)} and {@link java.util.Map#remove(Object)}).
- *
- *  <P>This class is not thread safe.  When a thread safe implementation is
- *  required, use {@link Collections#synchronizedMap(Map)} as it is documented,
- *  or use explicit synchronization controls.
- *
- *  @author <a href="mailto:michael@iammichael.org">Michael A. Smith</A>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- */
-public class SequencedHashMap extends HashMap {
-
-  /**
-   *  {@link java.util.Map.Entry} that doubles as a node in the linked list
-   *  of sequenced mappings.  
-   **/
-  private static class Entry implements Map.Entry {
-    // Note: This class cannot easily be made clonable.  While the actual
-    // implementation of a clone would be simple, defining the semantics is
-    // difficult.  If a shallow clone is implemented, then entry.next.prev !=
-    // entry, which is unintuitive and probably breaks all sorts of assumptions
-    // in code that uses this implementation.  If a deep clone is
-    // implementated, then what happens when the linked list is cyclical (as is
-    // the case with SequencedHashMap)?  It's impossible to know in the clone
-    // when to stop cloning, and thus you end up in a recursive loop,
-    // continuously cloning the "next" in the list.
-
-    private final Object key;
-    private Object value;
-    
-    // package private to allow the SequencedHashMap to access and manipulate
-    // them.
-    Entry next = null;
-    Entry prev = null;
-
-    public Entry(Object key, Object value) {
-      this.key = key;
-      this.value = value;
-    }
-
-    // per Map.Entry.getKey()
-    public Object getKey() { 
-      return this.key; 
-    }
-
-    // per Map.Entry.getValue()
-    public Object getValue() { 
-      return this.value; 
-    }
-
-    // per Map.Entry.setValue()
-    public Object setValue(Object value) { 
-      Object oldValue = this.value;
-      this.value = value; 
-      return oldValue;
-    }
-
-    public int hashCode() { 
-      // implemented per api docs for Map.Entry.hashCode()
-      return ((getKey() == null ? 0 : getKey().hashCode()) ^
-              (getValue()==null ? 0 : getValue().hashCode())); 
-    }
-
-    public boolean equals(Object obj) {
-      if(obj == null) return false;
-      if(obj == this) return true;
-      if(!(obj instanceof Map.Entry)) return false;
-
-      Map.Entry other = (Map.Entry)obj;
-
-      // implemented per api docs for Map.Entry.equals(Object) 
-      return((getKey() == null ?
-              other.getKey() == null : 
-              getKey().equals(other.getKey()))  &&
-             (getValue() == null ?
-              other.getValue() == null : 
-              getValue().equals(other.getValue())));
-    }
-    public String toString() {
-      return "[" + getKey() + "=" + getValue() + "]";
-    }
-  }
-
-  /**
-   *  Construct an empty sentinel used to hold the head (sentinel.next) and the
-   *  tail (sentinel.prev) of the list.  The sentinal has a <code>null</code>
-   *  key and value.
-   **/
-  private static final Entry createSentinel() {
-    Entry s = new Entry(null, null);
-    s.prev = s;
-    s.next = s;
-    return s;
-  }
-
-  /**
-   *  Sentinel used to hold the head and tail of the list of entries.
-   **/
-  private Entry sentinel;
-
-  /**
-   *  Map of keys to entries
-   **/
-  private HashMap entries;
-
-  /**
-   *  Construct a new sequenced hash map with default initial size and load
-   *  factor.
-   **/
-  public SequencedHashMap() {
-    sentinel = createSentinel();
-    entries = new HashMap();
-  }
-
-  /**
-   *  Construct a new sequenced hash map with the specified initial size and
-   *  default load factor.
-   *
-   *  @param initialSize the initial size for the hash table 
-   *
-   *  @see HashMap#HashMap(int)
-   **/
-  public SequencedHashMap(int initialSize) {
-    sentinel = createSentinel();
-    entries = new HashMap(initialSize);
-  }
-
-  /**
-   *  Construct a new sequenced hash map with the specified initial size and
-   *  load factor.
-   *
-   *  @param initialSize the initial size for the hash table 
-   *
-   *  @param loadFactor the load factor for the hash table.
-   *
-   *  @see HashMap#HashMap(int,float)
-   **/
-  public SequencedHashMap(int initialSize, float loadFactor) {
-    sentinel = createSentinel();
-    entries = new HashMap(initialSize, loadFactor);
-  }
-
-  /**
-   *  Construct a new sequenced hash map and add all the elements in the
-   *  specified map.  The order in which the mappings in the specified map are
-   *  added is defined by {@link #putAll(Map)}.  
-   **/
-  public SequencedHashMap(Map m) {
-    this();
-    putAll(m);
-  }
-
-  /**
-   *  Removes an internal entry from the linked list.  This does not remove
-   *  it from the underlying map.
-   **/
-  private void removeEntry(Entry entry) {
-    entry.next.prev = entry.prev;
-    entry.prev.next = entry.next;    
-  }
-
-  /**
-   *  Inserts a new internal entry to the tail of the linked list.  This does
-   *  not add the entry to the underlying map.
-   **/
-  private void insertEntry(Entry entry) {
-    entry.next = sentinel;
-    entry.prev = sentinel.prev;
-    sentinel.prev.next = entry;
-    sentinel.prev = entry;
-  }
-
-  // per Map.size()
-  public int size() {
-    // use the underlying Map's size since size is not maintained here.
-    return entries.size();
-  }
-
-  // per Map.isEmpty()
-  public boolean isEmpty() {
-    // for quick check whether the map is entry, we can check the linked list
-    // and see if there's anything in it.
-    return sentinel.next == sentinel;
-  }
-
-  // per Map.containsKey(Object)
-  public boolean containsKey(Object key) {
-    // pass on to underlying map implementation
-    return entries.containsKey(key);
-  }
-
-  // per Map.containsValue(Object)
-  public boolean containsValue(Object value) {
-    // unfortunately, we cannot just pass this call to the underlying map
-    // because we are mapping keys to entries, not keys to values.  The
-    // underlying map doesn't have an efficient implementation anyway, so this
-    // isn't a big deal.
-
-    // do null comparison outside loop so we only need to do it once.  This
-    // provides a tighter, more efficient loop at the expense of slight
-    // code duplication.
-    if(value == null) {
-      for(Entry pos = sentinel.next; pos != sentinel; pos = pos.next) {
-        if(pos.getValue() == null) return true;
-      } 
-    } else {
-      for(Entry pos = sentinel.next; pos != sentinel; pos = pos.next) {
-        if(value.equals(pos.getValue())) return true;
-      }
-    }
-    return false;      
-  }
-
-  // per Map.get(Object)
-  public Object get(Object o) {
-    // find entry for the specified key object
-    Entry entry = (Entry)entries.get(o);
-    if(entry == null) return null;
-      
-    return entry.getValue();
-  }
-
-  /**
-   *  Return the entry for the "oldest" mapping.  That is, return the Map.Entry
-   *  for the key-value pair that was first put into the map when compared to
-   *  all the other pairings in the map.  This behavior is equivalent to using
-   *  <code>entrySet().iterator().next()</code>, but this method provides an
-   *  optimized implementation.
-   *
-   *  @return The first entry in the sequence, or <code>null</code> if the
-   *  map is empty.
-   **/
-  public Map.Entry getFirst() {
-    // sentinel.next points to the "first" element of the sequence -- the head
-    // of the list, which is exactly the entry we need to return.  We must test
-    // for an empty list though because we don't want to return the sentinel!
-    return (isEmpty()) ? null : sentinel.next;
-  }
-
-  /**
-   *  Return the key for the "oldest" mapping.  That is, return the key for the
-   *  mapping that was first put into the map when compared to all the other
-   *  objects in the map.  This behavior is equivalent to using
-   *  <code>getFirst().getKey()</code>, but this method provides a slightly
-   *  optimized implementation.
-   *
-   *  @return The first key in the sequence, or <code>null</code> if the
-   *  map is empty.
-   **/
-  public Object getFirstKey() {
-    // sentinel.next points to the "first" element of the sequence -- the head
-    // of the list -- and the requisite key is returned from it.  An empty list
-    // does not need to be tested.  In cases where the list is empty,
-    // sentinel.next will point to the sentinel itself which has a null key,
-    // which is exactly what we would want to return if the list is empty (a
-    // nice convient way to avoid test for an empty list)
-    return sentinel.next.getKey();
-  }
-
-  /**
-   *  Return the value for the "oldest" mapping.  That is, return the value for
-   *  the mapping that was first put into the map when compared to all the
-   *  other objects in the map.  This behavior is equivalent to using
-   *  <code>getFirst().getValue()</code>, but this method provides a slightly
-   *  optimized implementation.
-   *
-   *  @return The first value in the sequence, or <code>null</code> if the
-   *  map is empty.
-   **/
-  public Object getFirstValue() {
-    // sentinel.next points to the "first" element of the sequence -- the head
-    // of the list -- and the requisite value is returned from it.  An empty
-    // list does not need to be tested.  In cases where the list is empty,
-    // sentinel.next will point to the sentinel itself which has a null value,
-    // which is exactly what we would want to return if the list is empty (a
-    // nice convient way to avoid test for an empty list)
-    return sentinel.next.getValue();
-  }
-
-  /**
-   *  Return the entry for the "newest" mapping.  That is, return the Map.Entry
-   *  for the key-value pair that was first put into the map when compared to
-   *  all the other pairings in the map.  The behavior is equivalent to:
-   *
-   *  <pre>
-   *    Object obj = null;
-   *    Iterator iter = entrySet().iterator();
-   *    while(iter.hasNext()) {
-   *      obj = iter.next();
-   *    }
-   *    return (Map.Entry)obj;
-   *  </pre>
-   *
-   *  However, the implementation of this method ensures an O(1) lookup of the
-   *  last key rather than O(n).
-   *
-   *  @return The last entry in the sequence, or <code>null</code> if the map
-   *  is empty.
-   **/
-  public Map.Entry getLast() {
-    // sentinel.prev points to the "last" element of the sequence -- the tail
-    // of the list, which is exactly the entry we need to return.  We must test
-    // for an empty list though because we don't want to return the sentinel!
-    return (isEmpty()) ? null : sentinel.prev;
-  }
-
-  /**
-   *  Return the key for the "newest" mapping.  That is, return the key for the
-   *  mapping that was last put into the map when compared to all the other
-   *  objects in the map.  This behavior is equivalent to using
-   *  <code>getLast().getKey()</code>, but this method provides a slightly
-   *  optimized implementation.
-   *
-   *  @return The last key in the sequence, or <code>null</code> if the map is
-   *  empty.
-   **/
-  public Object getLastKey() {
-    // sentinel.prev points to the "last" element of the sequence -- the tail
-    // of the list -- and the requisite key is returned from it.  An empty list
-    // does not need to be tested.  In cases where the list is empty,
-    // sentinel.prev will point to the sentinel itself which has a null key,
-    // which is exactly what we would want to return if the list is empty (a
-    // nice convient way to avoid test for an empty list)
-    return sentinel.prev.getKey();
-  }
-
-  /**
-   *  Return the value for the "newest" mapping.  That is, return the value for
-   *  the mapping that was last put into the map when compared to all the other
-   *  objects in the map.  This behavior is equivalent to using
-   *  <code>getLast().getValue()</code>, but this method provides a slightly
-   *  optimized implementation.
-   *
-   *  @return The last value in the sequence, or <code>null</code> if the map
-   *  is empty.
-   **/
-  public Object getLastValue() {
-    // sentinel.prev points to the "last" element of the sequence -- the tail
-    // of the list -- and the requisite value is returned from it.  An empty
-    // list does not need to be tested.  In cases where the list is empty,
-    // sentinel.prev will point to the sentinel itself which has a null value,
-    // which is exactly what we would want to return if the list is empty (a
-    // nice convient way to avoid test for an empty list)
-    return sentinel.prev.getValue();
-  }
-
-  // per Map.put(Object,Object)
-  public Object put(Object key, Object value) {
-
-    Object oldValue = null;
-
-    // lookup the entry for the specified key
-    Entry e = (Entry)entries.get(key);
-
-    // check to see if it already exists
-    if(e != null) {
-      // remove from list so the entry gets "moved" to the end of list
-      removeEntry(e);
-
-      // update value in map
-      oldValue = e.setValue(value);
-
-      // Note: We do not update the key here because its unnecessary.  We only
-      // do comparisons using equals(Object) and we know the specified key and
-      // that in the map are equal in that sense.  This may cause a problem if
-      // someone does not implement their hashCode() and/or equals(Object)
-      // method properly and then use it as a key in this map.  
-    } else {
-      // add new entry
-      e = new Entry(key, value);
-      entries.put(key, e);
-    }
-    // assert(entry in map, but not list)
-
-    // add to list
-    insertEntry(e);
-
-    return oldValue;
-  }
-
-  // per Map.remove(Object)
-  public Object remove(Object key) {
-    Entry e = (Entry)entries.remove(key);
-    if(e == null) return null;
-    removeEntry(e);
-    return e.getValue();
-  }
-
-  /**
-   *  Adds all the mappings in the specified map to this map, replacing any
-   *  mappings that already exist (as per {@link Map#putAll(Map)}).  The order
-   *  in which the entries are added is determined by the iterator returned
-   *  from {@link Map#entrySet()} for the specified map.
-   *
-   *  @param t the mappings that should be added to this map.
-   *
-   *  @exception NullPointerException if <code>t</code> is <code>null</code>
-   **/
-  public void putAll(Map t) {
-    Iterator iter = t.entrySet().iterator();
-    while(iter.hasNext()) {
-      Map.Entry entry = (Map.Entry)iter.next();
-      put(entry.getKey(), entry.getValue());
-    }
-  }
-
-  // per Map.clear()
-  public void clear() {
-    // remove all from the underlying map
-    entries.clear();
-
-    // and the list
-    sentinel.next = sentinel;
-    sentinel.prev = sentinel;
-  }
-
-  // per Map.keySet()
-  public Set keySet() {
-    return new AbstractSet() {
-
-      // required impls
-      public Iterator iterator() { return new OrderedIterator(KEY); }
-      public boolean remove(Object o) {
-        return SequencedHashMap.this.remove(o) != null;
-      }
-
-      // more efficient impls than abstract set
-      public void clear() { 
-        SequencedHashMap.this.clear(); 
-      }
-      public int size() { 
-        return SequencedHashMap.this.size(); 
-      }
-      public boolean isEmpty() { 
-        return SequencedHashMap.this.isEmpty(); 
-      }
-      public boolean contains(Object o) { 
-        return SequencedHashMap.this.containsKey(o);
-      }
-
-    };
-  }
-
-  // per Map.values()
-  public Collection values() {
-    return new AbstractCollection() {
-      // required impl
-      public Iterator iterator() { return new OrderedIterator(VALUE); }
-      public boolean remove(Object value) {
-        // do null comparison outside loop so we only need to do it once.  This
-        // provides a tighter, more efficient loop at the expense of slight
-        // code duplication.
-        if(value == null) {
-          for(Entry pos = sentinel.next; pos != sentinel; pos = pos.next) {
-            if(pos.getValue() == null) {
-              SequencedHashMap.this.remove(pos.getKey());
-              return true;
-            }
-          } 
-        } else {
-          for(Entry pos = sentinel.next; pos != sentinel; pos = pos.next) {
-            if(value.equals(pos.getValue())) {
-              SequencedHashMap.this.remove(pos.getKey());
-              return true;
-            }
-          }
-        }
-
-        return false;
-      }
-
-      // more efficient impls than abstract collection
-      public void clear() { 
-        SequencedHashMap.this.clear(); 
-      }
-      public int size() { 
-        return SequencedHashMap.this.size(); 
-      }
-      public boolean isEmpty() { 
-        return SequencedHashMap.this.isEmpty(); 
-      }
-      public boolean contains(Object o) {
-        return SequencedHashMap.this.containsValue(o);
-      }
-    };
-  }
-
-  // per Map.entrySet()
-  public Set entrySet() {
-    return new AbstractSet() {
-      // helper
-      private Entry findEntry(Object o) {
-        if(o == null) return null;
-        if(!(o instanceof Map.Entry)) return null;
-        
-        Map.Entry e = (Map.Entry)o;
-        Entry entry = (Entry)entries.get(e.getKey());
-        if(entry.equals(e)) return entry;
-        else return null;
-      }
-
-      // required impl
-      public Iterator iterator() { 
-        return new OrderedIterator(ENTRY); 
-      }
-      public boolean remove(Object o) {
-        Entry e = findEntry(o);
-        if(e == null) return false;
-
-        return SequencedHashMap.this.remove(e.getKey()) != null;
-      }        
-
-      // more efficient impls than abstract collection
-      public void clear() { 
-        SequencedHashMap.this.clear(); 
-      }
-      public int size() { 
-        return SequencedHashMap.this.size(); 
-      }
-      public boolean isEmpty() { 
-        return SequencedHashMap.this.isEmpty(); 
-      }
-      public boolean contains(Object o) {
-        return findEntry(o) != null;
-      }
-    };
-  }
-
-  // constants to define what the iterator should return on "next"
-  private static final int KEY = 0;
-  private static final int VALUE = 1;
-  private static final int ENTRY = 2;
-  private static final int REMOVED_MASK = 0x80000000;
-
-  private class OrderedIterator implements Iterator {
-    /** 
-     *  Holds the type that should be returned from the iterator.  The value
-     *  should be either {@link #KEY}, {@link #VALUE}, or {@link #ENTRY}.  To
-     *  save a tiny bit of memory, this field is also used as a marker for when
-     *  remove has been called on the current object to prevent a second remove
-     *  on the same element.  Essientially, if this value is negative (i.e. the
-     *  bit specified by {@link #REMOVED_MASK} is set), the current position
-     *  has been removed.  If positive, remove can still be called.
-     **/
-    private int returnType;
-
-    /**
-     *  Holds the "current" position in the iterator.  when pos.next is the
-     *  sentinel, we've reached the end of the list.
-     **/
-    private Entry pos = sentinel;
-    
-    /**
-     *  Construct an iterator over the sequenced elements in the order in which
-     *  they were added.  The {@link #next()} method returns the type specified
-     *  by <code>returnType</code> which must be either {@link #KEY}, {@link
-     *  #VALUE}, or {@link #ENTRY}.
-     **/
-    public OrderedIterator(int returnType) {
-      //// Since this is a private inner class, nothing else should have
-      //// access to the constructor.  Since we know the rest of the outer
-      //// class uses the iterator correctly, we can leave of the following
-      //// check:
-      //if(returnType >= 0 && returnType <= 2) {
-      //  throw new IllegalArgumentException("Invalid iterator type");
-      //}
-
-      // Set the "removed" bit so that the iterator starts in a state where
-      // "next" must be called before "remove" will succeed.
-      this.returnType = returnType | REMOVED_MASK;
-    }
-
-    /**
-     *  Returns whether there is any additional elements in the iterator to be
-     *  returned.
-     *
-     *  @return <code>true</code> if there are more elements left to be
-     *  returned from the iterator; <code>false</code> otherwise.
-     **/
-    public boolean hasNext() {
-      return pos.next != sentinel;
-    }
-
-    /**
-     *  Returns the next element from the iterator.
-     *
-     *  @return the next element from the iterator.
-     *
-     *  @exception NoSuchElementException if there are no more elements in the
-     *  iterator.
-     **/
-    public Object next() {
-      if(pos.next == sentinel) {
-        throw new NoSuchElementException();
-      }
-
-      // clear the "removed" flag
-      returnType = returnType & ~REMOVED_MASK;
-
-      pos = pos.next;
-      switch(returnType) {
-      case KEY:
-        return pos.getKey();
-      case VALUE:
-        return pos.getValue();
-      case ENTRY:
-        return pos;
-      default:
-        // should never happen
-        throw new Error("bad iterator type: " + returnType);
-      }
-
-    }
-    
-    /**
-     *  Removes the last element returned from the {@link #next()} method from
-     *  the sequenced map.
-     *
-     *  @exception IllegalStateException if there isn't a "last element" to be
-     *  removed.  That is, if {@link #next()} has never been called, or if
-     *  {@link #remove()} was already called on the element.
-     **/
-    public void remove() {
-      if((returnType & REMOVED_MASK) != 0) {
-        throw new IllegalStateException("remove() must follow next()");
-      }
-
-      // remove the entry
-      SequencedHashMap.this.remove(pos.getKey());
-
-      // set the removed flag
-      returnType = returnType | REMOVED_MASK;
-    }
-  }
-
-  // APIs maintained from previous version of SequencedHashMap for backwards
-  // compatibility
-
-  /**
-   * Creates a shallow copy of this object, preserving the internal structure
-   * by copying only references.  The keys and values themselves are not
-   * <code>clone()</code>'d.  The cloned object maintains the same sequence.
-   *
-   * @return A clone of this instance.  
-   */
-  public Object clone () {
-    // yes, calling super.clone() silly since we're just blowing away all
-    // the stuff that super might be doing anyway, but for motivations on
-    // this, see:
-    // http://www.javaworld.com/javaworld/jw-01-1999/jw-01-object.html
-    SequencedHashMap map = (SequencedHashMap)super.clone();
-
-    // create new, empty sentinel
-    map.sentinel = createSentinel();
-
-    // create a new, empty entry map
-    // note: this does not preserve the initial capacity and load factor.
-    map.entries = new HashMap();
-      
-    // add all the mappings
-    map.putAll(this);
-
-    // Note: We cannot just clone the hashmap and sentinel because we must
-    // duplicate our internal structures.  Cloning those two will not clone all
-    // the other entries they reference, and so the cloned hash map will not be
-    // able to maintain internal consistency because there are two objects with
-    // the same entries.  See discussion in the Entry implementation on why we
-    // cannot implement a clone of the Entry (and thus why we need to recreate
-    // everything).
-
-    return map;
-  }
-
-  /**
-   *  Returns the Map.Entry at the specified index
-   *
-   *  @exception ArrayIndexOutOfBoundsException if the specified index is
-   *  <code>&lt; 0</code> or <code>&gt;</code> the size of the map.
-   **/
-  private Map.Entry getEntry(int index) {
-    Entry pos = sentinel;
-
-    if(index < 0) {
-      throw new ArrayIndexOutOfBoundsException(index + " < 0");
-    }
-
-    // loop to one before the position
-    int i = -1;
-    while(i < (index-1) && pos.next != sentinel) {
-      i++;
-      pos = pos.next;
-    }
-    // pos.next is the requested position
-    
-    // if sentinel is next, past end of list
-    if(pos.next == sentinel) {
-      throw new ArrayIndexOutOfBoundsException(index + " >= " + (i + 1));
-    }
-
-    return pos.next;
-  }
-
-  /**
-   * Returns the key at the specified index.
-   *
-   *  @exception ArrayIndexOutOfBoundsException if the <code>index</code> is
-   *  <code>&lt; 0</code> or <code>&gt;</code> the size of the map.
-   */
-  public Object get (int index)
-  {
-    return getEntry(index).getKey();
-  }
-
-  /**
-   * Returns the value at the specified index.
-   *
-   *  @exception ArrayIndexOutOfBoundsException if the <code>index</code> is
-   *  <code>&lt; 0</code> or <code>&gt;</code> the size of the map.
-   */
-  public Object getValue (int index)
-  {
-    return getEntry(index).getValue();
-  }
-
-  /**
-   * Returns the index of the specified key.
-   */
-  public int indexOf (Object key)
-  {
-    Entry e = (Entry)entries.get(key);
-    int pos = 0;
-    while(e.prev != sentinel) {
-      pos++;
-      e = e.prev;
-    }
-    return pos;
-  }
-
-  /**
-   * Returns a key iterator.
-   */
-  public Iterator iterator ()
-  {
-    return keySet().iterator();
-  }
-
-  /**
-   * Returns the last index of the specified key.
-   */
-  public int lastIndexOf (Object key)
-  {
-    // keys in a map are guarunteed to be unique
-    return indexOf(key);
-  }
-
-  /**
-   * Returns a List view of the keys rather than a set view.  The returned
-   * list is unmodifiable.  This is required because changes to the values of
-   * the list (using {@link java.util.ListIterator#set(Object)}) will
-   * effectively remove the value from the list and reinsert that value at
-   * the end of the list, which is an unexpected side effect of changing the
-   * value of a list.  This occurs because changing the key, changes when the
-   * mapping is added to the map and thus where it appears in the list.
-   *
-   * <P>An alternative to this method is to use {@link #keySet()}
-   *
-   * @see #keySet()
-   * @return The ordered list of keys.  
-   */
-  public List sequence()
-  {
-    List l = new ArrayList(size());
-    Iterator iter = keySet().iterator();
-    while(iter.hasNext()) {
-      l.add(iter.next());
-    }
-      
-    return Collections.unmodifiableList(l);
-  }
-
-  /**
-   * Removes the element at the specified index.
-   *
-   * @param index The index of the object to remove.
-   * @return      The previous value coressponding the <code>key</code>, or
-   *              <code>null</code> if none existed.
-   *
-   * @exception ArrayIndexOutOfBoundsException if the <code>index</code> is
-   * <code>&lt; 0</code> or <code>&gt;</code> the size of the map.
-   */
-  public Object remove (int index)
-  {
-    return remove(get(index));
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/03ef3163/src/java/org/apache/commons/collections/SingletonIterator.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/SingletonIterator.java b/src/java/org/apache/commons/collections/SingletonIterator.java
deleted file mode 100644
index 61a3737..0000000
--- a/src/java/org/apache/commons/collections/SingletonIterator.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/Attic/SingletonIterator.java,v 1.2 2002/02/10 08:07:42 jstrachan Exp $
- * $Revision: 1.2 $
- * $Date: 2002/02/10 08:07:42 $
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-package org.apache.commons.collections;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/** <p><code>SingleIterator</code> is an {@link Iterator} over a single 
-  * object instance.</p>
-  *
-  * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
-  * @version $Revision: 1.2 $
-  */
-public class SingletonIterator implements Iterator {
-
-    private boolean first = true;
-    private Object object;
-    
-    public SingletonIterator(Object object) {
-        this.object = object;
-    }
-
-    public boolean hasNext() {
-        return first;
-    }
-
-    public Object next() {
-        if (! first ) {
-            throw new NoSuchElementException();
-        }
-        Object answer = object;
-        object = null;
-        first = false;
-        return answer;
-    }
-
-    public void remove() {
-        throw new UnsupportedOperationException( "remove() is not supported by this iterator" );
-    }
-}

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/03ef3163/src/java/org/apache/commons/collections/SortedBag.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/SortedBag.java b/src/java/org/apache/commons/collections/SortedBag.java
deleted file mode 100644
index 7c6da63..0000000
--- a/src/java/org/apache/commons/collections/SortedBag.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/SortedBag.java,v 1.2 2002/02/10 08:07:42 jstrachan Exp $
- * $Revision: 1.2 $
- * $Date: 2002/02/10 08:07:42 $
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-package org.apache.commons.collections;
-
-import java.util.Comparator;
-
-/**
- * A type of {@link Bag} that maintains order among its unique
- * representative members.
- * @author Chuck Burdick
- **/
-public interface SortedBag extends Bag {
-
-   /**
-    * Returns the comparator associated with this sorted set, or null
-    * if it uses its elements' natural ordering.
-    **/
-   public Comparator comparator();
-
-   /**
-    * Returns the first (lowest) member.
-    **/
-   public Object first();
-
-   /**
-    * Returns the last (highest) member.
-    **/
-   public Object last();
-}

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/03ef3163/src/java/org/apache/commons/collections/TreeBag.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/commons/collections/TreeBag.java b/src/java/org/apache/commons/collections/TreeBag.java
deleted file mode 100644
index 64760dc..0000000
--- a/src/java/org/apache/commons/collections/TreeBag.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/java/org/apache/commons/collections/TreeBag.java,v 1.2 2002/02/10 08:07:42 jstrachan Exp $
- * $Revision: 1.2 $
- * $Date: 2002/02/10 08:07:42 $
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-package org.apache.commons.collections;
-
-import java.util.Collection;
-import java.util.Comparator;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-/**
- * An implementation of {@link Bag} that is backed by a {@link
- * TreeMap}. Order will be maintained among the unique representative
- * members.
- *
- * @author Chuck Burdick
- **/
-public class TreeBag extends AbstractBag implements SortedBag, Bag {
-   public TreeBag() {
-      setMap(new TreeMap());
-   }
-
-   /**
-    * New {@link Bag} that maintains order on its unique
-    * representative members according to the given {@link
-    * Comparator}.
-    **/
-   public TreeBag(Comparator c) {
-      setMap(new TreeMap(c));
-   }
-
-   /**
-    * New {@link Bag} containing all the members of the given
-    * collection.
-    * @see #addAll
-    **/
-   public TreeBag(Collection c) {
-      this();
-      addAll(c);
-   }
-
-   public Object first() {
-      return ((SortedMap)getMap()).firstKey();
-   }
-
-   public Object last() {
-      return ((SortedMap)getMap()).lastKey();
-   }
-
-   public Comparator comparator() {
-      return ((SortedMap)getMap()).comparator();
-   }
-}
-
-
-
-
-
-

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/03ef3163/src/test/org/apache/commons/collections/TestAll.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/TestAll.java b/src/test/org/apache/commons/collections/TestAll.java
index f3107d9..dc87876 100644
--- a/src/test/org/apache/commons/collections/TestAll.java
+++ b/src/test/org/apache/commons/collections/TestAll.java
@@ -1,7 +1,7 @@
 /*
- * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestAll.java,v 1.15 2002/02/13 20:59:12 morgand Exp $
- * $Revision: 1.15 $
- * $Date: 2002/02/13 20:59:12 $
+ * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/TestAll.java,v 1.15.2.1 2002/02/26 00:58:29 morgand Exp $
+ * $Revision: 1.15.2.1 $
+ * $Date: 2002/02/26 00:58:29 $
  *
  * ====================================================================
  *
@@ -66,7 +66,7 @@ import junit.framework.*;
 /**
  * Entry point for all Collections tests.
  * @author Rodney Waldhoff
- * @version $Id: TestAll.java,v 1.15 2002/02/13 20:59:12 morgand Exp $
+ * @version $Id: TestAll.java,v 1.15.2.1 2002/02/26 00:58:29 morgand Exp $
  */
 public class TestAll extends TestCase {
     public TestAll(String testName) {
@@ -88,14 +88,8 @@ public class TestAll extends TestCase {
         suite.addTest(TestFastHashMap1.suite());
         suite.addTest(TestFastTreeMap.suite());
         suite.addTest(TestFastTreeMap1.suite());
-        suite.addTest(TestHashBag.suite());
         suite.addTest(TestHashMap.suite());
-        suite.addTest(TestMultiHashMap.suite());
-        suite.addTest(TestSequencedHashMap.suite());
-        suite.addTest(TestSingletonIterator.suite());
-        suite.addTest(TestTreeBag.suite());
         suite.addTest(TestTreeMap.suite());
-        suite.addTest(TestDoubleOrderedMap.suite());
         suite.addTest(TestLRUMap.suite());
         return suite;
     }

http://git-wip-us.apache.org/repos/asf/commons-collections/blob/03ef3163/src/test/org/apache/commons/collections/TestBag.java
----------------------------------------------------------------------
diff --git a/src/test/org/apache/commons/collections/TestBag.java b/src/test/org/apache/commons/collections/TestBag.java
deleted file mode 100644
index 1f3c17c..0000000
--- a/src/test/org/apache/commons/collections/TestBag.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//collections/src/test/org/apache/commons/collections/Attic/TestBag.java,v 1.1 2001/08/29 15:28:07 jstrachan Exp $
- * $Revision: 1.1 $
- * $Date: 2001/08/29 15:28:07 $
- *
- * ====================================================================
- *
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution, if
- *    any, must include the following acknowlegement:
- *       "This product includes software developed by the
- *        Apache Software Foundation (http://www.apache.org/)."
- *    Alternately, this acknowlegement may appear in the software itself,
- *    if and wherever such third-party acknowlegements normally appear.
- *
- * 4. The names "The Jakarta Project", "Commons", and "Apache Software
- *    Foundation" must not be used to endorse or promote products derived
- *    from this software without prior written permission. For written
- *    permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache"
- *    nor may "Apache" appear in their names without prior written
- *    permission of the Apache Group.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation.  For more
- * information on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- *
- */
-
-package org.apache.commons.collections;
-
-import junit.framework.*;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.ConcurrentModificationException;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Tests base {@link Bag} methods and contracts.
- * <p>
- * To use, simply extend this class, and implement
- * the {@link #makeBag} method.
- * <p>
- * If your {@link Bag} fails one of these tests by design,
- * you may still use this base set of cases.  Simply override the
- * test case (method) your {@link Bag} fails.
- *
- * @author Chuck Burdick
- * @version $Id: TestBag.java,v 1.1 2001/08/29 15:28:07 jstrachan Exp $
- */
-public abstract class TestBag extends TestCollection {
-    public TestBag(String testName) {
-        super(testName);
-    }
-
-    /**
-     * Return a new, empty {@link Bag} to used for testing.
-     */
-    public abstract Bag makeBag();
-
-    public Collection makeCollection() {
-        return makeBag();
-    }
-
-    public void testBagAdd() {
-        Bag bag = makeBag();
-        bag.add("A");
-        assertTrue("Should contain 'A'", bag.contains("A"));
-        assertEquals("Should have count of 1",
-                     1, bag.getCount("A"));
-        bag.add("A");
-        assertTrue("Should contain 'A'", bag.contains("A"));
-        assertEquals("Should have count of 2",
-                     2, bag.getCount("A"));
-        bag.add("B");
-        assertTrue(bag.contains("A"));
-        assertTrue(bag.contains("B"));
-    }
-
-    public void testBagEqualsSelf() {
-        Bag bag = makeBag();
-        assertTrue(bag.equals(bag));
-        bag.add("elt");
-        assertTrue(bag.equals(bag));
-        bag.add("elt"); // again
-        assertTrue(bag.equals(bag));
-        bag.add("elt2");
-        assertTrue(bag.equals(bag));
-    }
-
-   public void testRemove() {
-      Bag bag = makeBag();
-      bag.add("A");
-      assertEquals("Should have count of 1", 1, bag.getCount("A"));
-      bag.remove("A");
-      assertEquals("Should have count of 0", 0, bag.getCount("A"));
-      bag.add("A");
-      bag.add("A");
-      bag.add("A");
-      bag.add("A");
-      assertEquals("Should have count of 4", 4, bag.getCount("A"));
-      bag.remove("A", 0);
-      assertEquals("Should have count of 4", 4, bag.getCount("A"));
-      bag.remove("A", 2);
-      assertEquals("Should have count of 2", 2, bag.getCount("A"));
-      bag.remove("A");
-      assertEquals("Should have count of 0", 0, bag.getCount("A"));
-   }
-
-   public void testRemoveAll() {
-      Bag bag = makeBag();
-      bag.add("A", 2);
-      assertEquals("Should have count of 2", 2, bag.getCount("A"));
-      bag.add("B");
-      bag.add("C");
-      assertEquals("Should have count of 4", 4, bag.size());
-      List delete = new ArrayList();
-      delete.add("A");
-      delete.add("B");
-      bag.removeAll(delete);
-      assertEquals("Should have count of 1", 1, bag.getCount("A"));
-      assertEquals("Should have count of 0", 0, bag.getCount("B"));
-      assertEquals("Should have count of 1", 1, bag.getCount("C"));
-      assertEquals("Should have count of 2", 2, bag.size());
-   }
-
-   public void testContains() {
-      Bag bag = makeBag();
-      bag.add("A");
-      bag.add("A");
-      bag.add("A");
-      bag.add("B");
-      bag.add("B");
-      List compare = new ArrayList();
-      compare.add("A");
-      compare.add("B");
-      assertEquals("Other list has 1 'B'", 1,
-                 (new HashBag(compare)).getCount("B"));
-      assertTrue("Bag has at least 1 'B'", 1 <= bag.getCount("B"));
-      assertTrue("Bag contains items in the list", bag.containsAll(compare));
-      compare.add("A");
-      compare.add("B");
-      assertEquals("Other list has 2 'B'", 2,
-                 (new HashBag(compare)).getCount("B"));
-      assertTrue("Bag has at least 2 'B'", 2 <= bag.getCount("B"));
-      assertTrue("Bag contains items in the list", bag.containsAll(compare));
-      compare.add("A");
-      compare.add("B");
-      assertEquals("Other list has 3 'B'", 3,
-                 (new HashBag(compare)).getCount("B"));
-      assertTrue("Bag does not have 3 'B'", 3 > bag.getCount("B"));
-      assertTrue("Bag contains items in the list", !bag.containsAll(compare));
-   }
-
-   public void testSize() {
-      Bag bag = makeBag();
-      bag.add("A");
-      bag.add("A");
-      bag.add("A");
-      bag.add("B");
-      bag.add("B");
-      assertEquals("Should have 5 total items", 5, bag.size());
-      bag.remove("A", 2);
-      assertEquals("Should have 1 'A'", 1, bag.getCount("A"));
-      assertEquals("Should have 3 total items", 3, bag.size());
-      bag.remove("B");
-      assertEquals("Should have 1 total item", 1, bag.size());
-   }
-
-   public void testRetainAll() {
-      Bag bag = makeBag();
-      bag.add("A");
-      bag.add("A");
-      bag.add("A");
-      bag.add("B");
-      bag.add("B");
-      bag.add("C");
-      List retains = new ArrayList();
-      retains.add("B");
-      retains.add("C");
-      bag.retainAll(retains);
-      assertEquals("Should have 2 total items", 2, bag.size());
-   }
-
-   public void testIterator() {
-      Bag bag = makeBag();
-      bag.add("A");
-      bag.add("A");
-      bag.add("B");
-      assertEquals("Bag should have 3 items", 3, bag.size());
-      Iterator i = bag.iterator();
-      assertEquals("First should be 'A'", "A", i.next());
-      assertEquals("Second should be 'A'", "A", i.next());
-      i.remove();
-      assertEquals("Third should be 'B'", "B", i.next());
-      assertTrue("Should have no more", !i.hasNext());
-      assertEquals("Bag should have 2 items", 2, bag.size());
-      assertEquals("Bag should have 1 'A'", 1, bag.getCount("A"));
-   }
-
-   public void testIteratorFail() {
-      Bag bag = makeBag();
-      bag.add("A");
-      bag.add("A");
-      bag.add("B");
-      Iterator i = bag.iterator();
-      assertEquals("First should be 'A'", "A", i.next());
-      bag.remove("A");
-      try {
-         i.next();
-         fail("Should throw ConcurrentModificationException");
-      } catch (ConcurrentModificationException e) {
-         // expected
-      }
-   }
-}
-
-