Switched to using pure java Apache Zip implementation
[vamsas.git] / src / uk / ac / vamsas / objects / core / DataSetAnnotations.java
index 2d1c91a..861f0fe 100644 (file)
@@ -32,7 +32,7 @@ implements java.io.Serializable
      * annotation is associated with a
      *  particular dataset sequence 
      */
-    private java.lang.Object _seqRef;
+    private java.util.Vector _seqRef;
 
     /**
      * Field _provenance.
@@ -46,6 +46,7 @@ implements java.io.Serializable
 
     public DataSetAnnotations() {
         super();
+        this._seqRef = new java.util.Vector();
     }
 
 
@@ -54,6 +55,44 @@ implements java.io.Serializable
     //-----------/
 
     /**
+     * 
+     * 
+     * @param vSeqRef
+     * @throws java.lang.IndexOutOfBoundsException if the index
+     * given is outside the bounds of the collection
+     */
+    public void addSeqRef(
+            final java.lang.Object vSeqRef)
+    throws java.lang.IndexOutOfBoundsException {
+        this._seqRef.addElement(vSeqRef);
+    }
+
+    /**
+     * 
+     * 
+     * @param index
+     * @param vSeqRef
+     * @throws java.lang.IndexOutOfBoundsException if the index
+     * given is outside the bounds of the collection
+     */
+    public void addSeqRef(
+            final int index,
+            final java.lang.Object vSeqRef)
+    throws java.lang.IndexOutOfBoundsException {
+        this._seqRef.add(index, vSeqRef);
+    }
+
+    /**
+     * Method enumerateSeqRef.
+     * 
+     * @return an Enumeration over all java.lang.Object elements
+     */
+    public java.util.Enumeration enumerateSeqRef(
+    ) {
+        return this._seqRef.elements();
+    }
+
+    /**
      * Overrides the java.lang.Object.equals method.
      * 
      * @param obj
@@ -70,19 +109,51 @@ implements java.io.Serializable
         if (obj instanceof DataSetAnnotations) {
         
             DataSetAnnotations temp = (DataSetAnnotations)obj;
+            boolean thcycle;
+            boolean tmcycle;
             if (this._seqRef != null) {
                 if (temp._seqRef == null) return false;
-                else if (!(this._seqRef.equals(temp._seqRef))) 
-                    return false;
-            }
-            else if (temp._seqRef != null)
+                if (this._seqRef != temp._seqRef) {
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._seqRef);
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._seqRef);
+                    if (thcycle!=tmcycle) {
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._seqRef); };
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._seqRef); };
+                        return false;
+                    }
+                    if (!thcycle) {
+                        if (!this._seqRef.equals(temp._seqRef)) {
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._seqRef);
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._seqRef);
+                            return false;
+                        }
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._seqRef);
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._seqRef);
+                    }
+                }
+            } else if (temp._seqRef != null)
                 return false;
             if (this._provenance != null) {
                 if (temp._provenance == null) return false;
-                else if (!(this._provenance.equals(temp._provenance))) 
-                    return false;
-            }
-            else if (temp._provenance != null)
+                if (this._provenance != temp._provenance) {
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._provenance);
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._provenance);
+                    if (thcycle!=tmcycle) {
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._provenance); };
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._provenance); };
+                        return false;
+                    }
+                    if (!thcycle) {
+                        if (!this._provenance.equals(temp._provenance)) {
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._provenance);
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._provenance);
+                            return false;
+                        }
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._provenance);
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._provenance);
+                    }
+                }
+            } else if (temp._provenance != null)
                 return false;
             return true;
         }
@@ -100,18 +171,62 @@ implements java.io.Serializable
     }
 
     /**
-     * Returns the value of field 'seqRef'. The field 'seqRef' has
-     * the following description: annotation is associated with a
-     *  particular dataset sequence 
+     * Method getSeqRef.
      * 
-     * @return the value of field 'SeqRef'.
+     * @param index
+     * @throws java.lang.IndexOutOfBoundsException if the index
+     * given is outside the bounds of the collection
+     * @return the value of the java.lang.Object at the given index
      */
     public java.lang.Object getSeqRef(
+            final int index)
+    throws java.lang.IndexOutOfBoundsException {
+        // check bounds for index
+        if (index < 0 || index >= this._seqRef.size()) {
+            throw new IndexOutOfBoundsException("getSeqRef: Index value '" + index + "' not in range [0.." + (this._seqRef.size() - 1) + "]");
+        }
+        
+        return _seqRef.get(index);
+    }
+
+    /**
+     * Method getSeqRef.Returns the contents of the collection in
+     * an Array.  <p>Note:  Just in case the collection contents
+     * are changing in another thread, we pass a 0-length Array of
+     * the correct type into the API call.  This way we <i>know</i>
+     * that the Array returned is of exactly the correct length.
+     * 
+     * @return this collection as an Array
+     */
+    public java.lang.Object[] getSeqRef(
+    ) {
+        java.lang.Object[] array = new java.lang.Object[0];
+        return (java.lang.Object[]) this._seqRef.toArray(array);
+    }
+
+    /**
+     * Method getSeqRefAsReference.Returns a reference to
+     * '_seqRef'. No type checking is performed on any
+     * modifications to the Vector.
+     * 
+     * @return a reference to the Vector backing this class
+     */
+    public java.util.Vector getSeqRefAsReference(
     ) {
         return this._seqRef;
     }
 
     /**
+     * Method getSeqRefCount.
+     * 
+     * @return the size of this collection
+     */
+    public int getSeqRefCount(
+    ) {
+        return this._seqRef.size();
+    }
+
+    /**
      * Overrides the java.lang.Object.hashCode method.
      * <p>
      * The following steps came from <b>Effective Java Programming
@@ -124,11 +239,15 @@ implements java.io.Serializable
         int result = super.hashCode();
         
         long tmp;
-        if (_seqRef != null) {
+        if (_seqRef != null
+            && !org.castor.util.CycleBreaker.startingToCycle(_seqRef)) {
            result = 37 * result + _seqRef.hashCode();
+           org.castor.util.CycleBreaker.releaseCycleHandle(_seqRef);
         }
-        if (_provenance != null) {
+        if (_provenance != null
+            && !org.castor.util.CycleBreaker.startingToCycle(_provenance)) {
            result = 37 * result + _provenance.hashCode();
+           org.castor.util.CycleBreaker.releaseCycleHandle(_provenance);
         }
         
         return result;
@@ -182,6 +301,37 @@ implements java.io.Serializable
     }
 
     /**
+     */
+    public void removeAllSeqRef(
+    ) {
+        this._seqRef.clear();
+    }
+
+    /**
+     * Method removeSeqRef.
+     * 
+     * @param vSeqRef
+     * @return true if the object was removed from the collection.
+     */
+    public boolean removeSeqRef(
+            final java.lang.Object vSeqRef) {
+        boolean removed = _seqRef.remove(vSeqRef);
+        return removed;
+    }
+
+    /**
+     * Method removeSeqRefAt.
+     * 
+     * @param index
+     * @return the element removed from the collection
+     */
+    public java.lang.Object removeSeqRefAt(
+            final int index) {
+        java.lang.Object obj = this._seqRef.remove(index);
+        return obj;
+    }
+
+    /**
      * Sets the value of field 'provenance'.
      * 
      * @param provenance the value of field 'provenance'.
@@ -192,15 +342,64 @@ implements java.io.Serializable
     }
 
     /**
-     * Sets the value of field 'seqRef'. The field 'seqRef' has the
-     * following description: annotation is associated with a
-     *  particular dataset sequence 
      * 
-     * @param seqRef the value of field 'seqRef'.
+     * 
+     * @param index
+     * @param vSeqRef
+     * @throws java.lang.IndexOutOfBoundsException if the index
+     * given is outside the bounds of the collection
      */
     public void setSeqRef(
-            final java.lang.Object seqRef) {
-        this._seqRef = seqRef;
+            final int index,
+            final java.lang.Object vSeqRef)
+    throws java.lang.IndexOutOfBoundsException {
+        // check bounds for index
+        if (index < 0 || index >= this._seqRef.size()) {
+            throw new IndexOutOfBoundsException("setSeqRef: Index value '" + index + "' not in range [0.." + (this._seqRef.size() - 1) + "]");
+        }
+        
+        this._seqRef.set(index, vSeqRef);
+    }
+
+    /**
+     * 
+     * 
+     * @param vSeqRefArray
+     */
+    public void setSeqRef(
+            final java.lang.Object[] vSeqRefArray) {
+        //-- copy array
+        _seqRef.clear();
+        
+        for (int i = 0; i < vSeqRefArray.length; i++) {
+                this._seqRef.add(vSeqRefArray[i]);
+        }
+    }
+
+    /**
+     * Sets the value of '_seqRef' by copying the given Vector. All
+     * elements will be checked for type safety.
+     * 
+     * @param vSeqRefList the Vector to copy.
+     */
+    public void setSeqRef(
+            final java.util.Vector vSeqRefList) {
+        // copy vector
+        this._seqRef.clear();
+        
+        this._seqRef.addAll(vSeqRefList);
+    }
+
+    /**
+     * Sets the value of '_seqRef' by setting it to the given
+     * Vector. No type checking is performed.
+     * @deprecated
+     * 
+     * @param seqRefVector the Vector to set.
+     */
+    public void setSeqRefAsReference(
+            final java.util.Vector seqRefVector) {
+        this._seqRef = seqRefVector;
     }
 
     /**