You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2004/06/07 23:42:13 UTC

cvs commit: jakarta-commons/collections/src/java/org/apache/commons/collections/set ListOrderedSet.java

scolebourne    2004/06/07 14:42:13

  Modified:    collections RELEASE-NOTES.html
               collections/src/test/org/apache/commons/collections/set
                        TestAll.java TestListOrderedSet.java
               collections/src/java/org/apache/commons/collections/set
                        ListOrderedSet.java
  Added:       collections/src/test/org/apache/commons/collections/set
                        TestListOrderedSet2.java
  Log:
  Fix ListOrderedSet to add new factory and direct constructor
  
  Revision  Changes    Path
  1.57      +3 -0      jakarta-commons/collections/RELEASE-NOTES.html
  
  Index: RELEASE-NOTES.html
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/RELEASE-NOTES.html,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -u -r1.56 -r1.57
  --- RELEASE-NOTES.html	3 Jun 2004 22:59:56 -0000	1.56
  +++ RELEASE-NOTES.html	7 Jun 2004 21:42:12 -0000	1.57
  @@ -62,6 +62,8 @@
   <li>LRUMap - Add boolean flag, scanUntilRemovable, giving the removeLRU() method more power [28887]</li>
   <li>InvokerTransformer - Add additional getInstance() method</li>
   <li>Reduced inter-class and inter-package dependencies, especially via *Utils classes</li>
  +<li>ListOrderedSet - Add new factory method decorate(Set,List)</li>
  +<li>ListOrderedSet - Add constructor that uses a HashSet and ArrayList</li>
   </ul>
   
   <h4>Made Serializable</h4>
  @@ -93,6 +95,7 @@
   <li>EnumIterator/MapUtils - Changed enum references to enable JDK 1.5 compliance</li>
   <li>UnmodifiableSortedBag - Fix to ensure unmodifiable</li>
   <li>MultiHashMap - Fix copy constructor and clone to work properly [28972]</li>
  +<li>ListOrderedSet - Fix to throw IllegalArgumentException instead of NPE on null factory decorate(List)</li>
   </ul>
   
   <center><h3>JAVADOC</h3></center>
  
  
  
  1.9       +2 -1      jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestAll.java
  
  Index: TestAll.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestAll.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- TestAll.java	2 Jun 2004 22:12:14 -0000	1.8
  +++ TestAll.java	7 Jun 2004 21:42:12 -0000	1.9
  @@ -43,6 +43,7 @@
           
           suite.addTest(TestCompositeSet.suite());
           suite.addTest(TestListOrderedSet.suite());
  +        suite.addTest(TestListOrderedSet2.suite());
           suite.addTest(TestMapBackedSet.suite());
           suite.addTest(TestMapBackedSet2.suite());
           suite.addTest(TestPredicatedSet.suite());
  
  
  
  1.7       +25 -2     jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestListOrderedSet.java
  
  Index: TestListOrderedSet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestListOrderedSet.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- TestListOrderedSet.java	2 Jun 2004 22:12:14 -0000	1.6
  +++ TestListOrderedSet.java	7 Jun 2004 21:42:12 -0000	1.7
  @@ -165,7 +165,30 @@
           assertSame(TWO, set.get(2));
           assertSame(ONE, set.get(3));
       }
  -    
  +
  +    public void testDecorator() {
  +        try {
  +            ListOrderedSet.decorate((List) null);
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +        try {
  +            ListOrderedSet.decorate((Set) null);
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +        try {
  +            ListOrderedSet.decorate(null, null);
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +        try {
  +            ListOrderedSet.decorate(new HashSet(), null);
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +        try {
  +            ListOrderedSet.decorate(null, new ArrayList());
  +            fail();
  +        } catch (IllegalArgumentException ex) {}
  +    }
  +
       public String getCompatibilityVersion() {
           return "3.1";
       }
  
  
  
  1.1                  jakarta-commons/collections/src/test/org/apache/commons/collections/set/TestListOrderedSet2.java
  
  Index: TestListOrderedSet2.java
  ===================================================================
  /*
   *  Copyright 2004 The Apache Software Foundation
   *
   *  Licensed under the Apache License, Version 2.0 (the "License");
   *  you may not use this file except in compliance with the License.
   *  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   *  Unless required by applicable law or agreed to in writing, software
   *  distributed under the License is distributed on an "AS IS" BASIS,
   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   *  See the License for the specific language governing permissions and
   *  limitations under the License.
   */
  package org.apache.commons.collections.set;
  
  import java.util.ArrayList;
  import java.util.Iterator;
  import java.util.List;
  import java.util.Set;
  
  import junit.framework.Test;
  import junit.framework.TestSuite;
  
  /**
   * Extension of {@link TestSet} for exercising the {@link ListOrderedSet}
   * implementation.
   *
   * @since Commons Collections 3.1
   * @version $Revision: 1.1 $ $Date: 2004/06/07 21:42:12 $
   * 
   * @author Henning P. Schmiedehausen
   * @author Stephen Colebourne
   */
  public class TestListOrderedSet2 extends AbstractTestSet {
  
      public TestListOrderedSet2(String testName) {
          super(testName);
      }
  
      public static Test suite() {
          return new TestSuite(TestListOrderedSet2.class);
      }
  
      public static void main(String args[]) {
          String[] testCaseName = { TestListOrderedSet2.class.getName()};
          junit.textui.TestRunner.main(testCaseName);
      }
  
      public Set makeEmptySet() {
          return new ListOrderedSet();
      }
  
      protected Set setupSet() {
          Set set = makeEmptySet();
  
          for (int i = 0; i < 10; i++) {
              set.add(Integer.toString(i));
          }
          return set;
      }
  
      public void testOrdering() {
          Set set = setupSet();
          Iterator it = set.iterator();
  
          for (int i = 0; i < 10; i++) {
              assertEquals("Sequence is wrong", Integer.toString(i), it.next());
          }
  
          for (int i = 0; i < 10; i += 2) {
              assertTrue("Must be able to remove int", set.remove(Integer.toString(i)));
          }
  
          it = set.iterator();
          for (int i = 1; i < 10; i += 2) {
              assertEquals("Sequence is wrong after remove ", Integer.toString(i), it.next());
          }
  
          for (int i = 0; i < 10; i++) {
              set.add(Integer.toString(i));
          }
  
          assertEquals("Size of set is wrong!", 10, set.size());
  
          it = set.iterator();
          for (int i = 1; i < 10; i += 2) {
              assertEquals("Sequence is wrong", Integer.toString(i), it.next());
          }
          for (int i = 0; i < 10; i += 2) {
              assertEquals("Sequence is wrong", Integer.toString(i), it.next());
          }
      }
      
      private static final Integer ZERO = new Integer(0);
      private static final Integer ONE = new Integer(1);
      private static final Integer TWO = new Integer(2);
      private static final Integer THREE = new Integer(3);
      
      public void testListAddRemove() {
          ListOrderedSet set = (ListOrderedSet) makeEmptySet();
          List view = set.asList();
          set.add(ZERO);
          set.add(ONE);
          set.add(TWO);
          
          assertEquals(3, set.size());
          assertSame(ZERO, set.get(0));
          assertSame(ONE, set.get(1));
          assertSame(TWO, set.get(2));
          assertEquals(3, view.size());
          assertSame(ZERO, view.get(0));
          assertSame(ONE, view.get(1));
          assertSame(TWO, view.get(2));
          
          assertEquals(0, set.indexOf(ZERO));
          assertEquals(1, set.indexOf(ONE));
          assertEquals(2, set.indexOf(TWO));
          
          set.remove(1);
          assertEquals(2, set.size());
          assertSame(ZERO, set.get(0));
          assertSame(TWO, set.get(1));
          assertEquals(2, view.size());
          assertSame(ZERO, view.get(0));
          assertSame(TWO, view.get(1));
      }        
      
      public void testListAddIndexed() {
          ListOrderedSet set = (ListOrderedSet) makeEmptySet();
          List view = set.asList();
          set.add(ZERO);
          set.add(TWO);
          
          set.add(1, ONE);
          assertEquals(3, set.size());
          assertSame(ZERO, set.get(0));
          assertSame(ONE, set.get(1));
          assertSame(TWO, set.get(2));
          
          set.add(0, ONE);
          assertEquals(3, set.size());
          assertSame(ZERO, set.get(0));
          assertSame(ONE, set.get(1));
          assertSame(TWO, set.get(2));
          
          List list = new ArrayList();
          list.add(ZERO);
          list.add(TWO);
          
          set.addAll(0, list);
          assertEquals(3, set.size());
          assertSame(ZERO, set.get(0));
          assertSame(ONE, set.get(1));
          assertSame(TWO, set.get(2));
          
          list.add(0, THREE); // list = [3,0,2]
          set.remove(TWO);    //  set = [0,1]
          set.addAll(1, list);
          assertEquals(4, set.size());
          assertSame(ZERO, set.get(0));
          assertSame(THREE, set.get(1));
          assertSame(TWO, set.get(2));
          assertSame(ONE, set.get(3));
      }
      
      public String getCompatibilityVersion() {
          return "3.1";
      }
  
  //    public void testCreate() throws Exception {
  //        resetEmpty();
  //        writeExternalFormToDisk((java.io.Serializable) collection, "D:/dev/collections/data/test/ListOrderedSet.emptyCollection.version3.1.obj");
  //        resetFull();
  //        writeExternalFormToDisk((java.io.Serializable) collection, "D:/dev/collections/data/test/ListOrderedSet.fullCollection.version3.1.obj");
  //    }
  
  }
  
  
  
  1.9       +38 -2     jakarta-commons/collections/src/java/org/apache/commons/collections/set/ListOrderedSet.java
  
  Index: ListOrderedSet.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/set/ListOrderedSet.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ListOrderedSet.java	3 Jun 2004 22:02:13 -0000	1.8
  +++ ListOrderedSet.java	7 Jun 2004 21:42:12 -0000	1.9
  @@ -58,6 +58,28 @@
       protected final List setOrder;
   
       /**
  +     * Factory method to create an ordered set specifying the list and set to use.
  +     * 
  +     * @param set  the set to decorate, must be empty and not null
  +     * @param list  the list to decorate, must be empty and not null
  +     * @throws IllegalArgumentException if set or list is null
  +     * @throws IllegalArgumentException if either the set or list is not empty
  +     * @since Commons Collections 3.1
  +     */
  +    public static ListOrderedSet decorate(Set set, List list) {
  +        if (set == null) {
  +            throw new IllegalArgumentException("Set must not be null");
  +        }
  +        if (list == null) {
  +            throw new IllegalArgumentException("List must not be null");
  +        }
  +        if (set.size() > 0 || list.size() > 0) {
  +            throw new IllegalArgumentException("Set and List must be empty");
  +        }
  +        return new ListOrderedSet(set, list);
  +    }
  +
  +    /**
        * Factory method to create an ordered set.
        * <p>
        * An <code>ArrayList</code> is used to retain order.
  @@ -75,9 +97,12 @@
        * A <code>HashSet</code> is used for the set behaviour.
        * 
        * @param list  the list to decorate, must not be null
  -     * @throws IllegalArgumentException if set is null
  +     * @throws IllegalArgumentException if list is null
        */
       public static ListOrderedSet decorate(List list) {
  +        if (list == null) {
  +            throw new IllegalArgumentException("List must not be null");
  +        }
           Set set = new HashSet(list);
           list.retainAll(set);
           
  @@ -85,6 +110,17 @@
       }
   
       //-----------------------------------------------------------------------
  +    /**
  +     * Constructs a new empty <code>ListOrderedSet</code> using
  +     * a <code>HashSet</code> and an <code>ArrayList</code> internally.
  +     * 
  +     * @since Commons Collections 3.1
  +     */
  +    public ListOrderedSet() {
  +        super(new HashSet());
  +        setOrder = new ArrayList();
  +    }
  +
       /**
        * Constructor that wraps (not copies).
        * 
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org