(no commit message)
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / common / Marker.java
index 8805a89ddadfef56fdecdbfbf63d16ebe8117ee6..a59e0238d79a2684834254a381f77cf9e0eea2f4 100644 (file)
@@ -14,6 +14,10 @@ import org.hibernate.annotations.Cascade;
 import org.hibernate.annotations.CascadeType;
 
 import javax.persistence.*;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
 
 /**
  * This class aims to make available some "flags" for identifiable entities in a
@@ -23,14 +27,29 @@ import javax.persistence.*;
  * @version 1.0
  * @created 08-Nov-2007 13:06:33
  */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "Marker")
 @Entity
-public class Marker extends VersionableEntity {
+public class Marker extends VersionableEntity implements Cloneable{
        private static final Logger logger = Logger.getLogger(Marker.class);
        
+    @XmlElement(name = "Flag")
        private boolean flag;
+    
+    @XmlElement(name = "MarkerType")
        private MarkerType markerType;
+    
+    @XmlElement(name = "MarkedObject")
        private AnnotatableEntity markedObj;
        
+       /**
+        * Factory method
+        * @return
+        */
+       public static Marker NewInstance(){
+               return new Marker();
+       }
+
        /**
         * Factory method
         * @param markerType The type of the marker
@@ -41,14 +60,19 @@ public class Marker extends VersionableEntity {
                return new Marker(markerType, flag);
        }
        
+       /**
+        * Default Constructor
+        */
+       private Marker() {
+       }
+
        /**
         * Constructor
-        * @param flage
+        * @param flag
         */
        protected Marker(MarkerType markerType, boolean flag){
                this.markerType = markerType;
                this.flag = flag;
-               
        }
        
        /**
@@ -59,15 +83,6 @@ public class Marker extends VersionableEntity {
                return markedObj;
        }
        protected void setMarkedObj(AnnotatableEntity newMarkedObject) {
-               // Hibernate bidirectional cascade hack: 
-               // http://opensource.atlassian.com/projects/hibernate/browse/HHH-1054
-               if(this.markedObj == newMarkedObject) return;
-               if (markedObj != null) { 
-                       markedObj.markers.remove(this);
-               }
-               if (newMarkedObject!= null) { 
-                       newMarkedObject.markers.add(this);
-               }
                this.markedObj = newMarkedObject;
        }
 
@@ -93,5 +108,27 @@ public class Marker extends VersionableEntity {
        public void setFlag(boolean flag){
                this.flag = flag;
        }
+       
+       
+//****************** CLONE ************************************************/
+        
+       /* (non-Javadoc)
+        * @see java.lang.Object#clone()
+        */
+       public Object clone() throws CloneNotSupportedException{
+               Marker result = (Marker)super.clone();
+               //no changes to: type, flag
+               return result;
+       }
+       
+       /**
+        * Clones this marker and sets the clones marked object to 'markedObject'
+        * @see java.lang.Object#clone()
+        */
+       public Marker clone(AnnotatableEntity markedObject) throws CloneNotSupportedException{
+               Marker result = (Marker)clone();
+               result.setMarkedObj(markedObject);
+               return result;
+       }
 
 }
\ No newline at end of file