scolebourne    2003/12/02 16:49:38

  Modified:    collections/src/java/org/apache/commons/collections/bag
                        TreeBag.java AbstractMapBag.java HashBag.java
               collections/src/test/org/apache/commons/collections/bag
                        TestTreeBag.java TestHashBag.java
  Added:       collections/data/test TreeBag.fullCollection.version3.obj
                        HashBag.emptyCollection.version3.obj
                        HashBag.fullCollection.version3.obj
                        TreeBag.emptyCollection.version3.obj
  Log:
  Make new Bag implementations Serializable
  
  Revision  Changes    Path
  1.2       +30 -3     
jakarta-commons/collections/src/java/org/apache/commons/collections/bag/TreeBag.java
  
  Index: TreeBag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/bag/TreeBag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TreeBag.java      2 Dec 2003 23:36:12 -0000       1.1
  +++ TreeBag.java      3 Dec 2003 00:49:38 -0000       1.2
  @@ -57,6 +57,10 @@
    */
   package org.apache.commons.collections.bag;
   
  +import java.io.IOException;
  +import java.io.ObjectInputStream;
  +import java.io.ObjectOutputStream;
  +import java.io.Serializable;
   import java.util.Collection;
   import java.util.Comparator;
   import java.util.SortedMap;
  @@ -77,8 +81,11 @@
    * @author Chuck Burdick
    * @author Stephen Colebourne
    */
  -public class TreeBag extends AbstractMapBag implements SortedBag {
  +public class TreeBag extends AbstractMapBag implements SortedBag, Serializable {
   
  +    /** Serial version lock */
  +    static final long serialVersionUID = -7740146511091606676L;
  +    
       /**
        * Constructs an empty <code>TreeBag</code>.
        */
  @@ -107,6 +114,7 @@
           addAll(coll);
       }
   
  +    //-----------------------------------------------------------------------
       public Object first() {
           return ((SortedMap) getMap()).firstKey();
       }
  @@ -117,6 +125,25 @@
   
       public Comparator comparator() {
           return ((SortedMap) getMap()).comparator();
  +    }
  +
  +    //-----------------------------------------------------------------------
  +    /**
  +     * Write the bag out using a custom routine.
  +     */
  +    private void writeObject(ObjectOutputStream out) throws IOException {
  +        out.defaultWriteObject();
  +        out.writeObject(comparator());
  +        super.doWriteObject(out);
  +    }
  +
  +    /**
  +     * Read the bag in using a custom routine.
  +     */
  +    private void readObject(ObjectInputStream in) throws IOException, 
ClassNotFoundException {
  +        in.defaultReadObject();
  +        Comparator comp = (Comparator) in.readObject();
  +        super.doReadObject(new TreeMap(comp), in);
       }
       
   }
  
  
  
  1.2       +42 -4     
jakarta-commons/collections/src/java/org/apache/commons/collections/bag/AbstractMapBag.java
  
  Index: AbstractMapBag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/bag/AbstractMapBag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractMapBag.java       2 Dec 2003 23:36:12 -0000       1.1
  +++ AbstractMapBag.java       3 Dec 2003 00:49:38 -0000       1.2
  @@ -57,6 +57,9 @@
    */
   package org.apache.commons.collections.bag;
   
  +import java.io.IOException;
  +import java.io.ObjectInputStream;
  +import java.io.ObjectOutputStream;
   import java.lang.reflect.Array;
   import java.util.Collection;
   import java.util.Collections;
  @@ -86,7 +89,7 @@
   public abstract class AbstractMapBag implements Bag {
       
       /** The map to use to store the data */
  -    private final Map map;
  +    private transient Map map;
       /** The current total size of the bag */
       private int size;
       /** The modification count for fail fast iterators */
  @@ -95,8 +98,17 @@
       private transient Set uniqueSet;
   
       /**
  +     * Constructor needed for subclass serialisation.
  +     * 
  +     * @param map  the map to assign
  +     */
  +    protected AbstractMapBag() {
  +        super();
  +    }
  +
  +    /**
        * Constructor that assigns the specified Map as the backing store.
  -     * The map must be empty.
  +     * The map must be empty and non-null.
        * 
        * @param map  the map to assign
        */
  @@ -530,6 +542,32 @@
           return uniqueSet;
       }
   
  +    //-----------------------------------------------------------------------
  +    /**
  +     * Write the map out using a custom routine.
  +     */
  +    protected void doWriteObject(ObjectOutputStream out) throws IOException {
  +        out.writeInt(map.size());
  +        for (Iterator it = map.entrySet().iterator(); it.hasNext();) {
  +            Map.Entry entry = (Map.Entry) it.next();
  +            out.writeObject(entry.getKey());
  +            out.writeInt(((MutableInteger) entry.getValue()).value);
  +        }
  +    }
  +
  +    /**
  +     * Read the map in using a custom routine.
  +     */
  +    protected void doReadObject(Map map, ObjectInputStream in) throws IOException, 
