removed abstract method getGatheringEvent which was not implemented in DerivedUnitBase
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / occurrence / DerivedUnitBase.java
index 3e84aacb361a0bae2e5aea8ab1b5845fdabebee1..3a352f9d62f023a1a1adf4ef4a1673465892db6c 100644 (file)
@@ -14,6 +14,7 @@ import java.util.Set;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.ManyToOne;
+import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
@@ -25,8 +26,15 @@ import javax.xml.bind.annotation.XmlType;
 import org.hibernate.annotations.Cascade;
 import org.hibernate.annotations.CascadeType;
 import org.hibernate.envers.Audited;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.IndexedEmbedded;
+import org.hibernate.validator.constraints.Length;
 
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
+import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
+import eu.etaxonomy.cdm.validation.annotation.NullOrNotEmpty;
 
 /**
  * http://www.bgbm.org/biodivinf/docs/CollectionModel/ReprintTNR.pdf
@@ -48,23 +56,34 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 })
 @XmlRootElement(name = "DerivedUnitBase")
 @Entity
+@Indexed(index = "eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase")
 @Audited
-public abstract class DerivedUnitBase extends SpecimenOrObservationBase implements Cloneable{
+public abstract class DerivedUnitBase<S extends IIdentifiableEntityCacheStrategy> extends SpecimenOrObservationBase<S> implements Cloneable{
 
        @XmlElement(name = "Collection")
        @XmlIDREF
        @XmlSchemaType(name = "IDREF")
        @ManyToOne(fetch = FetchType.LAZY)
        @Cascade(CascadeType.SAVE_UPDATE)
+       @IndexedEmbedded
        private Collection collection;
 
        @XmlElement(name = "CatalogNumber")
+       @Field(index=Index.UN_TOKENIZED)
+       @NullOrNotEmpty
+       @Length(max = 255)
        private String catalogNumber;
        
        @XmlElement(name = "AccessionNumber")
+       @Field(index=Index.UN_TOKENIZED)
+       @NullOrNotEmpty
+       @Length(max = 255)
        private String accessionNumber;
        
        @XmlElement(name = "CollectorsNumber")
+       @Field(index=Index.UN_TOKENIZED)
+       @NullOrNotEmpty
+       @Length(max = 255)
        private String collectorsNumber;
        
        @XmlElement(name = "StoredUnder")
@@ -72,6 +91,7 @@ public abstract class DerivedUnitBase extends SpecimenOrObservationBase implemen
        @XmlSchemaType(name = "IDREF")
        @ManyToOne(fetch = FetchType.LAZY)
        @Cascade(CascadeType.SAVE_UPDATE)
+       @IndexedEmbedded
        private TaxonNameBase storedUnder;
        
        @XmlElement(name = "DerivedFrom")
@@ -79,6 +99,7 @@ public abstract class DerivedUnitBase extends SpecimenOrObservationBase implemen
        @XmlSchemaType(name = "IDREF")
        @ManyToOne(fetch = FetchType.LAZY)
        @Cascade(CascadeType.SAVE_UPDATE)
+       @IndexedEmbedded(depth = 4)
        private DerivationEvent derivationEvent;
 
        /**
@@ -107,10 +128,11 @@ public abstract class DerivedUnitBase extends SpecimenOrObservationBase implemen
         */
        protected DerivedUnitBase(GatheringEvent gatheringEvent) {
                this(new FieldObservation());
-               FieldObservation field = (FieldObservation) this.getOriginalUnit();
+               FieldObservation field = (FieldObservation)this.getOriginalUnit();
                field.setGatheringEvent(gatheringEvent);
        }
 
+
        public DerivationEvent getDerivedFrom() {
                return derivationEvent;
        }
@@ -121,21 +143,15 @@ public abstract class DerivedUnitBase extends SpecimenOrObservationBase implemen
                }
                this.derivationEvent = derivedFrom;
                if (derivedFrom != null){
-                       derivedFrom.getDerivatives().add(this);
+                       derivedFrom.addDerivative(this);
                }
        }
        
+       @Transient
        public Set<SpecimenOrObservationBase> getOriginals(){
                return this.getDerivedFrom().getOriginals();
        }
 
-       @Override
-       public GatheringEvent getGatheringEvent() {
-               // FIXME: implement efficient way of getting original gathering event
-               // keep link to original gathering event for performance mainly.
-               return null;
-       }
-
        public Collection getCollection(){
                return this.collection;
        }
@@ -178,7 +194,7 @@ public abstract class DerivedUnitBase extends SpecimenOrObservationBase implemen
                return storedUnder;
        }
        
-       //*********** CLONE **********************************/ 
+//*********** CLONE **********************************/        
        
        /** 
         * Clones <i>this</i> derivedUnitBase. This is a shortcut that enables to