sequence mappings and DbRef mapping objects unified and source binding for castor...
[vamsas.git] / src / uk / ac / vamsas / objects / core / Glyph.java
index ae91252..e96b4fd 100644 (file)
@@ -76,19 +76,51 @@ implements java.io.Serializable
         if (obj instanceof Glyph) {\r
         \r
             Glyph temp = (Glyph)obj;\r
+            boolean thcycle;\r
+            boolean tmcycle;\r
             if (this._content != null) {\r
                 if (temp._content == null) return false;\r
-                else if (!(this._content.equals(temp._content))) \r
-                    return false;\r
-            }\r
-            else if (temp._content != null)\r
+                if (this._content != temp._content) {\r
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._content);\r
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._content);\r
+                    if (thcycle!=tmcycle) {\r
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._content); };\r
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._content); };\r
+                        return false;\r
+                    }\r
+                    if (!thcycle) {\r
+                        if (!this._content.equals(temp._content)) {\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._content);\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._content);\r
+                            return false;\r
+                        }\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._content);\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._content);\r
+                    }\r
+                }\r
+            } else if (temp._content != null)\r
                 return false;\r
             if (this._dict != null) {\r
                 if (temp._dict == null) return false;\r
-                else if (!(this._dict.equals(temp._dict))) \r
-                    return false;\r
-            }\r
-            else if (temp._dict != null)\r
+                if (this._dict != temp._dict) {\r
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._dict);\r
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._dict);\r
+                    if (thcycle!=tmcycle) {\r
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._dict); };\r
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._dict); };\r
+                        return false;\r
+                    }\r
+                    if (!thcycle) {\r
+                        if (!this._dict.equals(temp._dict)) {\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._dict);\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._dict);\r
+                            return false;\r
+                        }\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._dict);\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._dict);\r
+                    }\r
+                }\r
+            } else if (temp._dict != null)\r
                 return false;\r
             return true;\r
         }\r
@@ -135,11 +167,15 @@ implements java.io.Serializable
         int result = super.hashCode();\r
         \r
         long tmp;\r
-        if (_content != null) {\r
+        if (_content != null\r
+            && !org.castor.util.CycleBreaker.startingToCycle(_content)) {\r
            result = 37 * result + _content.hashCode();\r
+           org.castor.util.CycleBreaker.releaseCycleHandle(_content);\r
         }\r
-        if (_dict != null) {\r
+        if (_dict != null\r
+            && !org.castor.util.CycleBreaker.startingToCycle(_dict)) {\r
            result = 37 * result + _dict.hashCode();\r
+           org.castor.util.CycleBreaker.releaseCycleHandle(_dict);\r
         }\r
         \r
         return result;\r