sequence mappings and DbRef mapping objects unified and source binding for castor...
[vamsas.git] / src / uk / ac / vamsas / objects / core / AlignmentAnnotation.java
index 0ffea12..b6c544c 100644 (file)
@@ -44,8 +44,9 @@ implements java.io.Serializable
     private boolean _has_graph;\r
 \r
     /**\r
-     * annotation is associated with a\r
-     *  range on a particular group of alignment sequences\r
+     * annotation is associated with\r
+     *  a range on a particular group of alignment\r
+     *  sequences\r
      */\r
     private java.util.Vector _seqrefs;\r
 \r
@@ -131,23 +132,55 @@ implements java.io.Serializable
         if (obj instanceof AlignmentAnnotation) {\r
         \r
             AlignmentAnnotation temp = (AlignmentAnnotation)obj;\r
+            boolean thcycle;\r
+            boolean tmcycle;\r
             if (this._graph != temp._graph)\r
                 return false;\r
             if (this._has_graph != temp._has_graph)\r
                 return false;\r
             if (this._seqrefs != null) {\r
                 if (temp._seqrefs == null) return false;\r
-                else if (!(this._seqrefs.equals(temp._seqrefs))) \r
-                    return false;\r
-            }\r
-            else if (temp._seqrefs != null)\r
+                if (this._seqrefs != temp._seqrefs) {\r
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._seqrefs);\r
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._seqrefs);\r
+                    if (thcycle!=tmcycle) {\r
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._seqrefs); };\r
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._seqrefs); };\r
+                        return false;\r
+                    }\r
+                    if (!thcycle) {\r
+                        if (!this._seqrefs.equals(temp._seqrefs)) {\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._seqrefs);\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._seqrefs);\r
+                            return false;\r
+                        }\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._seqrefs);\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._seqrefs);\r
+                    }\r
+                }\r
+            } else if (temp._seqrefs != null)\r
                 return false;\r
             if (this._provenance != null) {\r
                 if (temp._provenance == null) return false;\r
-                else if (!(this._provenance.equals(temp._provenance))) \r
-                    return false;\r
-            }\r
-            else if (temp._provenance != null)\r
+                if (this._provenance != temp._provenance) {\r
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._provenance);\r
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._provenance);\r
+                    if (thcycle!=tmcycle) {\r
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._provenance); };\r
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._provenance); };\r
+                        return false;\r
+                    }\r
+                    if (!thcycle) {\r
+                        if (!this._provenance.equals(temp._provenance)) {\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._provenance);\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._provenance);\r
+                            return false;\r
+                        }\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._provenance);\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._provenance);\r
+                    }\r
+                }\r
+            } else if (temp._provenance != null)\r
                 return false;\r
             return true;\r
         }\r
@@ -258,11 +291,15 @@ implements java.io.Serializable
         \r
         long tmp;\r
         result = 37 * result + (_graph?0:1);\r
-        if (_seqrefs != null) {\r
+        if (_seqrefs != null\r
+            && !org.castor.util.CycleBreaker.startingToCycle(_seqrefs)) {\r
            result = 37 * result + _seqrefs.hashCode();\r
+           org.castor.util.CycleBreaker.releaseCycleHandle(_seqrefs);\r
         }\r
-        if (_provenance != null) {\r
+        if (_provenance != null\r
+            && !org.castor.util.CycleBreaker.startingToCycle(_provenance)) {\r
            result = 37 * result + _provenance.hashCode();\r
+           org.castor.util.CycleBreaker.releaseCycleHandle(_provenance);\r
         }\r
         \r
         return result;\r