ClassNotFoundException {
  +        this.map = map;
  +        int entrySize = in.readInt();
  +        for (int i = 0; i < entrySize; i++) {
  +            Object key = in.readObject();
  +            int value = in.readInt();
  +            map.put(key, new MutableInteger(value));
  +        }
  +    }
  +    
       //-----------------------------------------------------------------------
       /**
        * Returns true if the given object is not null, has the precise type 
  
  
  
  1.2       +29 -5     
jakarta-commons/collections/src/java/org/apache/commons/collections/bag/HashBag.java
  
  Index: HashBag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/collections/src/java/org/apache/commons/collections/bag/HashBag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- HashBag.java      2 Dec 2003 23:36:12 -0000       1.1
  +++ HashBag.java      3 Dec 2003 00:49:38 -0000       1.2
  @@ -57,6 +57,10 @@
    */
   package org.apache.commons.collections.bag;
   
  +import java.io.IOException;
  +import java.io.ObjectInputStream;
  +import java.io.ObjectOutputStream;
  +import java.io.Serializable;
   import java.util.Collection;
   import java.util.HashMap;
   
  @@ -72,17 +76,20 @@
    * @author Chuck Burdick
    * @author Stephen Colebourne
    */
  -public class HashBag extends AbstractMapBag implements Bag {
  +public class HashBag extends AbstractMapBag implements Bag, Serializable {
   
  +    /** Serial version lock */
  +    static final long serialVersionUID = -6561115435802554013L;
  +    
       /**
  -     * Constructs an empty <Code>HashBag</Code>.
  +     * Constructs an empty <code>HashBag</code>.
        */
       public HashBag() {
           super(new HashMap());
       }
   
       /**
  -     * Constructs a [EMAIL PROTECTED] Bag} containing all the members of the given 
collection.
  +     * Constructs a bag containing all the members of the given collection.
        * 
        * @param coll  a collection to copy into this bag
        */
  @@ -91,4 +98,21 @@
           addAll(coll);
       }
   
  +    //-----------------------------------------------------------------------
  +    /**
  +     * Write the bag out using a custom routine.
  +     */
  +    private void writeObject(ObjectOutputStream out) throws IOException {
  +        out.defaultWriteObject();
  +        super.doWriteObject(out);
  +    }
  +
  +    /**
  +     * Read the bag in using a custom routine.
  +     */
  +    private void readObject(ObjectInputStream in) throws IOException, 
ClassNotFoundException {
  +        in.defaultReadObject();
  +        super.doReadObject(new HashMap(), in);
  +    }
  +    
   }
  
  
  
  1.1                  
jakarta-commons/collections/data/test/TreeBag.fullCollection.version3.obj
  
        <<Binary file>>
  
  
  1.1                  
jakarta-commons/collections/data/test/HashBag.emptyCollection.version3.obj
  
        <<Binary file>>
  
  
  1.1                  
jakarta-commons/collections/data/test/HashBag.fullCollection.version3.obj
  
        <<Binary file>>
  
  
  1.1                  
jakarta-commons/collections/data/test/TreeBag.emptyCollection.version3.obj
  
        <<Binary file>>
  
  
  1.2       +18 -2     
jakarta-commons/collections/src/test/org/apache/commons/collections/bag/TestTreeBag.java
  
  Index: TestTreeBag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/bag/TestTreeBag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestTreeBag.java  2 Dec 2003 23:36:12 -0000       1.1
  +++ TestTreeBag.java  3 Dec 2003 00:49:38 -0000       1.2
  @@ -112,4 +112,20 @@
         assertEquals("Should get last key",
                      "D", ((SortedBag)bag).last());
      }
  +   
  +   public String getCompatibilityVersion() {
  +       return "3";
  +   }
  +    
  +//   public void testCreate() throws Exception {
  +//       Bag bag = makeBag();
  +//       writeExternalFormToDisk((Serializable) bag, 
"D:/dev/collections/data/test/TreeBag.emptyCollection.version3.obj");
  +//       bag = makeBag();
  +//       bag.add("A");
  +//       bag.add("A");
  +//       bag.add("B");
  +//       bag.add("B");
  +//       bag.add("C");
  +//       writeExternalFormToDisk((Serializable) bag, 
"D:/dev/collections/data/test/TreeBag.fullCollection.version3.obj");
  +//   }
   }
  
  
  
  1.2       +17 -2     
jakarta-commons/collections/src/test/org/apache/commons/collections/bag/TestHashBag.java
  
  Index: TestHashBag.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/collections/src/test/org/apache/commons/collections/bag/TestHashBag.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestHashBag.java  2 Dec 2003 23:36:12 -0000       1.1
  +++ TestHashBag.java  3 Dec 2003 00:49:38 -0000       1.2
  @@ -89,4 +89,19 @@
           return new HashBag();
       }
       
  +    public String getCompatibilityVersion() {
  +        return "3";
  +    }
  +    
  +//    public void testCreate() throws Exception {
  +//        Bag bag = makeBag();
  +//        writeExternalFormToDisk((Serializable) bag, 
"D:/dev/collections/data/test/HashBag.emptyCollection.version3.obj");
  +//        bag = makeBag();
  +//        bag.add("A");
  +//        bag.add("A");
  +//        bag.add("B");
  +//        bag.add("B");
  +//        bag.add("C");
  +//        writeExternalFormToDisk((Serializable) bag, 
"D:/dev/collections/data/test/HashBag.fullCollection.version3.obj");
  +//    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to