sequence mappings and DbRef mapping objects unified and source binding for castor...
[vamsas.git] / src / uk / ac / vamsas / objects / core / RangeType.java
index 91338e2..3e1f6da 100644 (file)
@@ -155,26 +155,73 @@ implements java.io.Serializable
         if (obj instanceof RangeType) {\r
         \r
             RangeType temp = (RangeType)obj;\r
+            boolean thcycle;\r
+            boolean tmcycle;\r
             if (this._choiceValue != null) {\r
                 if (temp._choiceValue == null) return false;\r
-                else if (!(this._choiceValue.equals(temp._choiceValue))) \r
-                    return false;\r
-            }\r
-            else if (temp._choiceValue != null)\r
+                if (this._choiceValue != temp._choiceValue) {\r
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._choiceValue);\r
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._choiceValue);\r
+                    if (thcycle!=tmcycle) {\r
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._choiceValue); };\r
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._choiceValue); };\r
+                        return false;\r
+                    }\r
+                    if (!thcycle) {\r
+                        if (!this._choiceValue.equals(temp._choiceValue)) {\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._choiceValue);\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._choiceValue);\r
+                            return false;\r
+                        }\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._choiceValue);\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._choiceValue);\r
+                    }\r
+                }\r
+            } else if (temp._choiceValue != null)\r
                 return false;\r
             if (this._posList != null) {\r
                 if (temp._posList == null) return false;\r
-                else if (!(this._posList.equals(temp._posList))) \r
-                    return false;\r
-            }\r
-            else if (temp._posList != null)\r
+                if (this._posList != temp._posList) {\r
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._posList);\r
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._posList);\r
+                    if (thcycle!=tmcycle) {\r
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._posList); };\r
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._posList); };\r
+                        return false;\r
+                    }\r
+                    if (!thcycle) {\r
+                        if (!this._posList.equals(temp._posList)) {\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._posList);\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._posList);\r
+                            return false;\r
+                        }\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._posList);\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._posList);\r
+                    }\r
+                }\r
+            } else if (temp._posList != null)\r
                 return false;\r
             if (this._segList != null) {\r
                 if (temp._segList == null) return false;\r
-                else if (!(this._segList.equals(temp._segList))) \r
-                    return false;\r
-            }\r
-            else if (temp._segList != null)\r
+                if (this._segList != temp._segList) {\r
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._segList);\r
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._segList);\r
+                    if (thcycle!=tmcycle) {\r
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._segList); };\r
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._segList); };\r
+                        return false;\r
+                    }\r
+                    if (!thcycle) {\r
+                        if (!this._segList.equals(temp._segList)) {\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._segList);\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._segList);\r
+                            return false;\r
+                        }\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._segList);\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._segList);\r
+                    }\r
+                }\r
+            } else if (temp._segList != null)\r
                 return false;\r
             return true;\r
         }\r
@@ -320,14 +367,20 @@ implements java.io.Serializable
         int result = super.hashCode();\r
         \r
         long tmp;\r
-        if (_choiceValue != null) {\r
+        if (_choiceValue != null\r
+            && !org.castor.util.CycleBreaker.startingToCycle(_choiceValue)) {\r
            result = 37 * result + _choiceValue.hashCode();\r
+           org.castor.util.CycleBreaker.releaseCycleHandle(_choiceValue);\r
         }\r
-        if (_posList != null) {\r
+        if (_posList != null\r
+            && !org.castor.util.CycleBreaker.startingToCycle(_posList)) {\r
            result = 37 * result + _posList.hashCode();\r
+           org.castor.util.CycleBreaker.releaseCycleHandle(_posList);\r
         }\r
-        if (_segList != null) {\r
+        if (_segList != null\r
+            && !org.castor.util.CycleBreaker.startingToCycle(_segList)) {\r
            result = 37 * result + _segList.hashCode();\r
+           org.castor.util.CycleBreaker.releaseCycleHandle(_segList);\r
         }\r
         \r
         return result;\r