sequence mappings and DbRef mapping objects unified and source binding for castor...
[vamsas.git] / src / uk / ac / vamsas / objects / core / DataSet.java
index cdc1dc1..ae4506b 100644 (file)
@@ -294,54 +294,161 @@ implements java.io.Serializable
         if (obj instanceof DataSet) {
         
             DataSet temp = (DataSet)obj;
+            boolean thcycle;
+            boolean tmcycle;
             if (this._id != null) {
                 if (temp._id == null) return false;
-                else if (!(this._id.equals(temp._id))) 
-                    return false;
-            }
-            else if (temp._id != null)
+                if (this._id != temp._id) {
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._id);
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._id);
+                    if (thcycle!=tmcycle) {
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._id); };
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._id); };
+                        return false;
+                    }
+                    if (!thcycle) {
+                        if (!this._id.equals(temp._id)) {
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._id);
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._id);
+                            return false;
+                        }
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._id);
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._id);
+                    }
+                }
+            } else if (temp._id != null)
                 return false;
             if (this._sequenceList != null) {
                 if (temp._sequenceList == null) return false;
-                else if (!(this._sequenceList.equals(temp._sequenceList))) 
-                    return false;
-            }
-            else if (temp._sequenceList != null)
+                if (this._sequenceList != temp._sequenceList) {
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._sequenceList);
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._sequenceList);
+                    if (thcycle!=tmcycle) {
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._sequenceList); };
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._sequenceList); };
+                        return false;
+                    }
+                    if (!thcycle) {
+                        if (!this._sequenceList.equals(temp._sequenceList)) {
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._sequenceList);
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._sequenceList);
+                            return false;
+                        }
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._sequenceList);
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._sequenceList);
+                    }
+                }
+            } else if (temp._sequenceList != null)
                 return false;
             if (this._sequenceMappingList != null) {
                 if (temp._sequenceMappingList == null) return false;
-                else if (!(this._sequenceMappingList.equals(temp._sequenceMappingList))) 
-                    return false;
-            }
-            else if (temp._sequenceMappingList != null)
+                if (this._sequenceMappingList != temp._sequenceMappingList) {
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._sequenceMappingList);
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._sequenceMappingList);
+                    if (thcycle!=tmcycle) {
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._sequenceMappingList); };
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._sequenceMappingList); };
+                        return false;
+                    }
+                    if (!thcycle) {
+                        if (!this._sequenceMappingList.equals(temp._sequenceMappingList)) {
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._sequenceMappingList);
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._sequenceMappingList);
+                            return false;
+                        }
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._sequenceMappingList);
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._sequenceMappingList);
+                    }
+                }
+            } else if (temp._sequenceMappingList != null)
                 return false;
             if (this._dataSetAnnotationsList != null) {
                 if (temp._dataSetAnnotationsList == null) return false;
-                else if (!(this._dataSetAnnotationsList.equals(temp._dataSetAnnotationsList))) 
-                    return false;
-            }
-            else if (temp._dataSetAnnotationsList != null)
+                if (this._dataSetAnnotationsList != temp._dataSetAnnotationsList) {
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._dataSetAnnotationsList);
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._dataSetAnnotationsList);
+                    if (thcycle!=tmcycle) {
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._dataSetAnnotationsList); };
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._dataSetAnnotationsList); };
+                        return false;
+                    }
+                    if (!thcycle) {
+                        if (!this._dataSetAnnotationsList.equals(temp._dataSetAnnotationsList)) {
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._dataSetAnnotationsList);
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._dataSetAnnotationsList);
+                            return false;
+                        }
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._dataSetAnnotationsList);
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._dataSetAnnotationsList);
+                    }
+                }
+            } else if (temp._dataSetAnnotationsList != null)
                 return false;
             if (this._alignmentList != null) {
                 if (temp._alignmentList == null) return false;
-                else if (!(this._alignmentList.equals(temp._alignmentList))) 
-                    return false;
-            }
-            else if (temp._alignmentList != null)
+                if (this._alignmentList != temp._alignmentList) {
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._alignmentList);
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._alignmentList);
+                    if (thcycle!=tmcycle) {
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._alignmentList); };
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._alignmentList); };
+                        return false;
+                    }
+                    if (!thcycle) {
+                        if (!this._alignmentList.equals(temp._alignmentList)) {
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._alignmentList);
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._alignmentList);
+                            return false;
+                        }
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._alignmentList);
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._alignmentList);
+                    }
+                }
+            } else if (temp._alignmentList != null)
                 return false;
             if (this._treeList != null) {
                 if (temp._treeList == null) return false;
-                else if (!(this._treeList.equals(temp._treeList))) 
-                    return false;
-            }
-            else if (temp._treeList != null)
+                if (this._treeList != temp._treeList) {
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._treeList);
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._treeList);
+                    if (thcycle!=tmcycle) {
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._treeList); };
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._treeList); };
+                        return false;
+                    }
+                    if (!thcycle) {
+                        if (!this._treeList.equals(temp._treeList)) {
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._treeList);
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._treeList);
+                            return false;
+                        }
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._treeList);
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._treeList);
+                    }
+                }
+            } else if (temp._treeList != 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;
         }
@@ -671,26 +778,40 @@ implements java.io.Serializable
         int result = super.hashCode();
         
         long tmp;
-        if (_id != null) {
+        if (_id != null
+            && !org.castor.util.CycleBreaker.startingToCycle(_id)) {
            result = 37 * result + _id.hashCode();
+           org.castor.util.CycleBreaker.releaseCycleHandle(_id);
         }
-        if (_sequenceList != null) {
+        if (_sequenceList != null
+            && !org.castor.util.CycleBreaker.startingToCycle(_sequenceList)) {
            result = 37 * result + _sequenceList.hashCode();
+           org.castor.util.CycleBreaker.releaseCycleHandle(_sequenceList);
         }
-        if (_sequenceMappingList != null) {
+        if (_sequenceMappingList != null
+            && !org.castor.util.CycleBreaker.startingToCycle(_sequenceMappingList)) {
            result = 37 * result + _sequenceMappingList.hashCode();
+           org.castor.util.CycleBreaker.releaseCycleHandle(_sequenceMappingList);
         }
-        if (_dataSetAnnotationsList != null) {
+        if (_dataSetAnnotationsList != null
+            && !org.castor.util.CycleBreaker.startingToCycle(_dataSetAnnotationsList)) {
            result = 37 * result + _dataSetAnnotationsList.hashCode();
+           org.castor.util.CycleBreaker.releaseCycleHandle(_dataSetAnnotationsList);
         }
-        if (_alignmentList != null) {
+        if (_alignmentList != null
+            && !org.castor.util.CycleBreaker.startingToCycle(_alignmentList)) {
            result = 37 * result + _alignmentList.hashCode();
+           org.castor.util.CycleBreaker.releaseCycleHandle(_alignmentList);
         }
-        if (_treeList != null) {
+        if (_treeList != null
+            && !org.castor.util.CycleBreaker.startingToCycle(_treeList)) {
            result = 37 * result + _treeList.hashCode();
+           org.castor.util.CycleBreaker.releaseCycleHandle(_treeList);
         }
-        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;