sequence mappings and DbRef mapping objects unified and source binding for castor...
[vamsas.git] / src / uk / ac / vamsas / objects / core / ReferenceType.java
index d25aea9..6c06137 100644 (file)
@@ -16,7 +16,6 @@ import org.exolab.castor.xml.Unmarshaller;
 \r
 /**\r
  * base type for citing arbitrary links between vamsas objects\r
- *  \r
  *  Optional human readable description of the relationship\r
  *  \r
  * \r
@@ -37,12 +36,14 @@ implements java.io.Serializable
     private java.lang.String _content = "";\r
 \r
     /**\r
-     * Primary Key for vamsas object referencing \r
+     * Primary Key for vamsas object referencing\r
+     *  \r
      */\r
     private java.lang.String _id;\r
 \r
     /**\r
-     * List of one or more vamsas object references\r
+     * List of one or more vamsas object\r
+     *  references\r
      */\r
     private java.util.Vector _refs;\r
 \r
@@ -117,26 +118,73 @@ implements java.io.Serializable
         if (obj instanceof ReferenceType) {\r
         \r
             ReferenceType temp = (ReferenceType)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._id != null) {\r
                 if (temp._id == null) return false;\r
-                else if (!(this._id.equals(temp._id))) \r
-                    return false;\r
-            }\r
-            else if (temp._id != null)\r
+                if (this._id != temp._id) {\r
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._id);\r
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._id);\r
+                    if (thcycle!=tmcycle) {\r
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._id); };\r
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._id); };\r
+                        return false;\r
+                    }\r
+                    if (!thcycle) {\r
+                        if (!this._id.equals(temp._id)) {\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._id);\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._id);\r
+                            return false;\r
+                        }\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._id);\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._id);\r
+                    }\r
+                }\r
+            } else if (temp._id != null)\r
                 return false;\r
             if (this._refs != null) {\r
                 if (temp._refs == null) return false;\r
-                else if (!(this._refs.equals(temp._refs))) \r
-                    return false;\r
-            }\r
-            else if (temp._refs != null)\r
+                if (this._refs != temp._refs) {\r
+                    thcycle=org.castor.util.CycleBreaker.startingToCycle(this._refs);\r
+                    tmcycle=org.castor.util.CycleBreaker.startingToCycle(temp._refs);\r
+                    if (thcycle!=tmcycle) {\r
+                        if (!thcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(this._refs); };\r
+                        if (!tmcycle) { org.castor.util.CycleBreaker.releaseCycleHandle(temp._refs); };\r
+                        return false;\r
+                    }\r
+                    if (!thcycle) {\r
+                        if (!this._refs.equals(temp._refs)) {\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(this._refs);\r
+                            org.castor.util.CycleBreaker.releaseCycleHandle(temp._refs);\r
+                            return false;\r
+                        }\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(this._refs);\r
+                        org.castor.util.CycleBreaker.releaseCycleHandle(temp._refs);\r
+                    }\r
+                }\r
+            } else if (temp._refs != null)\r
                 return false;\r
             return true;\r
         }\r
@@ -157,7 +205,8 @@ implements java.io.Serializable
     /**\r
      * Returns the value of field 'id'. The field 'id' has the\r
      * following description: Primary Key for vamsas object\r
-     * referencing \r
+     * referencing\r
+     *  \r
      * \r
      * @return the value of field 'Id'.\r
      */\r
@@ -235,14 +284,20 @@ 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 (_id != null) {\r
+        if (_id != null\r
+            && !org.castor.util.CycleBreaker.startingToCycle(_id)) {\r
            result = 37 * result + _id.hashCode();\r
+           org.castor.util.CycleBreaker.releaseCycleHandle(_id);\r
         }\r
-        if (_refs != null) {\r
+        if (_refs != null\r
+            && !org.castor.util.CycleBreaker.startingToCycle(_refs)) {\r
            result = 37 * result + _refs.hashCode();\r
+           org.castor.util.CycleBreaker.releaseCycleHandle(_refs);\r
         }\r
         \r
         return result;\r
@@ -340,7 +395,8 @@ implements java.io.Serializable
     /**\r
      * Sets the value of field 'id'. The field 'id' has the\r
      * following description: Primary Key for vamsas object\r
-     * referencing \r
+     * referencing\r
+     *  \r
      * \r
      * @param id the value of field 'id'.\r
      */\r