Make Specimen - SpecimenDescription one-to-many #3571
authorAndreas Müller <a.mueller@bgbm.org>
Wed, 3 Jul 2013 13:53:08 +0000 (13:53 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Wed, 3 Jul 2013 13:53:08 +0000 (13:53 +0000)
24 files changed:
cdmlib-ext/src/test/resources/dbscripts/001-cdm.h2.sql
cdmlib-io/src/test/resources/dbscripts/001-cdm.h2.sql
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/description/DescriptionBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/description/SpecimenDescription.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/description/TaxonDescription.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/occurrence/SpecimenOrObservationBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/Taxon.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/description/SpecimenDescriptionDefaultCacheStrategy.java
cdmlib-model/src/test/java/eu/etaxonomy/cdm/model/occurrence/SpecimenTest.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v31_33/SchemaUpdater_31_33.java
cdmlib-persistence/src/test/resources/dbscripts/001-cdm.h2.sql
cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/database/ClearDBDataSet.xml
cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/database/ClearDB_with_Terms_DataSet.xml
cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/common/CdmGenericDaoImplTest.xml
cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/dataset.dtd
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacade.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/TaxonServiceImpl.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeFieldUnitCacheStrategyTest.java
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.java
cdmlib-services/src/test/resources/dbscripts/001-cdm.h2.sql
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.testSetDerivedUnitImageGallery-result.xml
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.testSetFieldObjectImageGallery-result.xml
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/facade/DerivedUnitFacadeTest.xml
cdmlib-services/src/test/resources/eu/etaxonomy/cdm/api/service/CommonServiceImplTest.xml

index 590112ea170434c5898f7bfd79a1f498a683e5f1..b5f065ee2ebe1224042db1e913c3345d4001fcdf 100644 (file)
@@ -1019,6 +1019,7 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE(
     IMAGEGALLERY BOOLEAN NOT NULL,
     CREATEDBY_ID INTEGER,
     UPDATEDBY_ID INTEGER,
+    SPECIMEN_ID INTEGER,
     TAXON_ID INTEGER,
     TAXONNAME_ID INTEGER
 );
@@ -1041,6 +1042,7 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_AUD(
     IMAGEGALLERY BOOLEAN,
     CREATEDBY_ID INTEGER,
     UPDATEDBY_ID INTEGER,
+    SPECIMEN_ID INTEGER,
     TAXON_ID INTEGER,
     TAXONNAME_ID INTEGER
 );
@@ -1167,18 +1169,6 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SCOPE_AUD(
     REVTYPE TINYINT
 );
 -- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SCOPE_AUD;
-CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE(
-    DESCRIPTIONS_ID INTEGER NOT NULL,
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID INTEGER NOT NULL
-);
--- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE;
-CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD(
-    REV INTEGER NOT NULL,
-    DESCRIPTIONS_ID INTEGER NOT NULL,
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID INTEGER NOT NULL,
-    REVTYPE TINYINT
-);
--- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD;
 CREATE CACHED TABLE PUBLIC.DESCRIPTIONELEMENTBASE(
     DTYPE VARCHAR(31) NOT NULL,
     ID INTEGER NOT NULL,
@@ -4514,7 +4504,6 @@ ALTER TABLE PUBLIC.ORIGINALSOURCEBASE_ANNOTATION ADD CONSTRAINT PUBLIC.CONSTRAIN
 ALTER TABLE PUBLIC.MEDIA_LANGUAGESTRING ADD CONSTRAINT PUBLIC.CONSTRAINT_969 PRIMARY KEY(MEDIA_ID, TITLE_MAPKEY_ID);
 ALTER TABLE PUBLIC.WORKINGSET_DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_A53 PRIMARY KEY(WORKINGSET_ID, DESCRIPTIONS_ID);
 ALTER TABLE PUBLIC.SEQUENCE_REFERENCE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_514 PRIMARY KEY(REV, SEQUENCE_ID, CITATIONS_ID);
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_4D8 PRIMARY KEY(DESCRIPTIONS_ID, DESCRIBEDSPECIMENOROBSERVATIONS_ID);
 ALTER TABLE PUBLIC.FEATURETREE_ORIGINALSOURCEBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_906 PRIMARY KEY(FEATURETREE_ID, SOURCES_ID);
 ALTER TABLE PUBLIC.RIGHTS ADD CONSTRAINT PUBLIC.CONSTRAINT_901 PRIMARY KEY(ID);
 ALTER TABLE PUBLIC.MEDIA_ORIGINALSOURCEBASE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_909 PRIMARY KEY(REV, MEDIA_ID, SOURCES_ID);
@@ -4699,7 +4688,6 @@ ALTER TABLE PUBLIC.DEFINEDTERMBASE_REPRESENTATION_AUD ADD CONSTRAINT PUBLIC.CONS
 ALTER TABLE PUBLIC.TAXONBASE_RIGHTS_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_61 PRIMARY KEY(REV, TAXONBASE_ID, RIGHTS_ID);
 ALTER TABLE PUBLIC.TERMVOCABULARY_CREDIT ADD CONSTRAINT PUBLIC.CONSTRAINT_1DF PRIMARY KEY(TERMVOCABULARY_ID, SORTINDEX);
 ALTER TABLE PUBLIC.FEATURENODE ADD CONSTRAINT PUBLIC.CONSTRAINT_69E PRIMARY KEY(ID);
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_DB5 PRIMARY KEY(REV, DESCRIPTIONS_ID, DESCRIBEDSPECIMENOROBSERVATIONS_ID);
 ALTER TABLE PUBLIC.USERACCOUNT_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_850 PRIMARY KEY(ID, REV);
 ALTER TABLE PUBLIC.MEDIAKEY_TAXON ADD CONSTRAINT PUBLIC.CONSTRAINT_3AB PRIMARY KEY(MEDIAKEY_ID, TAXON_ID);
 ALTER TABLE PUBLIC.DERIVATIONEVENT ADD CONSTRAINT PUBLIC.CONSTRAINT_83E PRIMARY KEY(ID);
@@ -5133,7 +5121,7 @@ ALTER TABLE PUBLIC.TERMVOCABULARY_REPRESENTATION ADD CONSTRAINT PUBLIC.FKA408B63
 ALTER TABLE PUBLIC.FEATURENODE_DEFINEDTERMBASE_INAPPLICABLEIF ADD CONSTRAINT PUBLIC.FK56833D0152FCC4B FOREIGN KEY(FEATURENODE_ID) REFERENCES PUBLIC.FEATURENODE(ID) NOCHECK;
 ALTER TABLE PUBLIC.POLYTOMOUSKEY_ORIGINALSOURCEBASE_AUD ADD CONSTRAINT PUBLIC.FKE644349534869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.COLLECTION_MEDIA_AUD ADD CONSTRAINT PUBLIC.FK9AABDB5434869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD8033B8A841 FOREIGN KEY(DESCRIPTIONS_ID) REFERENCES PUBLIC.DESCRIPTIONBASE(ID) NOCHECK;
+ALTER TABLE PUBLIC.DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD8033B8A841 FOREIGN KEY(SPECIMEN_ID) REFERENCES PUBLIC.SPECIMENOROBSERVATIONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.STATEDATA_AUD ADD CONSTRAINT PUBLIC.FKDA6A700C34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FK21CA3272C8505DB FOREIGN KEY(PRESERVATION_ID) REFERENCES PUBLIC.DEFINEDTERMBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.MEDIA_RIGHTS ADD CONSTRAINT PUBLIC.FKDB1266D2C13F7B21 FOREIGN KEY(RIGHTS_ID) REFERENCES PUBLIC.RIGHTS(ID) NOCHECK;
@@ -5393,7 +5381,6 @@ ALTER TABLE PUBLIC.DESCRIPTIONBASE_CREDIT_AUD ADD CONSTRAINT PUBLIC.FK2EBEFB1C34
 ALTER TABLE PUBLIC.TAXONBASE ADD CONSTRAINT PUBLIC.FK9249B49B74FED214 FOREIGN KEY(SEC_ID) REFERENCES PUBLIC.REFERENCE(ID) NOCHECK;
 ALTER TABLE PUBLIC.SEQUENCE_MARKER ADD CONSTRAINT PUBLIC.FK3D22B278D57FFDD5 FOREIGN KEY(SEQUENCE_ID) REFERENCES PUBLIC.SEQUENCE(ID) NOCHECK;
 ALTER TABLE PUBLIC.TAXONRELATIONSHIP ADD CONSTRAINT PUBLIC.FK7482BA02AEB7F3BE FOREIGN KEY(CITATION_ID) REFERENCES PUBLIC.REFERENCE(ID) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD805C9E3461 FOREIGN KEY(DESCRIBEDSPECIMENOROBSERVATIONS_ID) REFERENCES PUBLIC.SPECIMENOROBSERVATIONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.ANNOTATION ADD CONSTRAINT PUBLIC.FK1A21C74FDF299D00 FOREIGN KEY(ANNOTATIONTYPE_ID) REFERENCES PUBLIC.DEFINEDTERMBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.AGENTBASE_MARKER ADD CONSTRAINT PUBLIC.FK365D5D6386EFC5D4 FOREIGN KEY(AGENTBASE_ID) REFERENCES PUBLIC.AGENTBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.TAXONBASE_ANNOTATION ADD CONSTRAINT PUBLIC.FK41ED09739C9D39 FOREIGN KEY(TAXONBASE_ID) REFERENCES PUBLIC.TAXONBASE(ID) NOCHECK;
@@ -5756,7 +5743,6 @@ ALTER TABLE PUBLIC.POLYTOMOUSKEYNODE_LANGUAGESTRING ADD CONSTRAINT PUBLIC.FK5574
 ALTER TABLE PUBLIC.WORKINGSET ADD CONSTRAINT PUBLIC.FK668D5B9123DB7F04 FOREIGN KEY(DESCRIPTIVESYSTEM_ID) REFERENCES PUBLIC.FEATURETREE(ID) NOCHECK;
 ALTER TABLE PUBLIC.STATEDATA ADD CONSTRAINT PUBLIC.FKFB1697BB4FF2DB2C FOREIGN KEY(CREATEDBY_ID) REFERENCES PUBLIC.USERACCOUNT(ID) NOCHECK;
 ALTER TABLE PUBLIC.AGENTBASE_AGENTBASE_AUD ADD CONSTRAINT PUBLIC.FKA8A87CFE34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD ADD CONSTRAINT PUBLIC.FKF1B33B5134869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.TERMVOCABULARY_ORIGINALSOURCEBASE ADD CONSTRAINT PUBLIC.FK8F2D512A258E060 FOREIGN KEY(TERMVOCABULARY_ID) REFERENCES PUBLIC.TERMVOCABULARY(ID) NOCHECK;
 ALTER TABLE PUBLIC.DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.FKFF4D58CDDE9A3E39 FOREIGN KEY(TAXON_ID) REFERENCES PUBLIC.TAXONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.NOMENCLATURALSTATUS_MARKER_AUD ADD CONSTRAINT PUBLIC.FK8619495F34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
index 590112ea170434c5898f7bfd79a1f498a683e5f1..b5f065ee2ebe1224042db1e913c3345d4001fcdf 100644 (file)
@@ -1019,6 +1019,7 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE(
     IMAGEGALLERY BOOLEAN NOT NULL,
     CREATEDBY_ID INTEGER,
     UPDATEDBY_ID INTEGER,
+    SPECIMEN_ID INTEGER,
     TAXON_ID INTEGER,
     TAXONNAME_ID INTEGER
 );
@@ -1041,6 +1042,7 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_AUD(
     IMAGEGALLERY BOOLEAN,
     CREATEDBY_ID INTEGER,
     UPDATEDBY_ID INTEGER,
+    SPECIMEN_ID INTEGER,
     TAXON_ID INTEGER,
     TAXONNAME_ID INTEGER
 );
@@ -1167,18 +1169,6 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SCOPE_AUD(
     REVTYPE TINYINT
 );
 -- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SCOPE_AUD;
-CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE(
-    DESCRIPTIONS_ID INTEGER NOT NULL,
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID INTEGER NOT NULL
-);
--- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE;
-CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD(
-    REV INTEGER NOT NULL,
-    DESCRIPTIONS_ID INTEGER NOT NULL,
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID INTEGER NOT NULL,
-    REVTYPE TINYINT
-);
--- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD;
 CREATE CACHED TABLE PUBLIC.DESCRIPTIONELEMENTBASE(
     DTYPE VARCHAR(31) NOT NULL,
     ID INTEGER NOT NULL,
@@ -4514,7 +4504,6 @@ ALTER TABLE PUBLIC.ORIGINALSOURCEBASE_ANNOTATION ADD CONSTRAINT PUBLIC.CONSTRAIN
 ALTER TABLE PUBLIC.MEDIA_LANGUAGESTRING ADD CONSTRAINT PUBLIC.CONSTRAINT_969 PRIMARY KEY(MEDIA_ID, TITLE_MAPKEY_ID);
 ALTER TABLE PUBLIC.WORKINGSET_DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_A53 PRIMARY KEY(WORKINGSET_ID, DESCRIPTIONS_ID);
 ALTER TABLE PUBLIC.SEQUENCE_REFERENCE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_514 PRIMARY KEY(REV, SEQUENCE_ID, CITATIONS_ID);
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_4D8 PRIMARY KEY(DESCRIPTIONS_ID, DESCRIBEDSPECIMENOROBSERVATIONS_ID);
 ALTER TABLE PUBLIC.FEATURETREE_ORIGINALSOURCEBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_906 PRIMARY KEY(FEATURETREE_ID, SOURCES_ID);
 ALTER TABLE PUBLIC.RIGHTS ADD CONSTRAINT PUBLIC.CONSTRAINT_901 PRIMARY KEY(ID);
 ALTER TABLE PUBLIC.MEDIA_ORIGINALSOURCEBASE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_909 PRIMARY KEY(REV, MEDIA_ID, SOURCES_ID);
@@ -4699,7 +4688,6 @@ ALTER TABLE PUBLIC.DEFINEDTERMBASE_REPRESENTATION_AUD ADD CONSTRAINT PUBLIC.CONS
 ALTER TABLE PUBLIC.TAXONBASE_RIGHTS_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_61 PRIMARY KEY(REV, TAXONBASE_ID, RIGHTS_ID);
 ALTER TABLE PUBLIC.TERMVOCABULARY_CREDIT ADD CONSTRAINT PUBLIC.CONSTRAINT_1DF PRIMARY KEY(TERMVOCABULARY_ID, SORTINDEX);
 ALTER TABLE PUBLIC.FEATURENODE ADD CONSTRAINT PUBLIC.CONSTRAINT_69E PRIMARY KEY(ID);
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_DB5 PRIMARY KEY(REV, DESCRIPTIONS_ID, DESCRIBEDSPECIMENOROBSERVATIONS_ID);
 ALTER TABLE PUBLIC.USERACCOUNT_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_850 PRIMARY KEY(ID, REV);
 ALTER TABLE PUBLIC.MEDIAKEY_TAXON ADD CONSTRAINT PUBLIC.CONSTRAINT_3AB PRIMARY KEY(MEDIAKEY_ID, TAXON_ID);
 ALTER TABLE PUBLIC.DERIVATIONEVENT ADD CONSTRAINT PUBLIC.CONSTRAINT_83E PRIMARY KEY(ID);
@@ -5133,7 +5121,7 @@ ALTER TABLE PUBLIC.TERMVOCABULARY_REPRESENTATION ADD CONSTRAINT PUBLIC.FKA408B63
 ALTER TABLE PUBLIC.FEATURENODE_DEFINEDTERMBASE_INAPPLICABLEIF ADD CONSTRAINT PUBLIC.FK56833D0152FCC4B FOREIGN KEY(FEATURENODE_ID) REFERENCES PUBLIC.FEATURENODE(ID) NOCHECK;
 ALTER TABLE PUBLIC.POLYTOMOUSKEY_ORIGINALSOURCEBASE_AUD ADD CONSTRAINT PUBLIC.FKE644349534869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.COLLECTION_MEDIA_AUD ADD CONSTRAINT PUBLIC.FK9AABDB5434869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD8033B8A841 FOREIGN KEY(DESCRIPTIONS_ID) REFERENCES PUBLIC.DESCRIPTIONBASE(ID) NOCHECK;
+ALTER TABLE PUBLIC.DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD8033B8A841 FOREIGN KEY(SPECIMEN_ID) REFERENCES PUBLIC.SPECIMENOROBSERVATIONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.STATEDATA_AUD ADD CONSTRAINT PUBLIC.FKDA6A700C34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FK21CA3272C8505DB FOREIGN KEY(PRESERVATION_ID) REFERENCES PUBLIC.DEFINEDTERMBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.MEDIA_RIGHTS ADD CONSTRAINT PUBLIC.FKDB1266D2C13F7B21 FOREIGN KEY(RIGHTS_ID) REFERENCES PUBLIC.RIGHTS(ID) NOCHECK;
@@ -5393,7 +5381,6 @@ ALTER TABLE PUBLIC.DESCRIPTIONBASE_CREDIT_AUD ADD CONSTRAINT PUBLIC.FK2EBEFB1C34
 ALTER TABLE PUBLIC.TAXONBASE ADD CONSTRAINT PUBLIC.FK9249B49B74FED214 FOREIGN KEY(SEC_ID) REFERENCES PUBLIC.REFERENCE(ID) NOCHECK;
 ALTER TABLE PUBLIC.SEQUENCE_MARKER ADD CONSTRAINT PUBLIC.FK3D22B278D57FFDD5 FOREIGN KEY(SEQUENCE_ID) REFERENCES PUBLIC.SEQUENCE(ID) NOCHECK;
 ALTER TABLE PUBLIC.TAXONRELATIONSHIP ADD CONSTRAINT PUBLIC.FK7482BA02AEB7F3BE FOREIGN KEY(CITATION_ID) REFERENCES PUBLIC.REFERENCE(ID) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD805C9E3461 FOREIGN KEY(DESCRIBEDSPECIMENOROBSERVATIONS_ID) REFERENCES PUBLIC.SPECIMENOROBSERVATIONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.ANNOTATION ADD CONSTRAINT PUBLIC.FK1A21C74FDF299D00 FOREIGN KEY(ANNOTATIONTYPE_ID) REFERENCES PUBLIC.DEFINEDTERMBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.AGENTBASE_MARKER ADD CONSTRAINT PUBLIC.FK365D5D6386EFC5D4 FOREIGN KEY(AGENTBASE_ID) REFERENCES PUBLIC.AGENTBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.TAXONBASE_ANNOTATION ADD CONSTRAINT PUBLIC.FK41ED09739C9D39 FOREIGN KEY(TAXONBASE_ID) REFERENCES PUBLIC.TAXONBASE(ID) NOCHECK;
@@ -5756,7 +5743,6 @@ ALTER TABLE PUBLIC.POLYTOMOUSKEYNODE_LANGUAGESTRING ADD CONSTRAINT PUBLIC.FK5574
 ALTER TABLE PUBLIC.WORKINGSET ADD CONSTRAINT PUBLIC.FK668D5B9123DB7F04 FOREIGN KEY(DESCRIPTIVESYSTEM_ID) REFERENCES PUBLIC.FEATURETREE(ID) NOCHECK;
 ALTER TABLE PUBLIC.STATEDATA ADD CONSTRAINT PUBLIC.FKFB1697BB4FF2DB2C FOREIGN KEY(CREATEDBY_ID) REFERENCES PUBLIC.USERACCOUNT(ID) NOCHECK;
 ALTER TABLE PUBLIC.AGENTBASE_AGENTBASE_AUD ADD CONSTRAINT PUBLIC.FKA8A87CFE34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD ADD CONSTRAINT PUBLIC.FKF1B33B5134869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.TERMVOCABULARY_ORIGINALSOURCEBASE ADD CONSTRAINT PUBLIC.FK8F2D512A258E060 FOREIGN KEY(TERMVOCABULARY_ID) REFERENCES PUBLIC.TERMVOCABULARY(ID) NOCHECK;
 ALTER TABLE PUBLIC.DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.FKFF4D58CDDE9A3E39 FOREIGN KEY(TAXON_ID) REFERENCES PUBLIC.TAXONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.NOMENCLATURALSTATUS_MARKER_AUD ADD CONSTRAINT PUBLIC.FK8619495F34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
index 03cf78f23b55dd474b87eb04326ff5a9bdfe7efc..529dd3468d1b776937715fb2f7f42356f3a304fa 100644 (file)
@@ -12,12 +12,15 @@ package eu.etaxonomy.cdm.model.description;
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
 import javax.persistence.Inheritance;
 import javax.persistence.InheritanceType;
+import javax.persistence.JoinColumn;
 import javax.persistence.JoinTable;
 import javax.persistence.ManyToMany;
+import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.persistence.Transient;
 import javax.xml.bind.annotation.XmlAccessType;
@@ -36,15 +39,17 @@ import org.hibernate.envers.Audited;
 import org.hibernate.search.annotations.ClassBridge;
 import org.hibernate.search.annotations.ClassBridges;
 import org.hibernate.search.annotations.ContainedIn;
-import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.IndexedEmbedded;
 
 import eu.etaxonomy.cdm.hibernate.search.DescriptionBaseClassBridge;
 import eu.etaxonomy.cdm.hibernate.search.GroupByTaxonClassBridge;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;
 import eu.etaxonomy.cdm.model.name.NameRelationship;
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
 import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
 import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
 
 /**
@@ -65,7 +70,7 @@ import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
 
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "DescriptionBase", propOrder = {
-    "describedSpecimenOrObservations",
+    "describedSpecimenOrObservation",
     "descriptionSources",
     "descriptiveSystem",
     "workingSets",
@@ -83,14 +88,25 @@ public abstract class DescriptionBase<S extends IIdentifiableEntityCacheStrategy
     private static final long serialVersionUID = 5504218413819040193L;
     private static final Logger logger = Logger.getLogger(DescriptionBase.class);
 
-    @XmlElementWrapper(name = "DescribedSpecimenOrObservations")
-    @XmlElement(name = "DescribedSpecimenOrObservation")
+//    @XmlElementWrapper(name = "DescribedSpecimenOrObservations")
+//    @XmlElement(name = "DescribedSpecimenOrObservation")
+//    @XmlIDREF
+//    @XmlSchemaType(name="IDREF")
+//    @ManyToMany(fetch = FetchType.LAZY)
+//    @Cascade(CascadeType.SAVE_UPDATE)
+//    private Set<SpecimenOrObservationBase> describedSpecimenOrObservations = new HashSet<SpecimenOrObservationBase>();
+
+    @XmlElement( name = "DescribedSpecimenOrObservation")
+    @ManyToOne(fetch = FetchType.LAZY)
     @XmlIDREF
     @XmlSchemaType(name="IDREF")
-    @ManyToMany(fetch = FetchType.LAZY)
     @Cascade(CascadeType.SAVE_UPDATE)
-    private Set<SpecimenOrObservationBase> describedSpecimenOrObservations = new HashSet<SpecimenOrObservationBase>();
-
+    @JoinColumn(name="specimen_id")
+    @IndexedEmbedded
+    //TODO maybe move down to specific classes SpecimenDescription (with Cascade.Delete) and TaxonDescription (without Cascade)
+    private SpecimenOrObservationBase describedSpecimenOrObservation;
+    
+    
     @XmlElementWrapper(name = "DescriptionSources")
     @XmlElement(name = "DescriptionSource")
     @XmlIDREF
@@ -135,60 +151,37 @@ public abstract class DescriptionBase<S extends IIdentifiableEntityCacheStrategy
     @XmlElement(name = "ImageGallery")
     private boolean imageGallery;
 
-
+    
     /**
-     * Returns the set of {@link SpecimenOrObservationBase specimens or observations} involved in
+     * Returns a {@link SpecimenOrObservationBase specimen or observation} involved in
      * <i>this</i> description as a whole. {@link TaxonDescription Taxon descriptions} are also often based
      * on concrete specimens or observations. For {@link TaxonNameDescription taxon name descriptions}
-     * this set should be empty.
-     *
-     * @see    #addDescribedSpecimenOrObservations(SpecimenOrObservationBase)
-     * @see    #removeDescribedSpecimenOrObservations(SpecimenOrObservationBase)
-     */
-    public Set<SpecimenOrObservationBase> getDescribedSpecimenOrObservations() {
-        return describedSpecimenOrObservations;
-    }
-
-    /**
-     * Adds an existing {@link SpecimenOrObservationBase specimen or observation} to the set of
-     * {@link #getDescribedSpecimenOrObservations() specimens or observations} described in <i>this</i>
-     * description or which <i>this</i> description is based on.<BR>
-     * Due to bidirectionality if <i>this</i> description is a {@link SpecimenDescription specimen description},
-     * <i>this</i> description will also be added to the set of specimen
-     * descriptions corresponding to the given additional specimen or observation.
-     *
-     * @param describedSpecimenOrObservation   the specimen or observation to be added to <i>this</i> description
-     * @see                                                                            #getDescribedSpecimenOrObservations()
-     * @see                                                                            SpecimenOrObservationBase#addDescription(DescriptionBase)
+     * this attribute should be empty.
+     * To handle sets of specimen or observations one may first group them by a derivation event of type
+     * "Grouping" and then use the grouped unit here.
+     * @return
      */
-    public void addDescribedSpecimenOrObservation(SpecimenOrObservationBase describedSpecimenOrObservation) {
-        logger.debug("addDescribedSpecimenOrObservations");
-        this.describedSpecimenOrObservations.add(describedSpecimenOrObservation);
-        if (! describedSpecimenOrObservation.getDescriptions().contains(this)){
-            describedSpecimenOrObservation.addDescription(this);
-        }
-    }
-
-    /**
-     * Removes one element from the set of {@link #getDescribedSpecimenOrObservations() specimens or observations} involved
-     * in <i>this</i> description.<BR>
-     * Due to bidirectionality if <i>this</i> description is a {@link SpecimenDescription specimen description},
-     * <i>this</i> description will also be removed from the set of specimen
-     * descriptions corresponding to the given specimen or observation.
-     *
-     * @param  describedSpecimenOrObservation   the specimen or observation which should be removed
-     * @see                                                                    #getDescribedSpecimenOrObservations()
-     * @see                                                                    #addDescribedSpecimenOrObservations(SpecimenOrObservationBase)
-     * @see                                                                    SpecimenOrObservationBase#removeDescription(DescriptionBase)
-     */
-    public void removeDescribedSpecimenOrObservation(SpecimenOrObservationBase describedSpecimenOrObservation) {
-        this.describedSpecimenOrObservations.remove(describedSpecimenOrObservation);
-        if (describedSpecimenOrObservation.getDescriptions().contains(this)){
-            describedSpecimenOrObservation.removeDescription(this);
-        }
-    }
-
-    /**
+    public SpecimenOrObservationBase getDescribedSpecimenOrObservation() {
+               return describedSpecimenOrObservation;
+       }
+
+
+       /**
+        * @see #getDescribedSpecimenOrObservation()
+        * @param describedSpecimenOrObservation
+        */
+       //TODO bidirectional method should maybe removed as a description should belong to its specimen or taxon
+    public void setDescribedSpecimenOrObservation(SpecimenOrObservationBase describedSpecimenOrObservation) {
+               if (describedSpecimenOrObservation == null ){
+                       this.describedSpecimenOrObservation.removeDescription(this);
+               }else if (! describedSpecimenOrObservation.getDescriptions().contains(this)){
+                       describedSpecimenOrObservation.addDescription(this);
+               }
+               this.describedSpecimenOrObservation = describedSpecimenOrObservation;
+       }
+
+
+       /**
      * Returns the set of {@link Reference references} used as sources for <i>this</i> description as a
      * whole. More than one source can be used for a general description without
      * assigning for each data element of the description one of those sources.
@@ -425,12 +418,6 @@ public abstract class DescriptionBase<S extends IIdentifiableEntityCacheStrategy
                 result.addElement(newElement);
             }
 
-            //specimen or observations
-            result.describedSpecimenOrObservations = new HashSet<SpecimenOrObservationBase>();
-            for (SpecimenOrObservationBase specimenOrObservation : getDescribedSpecimenOrObservations()){
-                specimenOrObservation.addDescription(result);
-            }
-
             //no changes to: imageGallery
             return result;
         } catch (CloneNotSupportedException e) {
index dac87406eb6144e575c96d9a27d43caad4c740d1..ff209032c923d9382968fc8380d3f3b4f88fc626 100644 (file)
@@ -67,9 +67,9 @@ public class SpecimenDescription extends DescriptionBase<IIdentifiableEntityCach
         * Creates a new empty specimen description instance.
         */
        public static SpecimenDescription NewInstance(SpecimenOrObservationBase specimen){
-               SpecimenDescription result =  new SpecimenDescription();
-               result.addDescribedSpecimenOrObservation(specimen);
-               return result;
+               SpecimenDescription description =  new SpecimenDescription();
+               description.setDescribedSpecimenOrObservation(specimen);
+               return description;
        }
        
 //*********************** CLONE ********************************************************/
index 5cac25737392a3d0f37faf81d5b607c1067ea41b..8abde9f350c7bef8a7175b13a110f82d9c576438 100644 (file)
@@ -98,9 +98,6 @@ public class TaxonDescription extends DescriptionBase<IIdentifiableEntityCacheSt
     private Taxon taxon;
 
 
-    public void setTaxon(Taxon taxon) {
-        this.taxon = taxon;
-    }
 
     /**
      * Creates a new empty taxon description instance.
@@ -158,6 +155,10 @@ public class TaxonDescription extends DescriptionBase<IIdentifiableEntityCacheSt
     }
 
 
+    public void setTaxon(Taxon taxon) {
+        this.taxon = taxon;
+    }
+
     /**
      * Returns the set of {@link NamedArea named areas} indicating the geospatial
      * data where <i>this</i> taxon description is valid.
index e3fbf500dd7e4135a507d8966ebe901dee3033be..ecdd3eb9dd47b647eaa54654f9347d485e81bdc0 100644 (file)
@@ -45,19 +45,17 @@ import org.hibernate.annotations.Index;
 import org.hibernate.annotations.Table;
 import org.hibernate.envers.Audited;
 import org.hibernate.search.annotations.Analyze;
+import org.hibernate.search.annotations.ContainedIn;
 import org.hibernate.search.annotations.Field;
 import org.hibernate.search.annotations.IndexedEmbedded;
 import org.hibernate.search.annotations.NumericField;
 
 import eu.etaxonomy.cdm.jaxb.MultilanguageTextAdapter;
 import eu.etaxonomy.cdm.model.common.DefinedTerm;
-import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.cdm.model.common.IMultiLanguageTextHolder;
 import eu.etaxonomy.cdm.model.common.Language;
 import eu.etaxonomy.cdm.model.common.LanguageString;
 import eu.etaxonomy.cdm.model.common.MultilanguageText;
-import eu.etaxonomy.cdm.model.common.TermType;
-import eu.etaxonomy.cdm.model.common.TermVocabulary;
 import eu.etaxonomy.cdm.model.description.DescriptionBase;
 import eu.etaxonomy.cdm.model.description.SpecimenDescription;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
@@ -112,11 +110,13 @@ public abstract class SpecimenOrObservationBase<S extends IIdentifiableEntityCac
        
        @XmlElementWrapper(name = "Descriptions")
        @XmlElement(name = "Description")
-       @ManyToMany(fetch = FetchType.LAZY,mappedBy="describedSpecimenOrObservations",targetEntity=DescriptionBase.class)
+       @OneToMany(mappedBy="describedSpecimenOrObservation", fetch = FetchType.LAZY)
        @Cascade(CascadeType.SAVE_UPDATE)
-       @NotNull
+    @ContainedIn
+    @NotNull
        private Set<DescriptionBase> descriptions = new HashSet<DescriptionBase>();
-
+       
+       
        @XmlElementWrapper(name = "Determinations")
        @XmlElement(name = "Determination")
        @OneToMany(mappedBy="identifiedUnit", orphanRemoval=true)
@@ -275,7 +275,8 @@ public abstract class SpecimenOrObservationBase<S extends IIdentifiableEntityCac
                return specimenDescriptions;
        }
        /**
-        * Returns the {@link SpecimenDescription specimen descriptions} this specimen is part of.
+        * Returns the {@link SpecimenDescription specimen descriptions} which act as an image gallery
+        * and which this specimen is part of.
         * @see #getDescriptions()
         * @return
         */
@@ -292,18 +293,17 @@ public abstract class SpecimenOrObservationBase<S extends IIdentifiableEntityCac
                return specimenDescriptions;
        }
 
+       
        /**
         * Adds a new description to this specimen or observation
         * @param description
         */
        public void addDescription(DescriptionBase description) {
-               this.descriptions.add(description);
-               if (! description.getDescribedSpecimenOrObservations().contains(this)){
-                       description.addDescribedSpecimenOrObservation(this);
+               if (description.getDescribedSpecimenOrObservation() != null){
+                       description.getDescribedSpecimenOrObservation().removeDescription(description);
                }
-//             Method method = ReflectionUtils.findMethod(SpecimenDescription.class, "addDescribedSpecimenOrObservation", new Class[] {SpecimenOrObservationBase.class});
-//             ReflectionUtils.makeAccessible(method);
-//             ReflectionUtils.invokeMethod(method, description, new Object[] {this});
+               descriptions.add(description);
+               description.setDescribedSpecimenOrObservation(this);
        }
 
        /**
@@ -311,13 +311,10 @@ public abstract class SpecimenOrObservationBase<S extends IIdentifiableEntityCac
         * @param description
         */
        public void removeDescription(DescriptionBase description) {
-               this.descriptions.remove(description);
-               if (description.getDescribedSpecimenOrObservations().contains(this)){
-                       description.removeDescribedSpecimenOrObservation(this);
-               }
-//             Method method = ReflectionUtils.findMethod(SpecimenDescription.class, "removeDescribedSpecimenOrObservations", new Class[] {SpecimenOrObservationBase.class});
-//             ReflectionUtils.makeAccessible(method);
-//             ReflectionUtils.invokeMethod(method, description, new Object[] {this});
+        boolean existed = descriptions.remove(description);
+        if (existed){
+               description.setDescribedSpecimenOrObservation(null);
+        }
        }
 
        public Set<DerivationEvent> getDerivationEvents() {
index 0fbd2aaf3480df77a0b3af78c5038766a5f8c3c1..b336ca3f9635767d980a50ea4ece6ba02537c703 100644 (file)
@@ -144,7 +144,6 @@ public class Taxon extends TaxonBase<IIdentifiableEntityCacheStrategy<Taxon>> im
     private Taxon taxonomicParentCache;
 
 
-
     @XmlElementWrapper(name = "taxonNodes")
     @XmlElement(name = "taxonNode")
     @XmlIDREF
@@ -158,33 +157,25 @@ public class Taxon extends TaxonBase<IIdentifiableEntityCacheStrategy<Taxon>> im
     @XmlElement(name = "TaxonomicChildrenCount")
     @Deprecated //will be removed in future versions. Use Classification/TaxonNode instead
     private int taxonomicChildrenCount;
-
-// ************* CONSTRUCTORS *************/
-
-    //TODO should be private, but still produces Spring init errors
-    @Deprecated
-    public Taxon(){
-        this.cacheStrategy = new TaxonBaseDefaultCacheStrategy<Taxon>();
-    }
-
+    
+// ************************* FACTORY METHODS ********************************/
+    
     /**
-     * Class constructor: creates a new (accepted/correct) taxon instance with
+     * Creates a new (accepted/correct) taxon instance with
      * the {@link eu.etaxonomy.cdm.model.name.TaxonNameBase taxon name} used and the {@link eu.etaxonomy.cdm.model.reference.Reference reference}
      * using it.
      *
      * @param  taxonNameBase   the taxon name used
      * @param  sec                             the reference using the taxon name
-     * @see                                            TaxonBase#TaxonBase(TaxonNameBase, Reference)
+     * @see                                            #Taxon(TaxonNameBase, Reference)
      */
-    public Taxon(TaxonNameBase taxonNameBase, Reference sec){
-        super(taxonNameBase, sec);
-        this.cacheStrategy = new TaxonBaseDefaultCacheStrategy<Taxon>();
+    public static Taxon NewInstance(TaxonNameBase taxonNameBase, Reference sec){
+        Taxon result = new Taxon(taxonNameBase, sec);
+        return result;
     }
 
-//********* METHODS **************************************/
-
     /**
-     * Creates a new (accepted/correct) taxon instance with
+     * Creates a new taxon instance with an unknown status (accepted/synonym) and with
      * the {@link eu.etaxonomy.cdm.model.name.TaxonNameBase taxon name} used and the {@link eu.etaxonomy.cdm.model.reference.Reference reference}
      * using it.
      *
@@ -192,26 +183,37 @@ public class Taxon extends TaxonBase<IIdentifiableEntityCacheStrategy<Taxon>> im
      * @param  sec                             the reference using the taxon name
      * @see                                            #Taxon(TaxonNameBase, Reference)
      */
-    public static Taxon NewInstance(TaxonNameBase taxonNameBase, Reference sec){
+    public static Taxon NewUnknownStatusInstance(TaxonNameBase taxonNameBase, Reference sec){
         Taxon result = new Taxon(taxonNameBase, sec);
+        result.setTaxonStatusUnknown(true);
         return result;
     }
+// ************* CONSTRUCTORS *************/
+
+    //TODO should be private, but still produces Spring init errors
+    @Deprecated
+    public Taxon(){
+        this.cacheStrategy = new TaxonBaseDefaultCacheStrategy<Taxon>();
+    }
 
     /**
-     * Creates a new taxon instance with an unknown status (accepted/synonym) and with
+     * Class constructor: creates a new (accepted/correct) taxon instance with
      * the {@link eu.etaxonomy.cdm.model.name.TaxonNameBase taxon name} used and the {@link eu.etaxonomy.cdm.model.reference.Reference reference}
      * using it.
      *
      * @param  taxonNameBase   the taxon name used
      * @param  sec                             the reference using the taxon name
-     * @see                                            #Taxon(TaxonNameBase, Reference)
+     * @see                                            TaxonBase#TaxonBase(TaxonNameBase, Reference)
      */
-    public static Taxon NewUnknownStatusInstance(TaxonNameBase taxonNameBase, Reference sec){
-        Taxon result = new Taxon(taxonNameBase, sec);
-        result.setTaxonStatusUnknown(true);
-        return result;
+    public Taxon(TaxonNameBase taxonNameBase, Reference sec){
+        super(taxonNameBase, sec);
+        this.cacheStrategy = new TaxonBaseDefaultCacheStrategy<Taxon>();
     }
 
+//********* METHODS **************************************/
+
+
+
     /**
      * Returns the set of {@link eu.etaxonomy.cdm.model.description.TaxonDescription taxon descriptions}
      * concerning <i>this</i> taxon.
index a4b2885619a23660bc48d1ab6b2868773e0baa34..eabcb5f6100e660b2353cdb20f1c90a8952f8c88 100644 (file)
@@ -12,7 +12,6 @@ package eu.etaxonomy.cdm.strategy.cache.description;
 import java.util.Set;\r
 import java.util.UUID;\r
 \r
-import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.model.common.Marker;\r
 import eu.etaxonomy.cdm.model.common.MarkerType;\r
 import eu.etaxonomy.cdm.model.description.SpecimenDescription;\r
@@ -32,15 +31,12 @@ public class SpecimenDescriptionDefaultCacheStrategy extends StrategyBase implem
 \r
        public String getTitleCache(SpecimenDescription specimenDescription) {\r
                String title;\r
-               Set<SpecimenOrObservationBase> specimens = specimenDescription.getDescribedSpecimenOrObservations(); \r
-               if (specimens.isEmpty()){\r
+               SpecimenOrObservationBase specimen = specimenDescription.getDescribedSpecimenOrObservation(); \r
+               if (specimen == null){\r
                        title = getFirstPart(specimenDescription);\r
                        title = title.replace(" for ", "");\r
                }else{\r
-                       title = null;\r
-                       for (SpecimenOrObservationBase specimen : specimens){\r
-                               title = CdmUtils.concat(",", title, specimen.getTitleCache());\r
-                       }\r
+                       title = specimen.getTitleCache();\r
                        title = getFirstPart(specimenDescription) + title;\r
                }\r
                return title;\r
index 450f571c498afca8065c62169f0a327c051d9ba3..8808c9c90f5df7d013de5da686b80f28250f990e 100644 (file)
@@ -84,6 +84,84 @@ public class SpecimenTest {
                specimen.setPreservation(null);\r
        }\r
        \r
+       @Test\r
+       public void testBidirectionalSpecimenDescription(){\r
+               Assert.assertNotNull("Specimen should exist", specimen);\r
+               \r
+               SpecimenDescription desc = SpecimenDescription.NewInstance(specimen);\r
+               Assert.assertNotNull("Description should exist.", desc);\r
+               Assert.assertSame("Descriptions specimen should be set correctly", desc.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertTrue("Specimen should contain description", specimen.getDescriptions().contains(desc));\r
+               \r
+               SpecimenDescription desc2 = SpecimenDescription.NewInstance();\r
+               Assert.assertNotNull("Description should exist.", desc2);\r
+               specimen.addDescription(desc2);\r
+               Assert.assertSame("Description2 specimen should be set correctly", desc2.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertSame("Descriptions specimen should still be set correctly", desc.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertTrue("Specimen should contain description2", specimen.getDescriptions().contains(desc2));\r
+               Assert.assertTrue("Specimen should still contain description", specimen.getDescriptions().contains(desc));\r
+               \r
+               SpecimenDescription desc3 = SpecimenDescription.NewInstance();\r
+               Assert.assertNotNull("Description should exist.", desc3);\r
+               desc3.setDescribedSpecimenOrObservation(specimen);\r
+               Assert.assertSame("Description3 specimen should be set correctly", desc3.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertSame("Descriptions2 specimen should still be set correctly", desc2.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertSame("Descriptions specimen should still be set correctly", desc.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertTrue("Specimen should contain description3", specimen.getDescriptions().contains(desc3));\r
+               Assert.assertTrue("Specimen should still contain description2", specimen.getDescriptions().contains(desc2));\r
+               Assert.assertTrue("Specimen should still contain description", specimen.getDescriptions().contains(desc));\r
+\r
+               \r
+               //change specimen of a given description\r
+               DerivedUnit specimen2 = DerivedUnit.NewPreservedSpecimenInstance();\r
+               Assert.assertNotNull("Specimen should exist.", specimen2);\r
+               desc3.setDescribedSpecimenOrObservation(specimen2);\r
+               Assert.assertSame("Description3 new specimen should be set correctly", desc3.getDescribedSpecimenOrObservation(),specimen2);\r
+               Assert.assertSame("Descriptions2 specimen should still be set correctly", desc2.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertSame("Descriptions specimen should still be set correctly", desc.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertTrue("Specimen2 should contain description3", specimen2.getDescriptions().contains(desc3));\r
+               Assert.assertEquals("Specimen2 should contain exactly 1 description", 1, specimen2.getDescriptions().size());\r
+               Assert.assertFalse("Specimen should no longer contain description3", specimen.getDescriptions().contains(desc3));\r
+               Assert.assertTrue("Specimen should still contain description2", specimen.getDescriptions().contains(desc2));\r
+               Assert.assertTrue("Specimen should still contain description", specimen.getDescriptions().contains(desc));\r
+\r
+               //remove description which is not contained\r
+               specimen.removeDescription(desc3);\r
+               Assert.assertSame("Nothing should have changed", desc3.getDescribedSpecimenOrObservation(),specimen2);\r
+               Assert.assertSame("Nothing should have changed", desc2.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertSame("Nothing should have changed", desc.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertTrue("Nothing should have changed", specimen2.getDescriptions().contains(desc3));\r
+               Assert.assertEquals("Nothing should have changed", 1, specimen2.getDescriptions().size());\r
+               Assert.assertFalse("Nothing should have changed", specimen.getDescriptions().contains(desc3));\r
+               Assert.assertTrue("Nothing should have changed", specimen.getDescriptions().contains(desc2));\r
+               Assert.assertTrue("Nothing should have changed", specimen.getDescriptions().contains(desc));\r
+               \r
+               //remove description\r
+               specimen.removeDescription(desc2);\r
+               Assert.assertNull("Descriptions2 specimen should not exist anymore", desc2.getDescribedSpecimenOrObservation());\r
+               Assert.assertSame("Description3 specimen should still be set correctly", desc3.getDescribedSpecimenOrObservation(),specimen2);\r
+               Assert.assertSame("Descriptions specimen should still be set correctly", desc.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertTrue("Specimen2 should still contain description3", specimen2.getDescriptions().contains(desc3));\r
+               Assert.assertEquals("Specimen2 should still contain exactly 1 description", 1, specimen2.getDescriptions().size());\r
+               Assert.assertFalse("Specimen should not contain description2 anymore", specimen.getDescriptions().contains(desc2));\r
+               Assert.assertFalse("Specimen should still no longer contain description3", specimen.getDescriptions().contains(desc3));\r
+               Assert.assertTrue("Specimen should still contain description", specimen.getDescriptions().contains(desc));\r
+\r
+               //remove description by setting null specimen\r
+               desc3.setDescribedSpecimenOrObservation(null);\r
+               Assert.assertNull("Description3 specimen should not exist anymore", desc3.getDescribedSpecimenOrObservation());\r
+               Assert.assertNull("Descriptions2 specimen should still not exist anymore", desc2.getDescribedSpecimenOrObservation());\r
+               Assert.assertSame("Descriptions specimen should still be set correctly", desc.getDescribedSpecimenOrObservation(),specimen);\r
+               Assert.assertFalse("Specimen2 should not contain description3 anymore", specimen2.getDescriptions().contains(desc3));\r
+               Assert.assertEquals("Specimen2 should contain no description now", 0, specimen2.getDescriptions().size());\r
+               Assert.assertFalse("Specimen should still no longer contain description2", specimen.getDescriptions().contains(desc2));\r
+               Assert.assertFalse("Specimen should still no longer contain description3", specimen.getDescriptions().contains(desc3));\r
+               Assert.assertTrue("Specimen should still contain description", specimen.getDescriptions().contains(desc));\r
+               \r
+               \r
+       }\r
+\r
+       \r
        @Test\r
        public void testBidirectionalTypeDesignation(){\r
                SpecimenTypeDesignation desig1 = SpecimenTypeDesignation.NewInstance();\r
index 0574944046fd9326c39422219f93c0b319cb2f5e..15644e059168de9cdce49fc4519b31f862ae26e9 100644 (file)
@@ -214,9 +214,17 @@ public class SchemaUpdater_31_33 extends SchemaUpdaterBase {
                
                //TODO rename FK column states_id -> stateData_id in DescriptionElementBase_StateData(+AUD)  #2923
                
-               //add sortIndex column to TaxonNode and fill with values (compare with FeatureNode filling, however, this
+               //TODO add sortIndex column to TaxonNode and fill with values (compare with FeatureNode filling, however, this
 //             had a bad performance
                
+               //specimen descriptions #
+               //TODO add column DescriptionBase.Specimen_ID
+               
+               //TODO updated DescriptionBase.Specimen_ID data
+               
+               //TODO remove tables DescriptionBase_SpecimenOrObservationBase(_AUD)
+               
+               
                return stepList;
        }
 
index 590112ea170434c5898f7bfd79a1f498a683e5f1..b5f065ee2ebe1224042db1e913c3345d4001fcdf 100644 (file)
@@ -1019,6 +1019,7 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE(
     IMAGEGALLERY BOOLEAN NOT NULL,
     CREATEDBY_ID INTEGER,
     UPDATEDBY_ID INTEGER,
+    SPECIMEN_ID INTEGER,
     TAXON_ID INTEGER,
     TAXONNAME_ID INTEGER
 );
@@ -1041,6 +1042,7 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_AUD(
     IMAGEGALLERY BOOLEAN,
     CREATEDBY_ID INTEGER,
     UPDATEDBY_ID INTEGER,
+    SPECIMEN_ID INTEGER,
     TAXON_ID INTEGER,
     TAXONNAME_ID INTEGER
 );
@@ -1167,18 +1169,6 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SCOPE_AUD(
     REVTYPE TINYINT
 );
 -- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SCOPE_AUD;
-CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE(
-    DESCRIPTIONS_ID INTEGER NOT NULL,
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID INTEGER NOT NULL
-);
--- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE;
-CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD(
-    REV INTEGER NOT NULL,
-    DESCRIPTIONS_ID INTEGER NOT NULL,
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID INTEGER NOT NULL,
-    REVTYPE TINYINT
-);
--- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD;
 CREATE CACHED TABLE PUBLIC.DESCRIPTIONELEMENTBASE(
     DTYPE VARCHAR(31) NOT NULL,
     ID INTEGER NOT NULL,
@@ -4514,7 +4504,6 @@ ALTER TABLE PUBLIC.ORIGINALSOURCEBASE_ANNOTATION ADD CONSTRAINT PUBLIC.CONSTRAIN
 ALTER TABLE PUBLIC.MEDIA_LANGUAGESTRING ADD CONSTRAINT PUBLIC.CONSTRAINT_969 PRIMARY KEY(MEDIA_ID, TITLE_MAPKEY_ID);
 ALTER TABLE PUBLIC.WORKINGSET_DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_A53 PRIMARY KEY(WORKINGSET_ID, DESCRIPTIONS_ID);
 ALTER TABLE PUBLIC.SEQUENCE_REFERENCE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_514 PRIMARY KEY(REV, SEQUENCE_ID, CITATIONS_ID);
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_4D8 PRIMARY KEY(DESCRIPTIONS_ID, DESCRIBEDSPECIMENOROBSERVATIONS_ID);
 ALTER TABLE PUBLIC.FEATURETREE_ORIGINALSOURCEBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_906 PRIMARY KEY(FEATURETREE_ID, SOURCES_ID);
 ALTER TABLE PUBLIC.RIGHTS ADD CONSTRAINT PUBLIC.CONSTRAINT_901 PRIMARY KEY(ID);
 ALTER TABLE PUBLIC.MEDIA_ORIGINALSOURCEBASE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_909 PRIMARY KEY(REV, MEDIA_ID, SOURCES_ID);
@@ -4699,7 +4688,6 @@ ALTER TABLE PUBLIC.DEFINEDTERMBASE_REPRESENTATION_AUD ADD CONSTRAINT PUBLIC.CONS
 ALTER TABLE PUBLIC.TAXONBASE_RIGHTS_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_61 PRIMARY KEY(REV, TAXONBASE_ID, RIGHTS_ID);
 ALTER TABLE PUBLIC.TERMVOCABULARY_CREDIT ADD CONSTRAINT PUBLIC.CONSTRAINT_1DF PRIMARY KEY(TERMVOCABULARY_ID, SORTINDEX);
 ALTER TABLE PUBLIC.FEATURENODE ADD CONSTRAINT PUBLIC.CONSTRAINT_69E PRIMARY KEY(ID);
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_DB5 PRIMARY KEY(REV, DESCRIPTIONS_ID, DESCRIBEDSPECIMENOROBSERVATIONS_ID);
 ALTER TABLE PUBLIC.USERACCOUNT_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_850 PRIMARY KEY(ID, REV);
 ALTER TABLE PUBLIC.MEDIAKEY_TAXON ADD CONSTRAINT PUBLIC.CONSTRAINT_3AB PRIMARY KEY(MEDIAKEY_ID, TAXON_ID);
 ALTER TABLE PUBLIC.DERIVATIONEVENT ADD CONSTRAINT PUBLIC.CONSTRAINT_83E PRIMARY KEY(ID);
@@ -5133,7 +5121,7 @@ ALTER TABLE PUBLIC.TERMVOCABULARY_REPRESENTATION ADD CONSTRAINT PUBLIC.FKA408B63
 ALTER TABLE PUBLIC.FEATURENODE_DEFINEDTERMBASE_INAPPLICABLEIF ADD CONSTRAINT PUBLIC.FK56833D0152FCC4B FOREIGN KEY(FEATURENODE_ID) REFERENCES PUBLIC.FEATURENODE(ID) NOCHECK;
 ALTER TABLE PUBLIC.POLYTOMOUSKEY_ORIGINALSOURCEBASE_AUD ADD CONSTRAINT PUBLIC.FKE644349534869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.COLLECTION_MEDIA_AUD ADD CONSTRAINT PUBLIC.FK9AABDB5434869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD8033B8A841 FOREIGN KEY(DESCRIPTIONS_ID) REFERENCES PUBLIC.DESCRIPTIONBASE(ID) NOCHECK;
+ALTER TABLE PUBLIC.DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD8033B8A841 FOREIGN KEY(SPECIMEN_ID) REFERENCES PUBLIC.SPECIMENOROBSERVATIONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.STATEDATA_AUD ADD CONSTRAINT PUBLIC.FKDA6A700C34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FK21CA3272C8505DB FOREIGN KEY(PRESERVATION_ID) REFERENCES PUBLIC.DEFINEDTERMBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.MEDIA_RIGHTS ADD CONSTRAINT PUBLIC.FKDB1266D2C13F7B21 FOREIGN KEY(RIGHTS_ID) REFERENCES PUBLIC.RIGHTS(ID) NOCHECK;
@@ -5393,7 +5381,6 @@ ALTER TABLE PUBLIC.DESCRIPTIONBASE_CREDIT_AUD ADD CONSTRAINT PUBLIC.FK2EBEFB1C34
 ALTER TABLE PUBLIC.TAXONBASE ADD CONSTRAINT PUBLIC.FK9249B49B74FED214 FOREIGN KEY(SEC_ID) REFERENCES PUBLIC.REFERENCE(ID) NOCHECK;
 ALTER TABLE PUBLIC.SEQUENCE_MARKER ADD CONSTRAINT PUBLIC.FK3D22B278D57FFDD5 FOREIGN KEY(SEQUENCE_ID) REFERENCES PUBLIC.SEQUENCE(ID) NOCHECK;
 ALTER TABLE PUBLIC.TAXONRELATIONSHIP ADD CONSTRAINT PUBLIC.FK7482BA02AEB7F3BE FOREIGN KEY(CITATION_ID) REFERENCES PUBLIC.REFERENCE(ID) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD805C9E3461 FOREIGN KEY(DESCRIBEDSPECIMENOROBSERVATIONS_ID) REFERENCES PUBLIC.SPECIMENOROBSERVATIONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.ANNOTATION ADD CONSTRAINT PUBLIC.FK1A21C74FDF299D00 FOREIGN KEY(ANNOTATIONTYPE_ID) REFERENCES PUBLIC.DEFINEDTERMBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.AGENTBASE_MARKER ADD CONSTRAINT PUBLIC.FK365D5D6386EFC5D4 FOREIGN KEY(AGENTBASE_ID) REFERENCES PUBLIC.AGENTBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.TAXONBASE_ANNOTATION ADD CONSTRAINT PUBLIC.FK41ED09739C9D39 FOREIGN KEY(TAXONBASE_ID) REFERENCES PUBLIC.TAXONBASE(ID) NOCHECK;
@@ -5756,7 +5743,6 @@ ALTER TABLE PUBLIC.POLYTOMOUSKEYNODE_LANGUAGESTRING ADD CONSTRAINT PUBLIC.FK5574
 ALTER TABLE PUBLIC.WORKINGSET ADD CONSTRAINT PUBLIC.FK668D5B9123DB7F04 FOREIGN KEY(DESCRIPTIVESYSTEM_ID) REFERENCES PUBLIC.FEATURETREE(ID) NOCHECK;
 ALTER TABLE PUBLIC.STATEDATA ADD CONSTRAINT PUBLIC.FKFB1697BB4FF2DB2C FOREIGN KEY(CREATEDBY_ID) REFERENCES PUBLIC.USERACCOUNT(ID) NOCHECK;
 ALTER TABLE PUBLIC.AGENTBASE_AGENTBASE_AUD ADD CONSTRAINT PUBLIC.FKA8A87CFE34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD ADD CONSTRAINT PUBLIC.FKF1B33B5134869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.TERMVOCABULARY_ORIGINALSOURCEBASE ADD CONSTRAINT PUBLIC.FK8F2D512A258E060 FOREIGN KEY(TERMVOCABULARY_ID) REFERENCES PUBLIC.TERMVOCABULARY(ID) NOCHECK;
 ALTER TABLE PUBLIC.DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.FKFF4D58CDDE9A3E39 FOREIGN KEY(TAXON_ID) REFERENCES PUBLIC.TAXONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.NOMENCLATURALSTATUS_MARKER_AUD ADD CONSTRAINT PUBLIC.FK8619495F34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
index 08dd47308653591ea924d04046b981e304aeaed6..bccfc867d8679cfc6207cd046abe4c394ed63464 100644 (file)
   <DESCRIPTIONBASE_RIGHTS_AUD/>
   <DESCRIPTIONBASE_SCOPE/>
   <DESCRIPTIONBASE_SCOPE_AUD/>
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE/>
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD/>
   <DESCRIPTIONELEMENTBASE/>
   <DESCRIPTIONELEMENTBASE_ANNOTATION/>
   <DESCRIPTIONELEMENTBASE_ANNOTATION_AUD/>
index 539fe4176a9488f12197bfbf802b9835b079996f..d76a003c232830ded5e39369067abb448cdef7a9 100644 (file)
 <DESCRIPTIONBASE_RIGHTS_AUD />\r
 <DESCRIPTIONBASE_SCOPE />\r
 <DESCRIPTIONBASE_SCOPE_AUD />\r
-<DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE />\r
-<DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD />\r
 <DESCRIPTIONELEMENTBASE />\r
 <DESCRIPTIONELEMENTBASE_ANNOTATION />\r
 <DESCRIPTIONELEMENTBASE_ANNOTATION_AUD />\r
index 469607ed5b007f55bd9c001027f7cdfaab2b66d7..cf8370dd0c1e701dedc09cf96fc9fb7c3f31a9ec 100644 (file)
   <ANNOTATION_AUD ID="1001" REV="1001" REVTYPE="0" CREATED="2009-06-25 14:42:27.0" UUID="8cfc78b1-584d-43a0-8f46-820fa656033b" TEXT="A1" LANGUAGE_ID="115"/>\r
   <AUDITEVENT REVISIONNUMBER="1000" DATE="2009-06-25 14:42:23.544" TIMESTAMP="1245933743544" UUID="c9c24dd0-6e4d-434b-a310-3e2c6e1ea7c2"/>\r
   <AUDITEVENT REVISIONNUMBER="1001" DATE="2009-06-25 14:42:27.778" TIMESTAMP="1245933747778" UUID="1e5f0107-9fd8-4b37-9cea-d2c876098619"/>\r
-  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="1001" CREATED="2009-06-25 18:26:26.0" UUID="40cb1905-f9d8-4647-87ad-40b37a17e85b" PROTECTEDTITLECACHE="true" TITLECACHE="desc2" IMAGEGALLERY="false"/>\r
-  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="1002" CREATED="2009-06-25 18:26:26.0" UUID="3d7d643c-5944-47d6-8938-e884f6d79a70" PROTECTEDTITLECACHE="true" TITLECACHE="desc1" IMAGEGALLERY="false"/>\r
-  <DESCRIPTIONBASE_AUD DTYPE="SpecimenDescription" ID="1001" REV="1001" REVTYPE="0" CREATED="2009-06-25 18:26:26.0" UUID="40cb1905-f9d8-4647-87ad-40b37a17e85b" PROTECTEDTITLECACHE="true" TITLECACHE="desc2" IMAGEGALLERY="false"/>\r
-  <DESCRIPTIONBASE_AUD DTYPE="SpecimenDescription" ID="1002" REV="1001" REVTYPE="0" CREATED="2009-06-25 18:26:26.0" UUID="3d7d643c-5944-47d6-8938-e884f6d79a70" PROTECTEDTITLECACHE="true" TITLECACHE="desc1" IMAGEGALLERY="false"/>\r
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE DESCRIPTIONS_ID="1001" DESCRIBEDSPECIMENOROBSERVATIONS_ID="1001"/>\r
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE DESCRIPTIONS_ID="1002" DESCRIBEDSPECIMENOROBSERVATIONS_ID="1001"/>\r
+  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="1001" CREATED="2009-06-25 18:26:26.0" UUID="40cb1905-f9d8-4647-87ad-40b37a17e85b" PROTECTEDTITLECACHE="true" TITLECACHE="desc2" IMAGEGALLERY="false" SPECIMEN_ID="1001"/>\r
+  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="1002" CREATED="2009-06-25 18:26:26.0" UUID="3d7d643c-5944-47d6-8938-e884f6d79a70" PROTECTEDTITLECACHE="true" TITLECACHE="desc1" IMAGEGALLERY="false" SPECIMEN_ID="1001"/>\r
+  <DESCRIPTIONBASE_AUD DTYPE="SpecimenDescription" ID="1001" REV="1001" REVTYPE="0" CREATED="2009-06-25 18:26:26.0" UUID="40cb1905-f9d8-4647-87ad-40b37a17e85b" PROTECTEDTITLECACHE="true" TITLECACHE="desc2" IMAGEGALLERY="false" SPECIMEN_ID="1001"/>\r
+  <DESCRIPTIONBASE_AUD DTYPE="SpecimenDescription" ID="1002" REV="1001" REVTYPE="0" CREATED="2009-06-25 18:26:26.0" UUID="3d7d643c-5944-47d6-8938-e884f6d79a70" PROTECTEDTITLECACHE="true" TITLECACHE="desc1" IMAGEGALLERY="false" SPECIMEN_ID="1001"/>\r
   <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" RECORDBASIS="1" ID="1001" CREATED="2009-06-25 18:26:26.0" UUID="41539e9c-3764-4f14-9712-2d07d00c8e4c" PROTECTEDTITLECACHE="false" TITLECACHE="" PUBLISH="true"/>\r
   <SPECIMENOROBSERVATIONBASE_AUD DTYPE="DerivedUnit" RECORDBASIS="1" ID="1001" REV="1001" REVTYPE="1" CREATED="2009-06-25 18:26:26.0" UUID="41539e9c-3764-4f14-9712-2d07d00c8e4c" PROTECTEDTITLECACHE="false" TITLECACHE="" PUBLISH="true"/>\r
 \r
index 05f096162d5b62c4fd4b700150a72554bcd1971e..73d9965c4d50ca0700f94b336728c2131713e7ca 100644 (file)
@@ -85,8 +85,6 @@
     DESCRIPTIONBASE_RIGHTS_AUD*,
     DESCRIPTIONBASE_SCOPE*,
     DESCRIPTIONBASE_SCOPE_AUD*,
-    DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE*,
-    DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD*,
     DESCRIPTIONELEMENTBASE*,
     DESCRIPTIONELEMENTBASE_ANNOTATION*,
     DESCRIPTIONELEMENTBASE_ANNOTATION_AUD*,
     TITLECACHE CDATA #IMPLIED
     CREATEDBY_ID CDATA #IMPLIED
     UPDATEDBY_ID CDATA #IMPLIED
-    TAXON_FK CDATA #IMPLIED
-    TAXONNAME_FK CDATA #IMPLIED
+    SPECIMEN_ID CDATA #IMPLIED
+    TAXON_ID CDATA #IMPLIED
+    TAXONNAME_ID CDATA #IMPLIED
     IMAGEGALLERY CDATA #IMPLIED
 >
 
     TITLECACHE CDATA #IMPLIED
     CREATEDBY_ID CDATA #IMPLIED
     UPDATEDBY_ID CDATA #IMPLIED
-    TAXON_FK CDATA #IMPLIED
-    TAXONNAME_FK CDATA #IMPLIED
+    SPECIMEN_ID CDATA #IMPLIED
+    TAXON_ID CDATA #IMPLIED
+    TAXONNAME_ID CDATA #IMPLIED
     IMAGEGALLERY CDATA #IMPLIED
 >
 
     REVTYPE CDATA #IMPLIED
 >
 
-<!ELEMENT DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE EMPTY>
-<!ATTLIST DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE
-    DESCRIPTIONS_ID CDATA #REQUIRED
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID CDATA #REQUIRED
->
-
-<!ELEMENT DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD EMPTY>
-<!ATTLIST DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD
-    REV CDATA #REQUIRED
-    DESCRIPTIONS_ID CDATA #REQUIRED
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID CDATA #REQUIRED
-    REVTYPE CDATA #IMPLIED
->
-
 <!ELEMENT DESCRIPTIONELEMENTBASE EMPTY>
 <!ATTLIST DESCRIPTIONELEMENTBASE
     DTYPE CDATA #IMPLIED
index 4843bc2e200259df9c0ff81c2c74e1b34cc133c4..2ed6a6dde73a46f6602567b334a4151d46cd91e3 100644 (file)
@@ -1937,14 +1937,15 @@ public class DerivedUnitFacade {
         */\r
        private void testSpecimenInImageGallery(SpecimenDescription imageGallery, SpecimenOrObservationBase specimen)\r
                                throws DerivedUnitFacadeNotSupportedException {\r
-               Set<SpecimenOrObservationBase> imageGallerySpecimens = imageGallery.getDescribedSpecimenOrObservations();\r
-               if (imageGallerySpecimens.size() < 1) {\r
+               SpecimenOrObservationBase imageGallerySpecimen = imageGallery.getDescribedSpecimenOrObservation();\r
+               if (imageGallerySpecimen == null) {\r
                        throw new DerivedUnitFacadeNotSupportedException(\r
                                        "Image Gallery has no Specimen attached. Please attache according specimen or field unit.");\r
                }\r
-               if (!imageGallerySpecimens.contains(specimen)) {\r
+               if (! imageGallerySpecimen.equals(specimen)) {\r
                        throw new DerivedUnitFacadeNotSupportedException(\r
-                                       "Image Gallery has not the facade's field object attached. Please add field object first to image gallery specimenOrObservation list.");\r
+                                       "Image Gallery has not the facade's field object attached. Please add field object first " +\r
+                                       "to image gallery specimenOrObservation list.");\r
                }\r
        }\r
 \r
index 2241bb52666e1f0914f8fc1d65f50a0edb67991d..d2da212c808ab2f6b26ba5090378c46967892138 100644 (file)
@@ -956,7 +956,7 @@ public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDa
                             //FIXME check if description is ALWAYS deletable\r
                             descriptionService.delete(desc);\r
                         }else{\r
-                            if (desc.getDescribedSpecimenOrObservations().size()>0){\r
+                            if (desc.getDescribedSpecimenOrObservation() != null){\r
                                 String message = "Taxon can't be deleted as it is used in a TaxonDescription" +\r
                                         " which also describes specimens or abservations";\r
                                     throw new ReferencedObjectUndeletableException(message);\r
index f182e8ce3792b64cb856862d0d824b0374304257..cb8283e4bf596fb575432626d00822d6255def7c 100644 (file)
@@ -40,7 +40,6 @@ import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;
 /**\r
  * @author a.mueller\r
  * @date 03.06.2010\r
- *\r
  */\r
 \r
 public class DerivedUnitFacadeFieldUnitCacheStrategyTest extends CdmIntegrationTest {\r
index e9dd180974f383bf53b1fd1acae447f33b080629..4a7a6eb3627d9df8745a1240f70dc6208ab7cd10 100644 (file)
@@ -217,7 +217,7 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
 \r
         try {\r
             SpecimenDescription imageGallery = SpecimenDescription.NewInstance();\r
-            imageGallery.addDescribedSpecimenOrObservation(facade.innerFieldUnit());\r
+            imageGallery.setDescribedSpecimenOrObservation(facade.innerFieldUnit());\r
             imageGallery.setImageGallery(true);\r
             TextData textData = TextData.NewInstance();\r
             textData.setFeature(imageFeature);\r
@@ -232,12 +232,12 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         this.service.save(facade.innerDerivedUnit());\r
 \r
          setComplete(); endTransaction();\r
-         try {if (true){printDataSet(System.out, new\r
-         String[]{"HIBERNATE_SEQUENCES","SPECIMENOROBSERVATIONBASE","SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT"\r
-         ,"DERIVATIONEVENT",\r
-         "DESCRIPTIONBASE","DESCRIPTIONELEMENTBASE","DESCRIPTIONELEMENTBASE_MEDIA","DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE",\r
-         "MEDIA", "MEDIAREPRESENTATION","MEDIAREPRESENTATIONPART"});}\r
-         } catch(Exception e) { logger.warn(e);}\r
+//         try {if (true){printDataSet(System.out, new\r
+//         String[]{"HIBERNATE_SEQUENCES","SPECIMENOROBSERVATIONBASE","SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT"\r
+//         ,"DERIVATIONEVENT",\r
+//         "DESCRIPTIONBASE","DESCRIPTIONELEMENTBASE","DESCRIPTIONELEMENTBASE_MEDIA",\r
+//         "MEDIA", "MEDIAREPRESENTATION","MEDIAREPRESENTATIONPART"});}\r
+//         } catch(Exception e) { logger.warn(e);}\r
 \r
     }\r
 \r
@@ -257,8 +257,7 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         try {\r
             SpecimenDescription imageGallery = SpecimenDescription\r
                     .NewInstance();\r
-            imageGallery.addDescribedSpecimenOrObservation(facade\r
-                    .innerDerivedUnit());\r
+            imageGallery.setDescribedSpecimenOrObservation(facade.innerDerivedUnit());\r
             imageGallery.setImageGallery(true);\r
             TextData textData = TextData.NewInstance();\r
             imageGallery.addElement(textData);\r
@@ -275,7 +274,7 @@ public class DerivedUnitFacadeTest extends CdmTransactionalIntegrationTest {
         // try {if (true){printDataSet(System.out, new\r
         // String[]{"HIBERNATE_SEQUENCES","SPECIMENOROBSERVATIONBASE","SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT"\r
         // ,"DERIVATIONEVENT",\r
-        // "DESCRIPTIONBASE","DESCRIPTIONELEMENTBASE","DESCRIPTIONELEMENTBASE_MEDIA","DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE",\r
+        // "DESCRIPTIONBASE","DESCRIPTIONELEMENTBASE","DESCRIPTIONELEMENTBASE_MEDIA",\r
         // "MEDIA", "MEDIAREPRESENTATION","MEDIAREPRESENTATIONPART"});}\r
         // } catch(Exception e) { logger.warn(e);}\r
 \r
index 590112ea170434c5898f7bfd79a1f498a683e5f1..b5f065ee2ebe1224042db1e913c3345d4001fcdf 100644 (file)
@@ -1019,6 +1019,7 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE(
     IMAGEGALLERY BOOLEAN NOT NULL,
     CREATEDBY_ID INTEGER,
     UPDATEDBY_ID INTEGER,
+    SPECIMEN_ID INTEGER,
     TAXON_ID INTEGER,
     TAXONNAME_ID INTEGER
 );
@@ -1041,6 +1042,7 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_AUD(
     IMAGEGALLERY BOOLEAN,
     CREATEDBY_ID INTEGER,
     UPDATEDBY_ID INTEGER,
+    SPECIMEN_ID INTEGER,
     TAXON_ID INTEGER,
     TAXONNAME_ID INTEGER
 );
@@ -1167,18 +1169,6 @@ CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SCOPE_AUD(
     REVTYPE TINYINT
 );
 -- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SCOPE_AUD;
-CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE(
-    DESCRIPTIONS_ID INTEGER NOT NULL,
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID INTEGER NOT NULL
-);
--- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE;
-CREATE CACHED TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD(
-    REV INTEGER NOT NULL,
-    DESCRIPTIONS_ID INTEGER NOT NULL,
-    DESCRIBEDSPECIMENOROBSERVATIONS_ID INTEGER NOT NULL,
-    REVTYPE TINYINT
-);
--- 0 +/- SELECT COUNT(*) FROM PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD;
 CREATE CACHED TABLE PUBLIC.DESCRIPTIONELEMENTBASE(
     DTYPE VARCHAR(31) NOT NULL,
     ID INTEGER NOT NULL,
@@ -4514,7 +4504,6 @@ ALTER TABLE PUBLIC.ORIGINALSOURCEBASE_ANNOTATION ADD CONSTRAINT PUBLIC.CONSTRAIN
 ALTER TABLE PUBLIC.MEDIA_LANGUAGESTRING ADD CONSTRAINT PUBLIC.CONSTRAINT_969 PRIMARY KEY(MEDIA_ID, TITLE_MAPKEY_ID);
 ALTER TABLE PUBLIC.WORKINGSET_DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_A53 PRIMARY KEY(WORKINGSET_ID, DESCRIPTIONS_ID);
 ALTER TABLE PUBLIC.SEQUENCE_REFERENCE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_514 PRIMARY KEY(REV, SEQUENCE_ID, CITATIONS_ID);
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_4D8 PRIMARY KEY(DESCRIPTIONS_ID, DESCRIBEDSPECIMENOROBSERVATIONS_ID);
 ALTER TABLE PUBLIC.FEATURETREE_ORIGINALSOURCEBASE ADD CONSTRAINT PUBLIC.CONSTRAINT_906 PRIMARY KEY(FEATURETREE_ID, SOURCES_ID);
 ALTER TABLE PUBLIC.RIGHTS ADD CONSTRAINT PUBLIC.CONSTRAINT_901 PRIMARY KEY(ID);
 ALTER TABLE PUBLIC.MEDIA_ORIGINALSOURCEBASE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_909 PRIMARY KEY(REV, MEDIA_ID, SOURCES_ID);
@@ -4699,7 +4688,6 @@ ALTER TABLE PUBLIC.DEFINEDTERMBASE_REPRESENTATION_AUD ADD CONSTRAINT PUBLIC.CONS
 ALTER TABLE PUBLIC.TAXONBASE_RIGHTS_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_61 PRIMARY KEY(REV, TAXONBASE_ID, RIGHTS_ID);
 ALTER TABLE PUBLIC.TERMVOCABULARY_CREDIT ADD CONSTRAINT PUBLIC.CONSTRAINT_1DF PRIMARY KEY(TERMVOCABULARY_ID, SORTINDEX);
 ALTER TABLE PUBLIC.FEATURENODE ADD CONSTRAINT PUBLIC.CONSTRAINT_69E PRIMARY KEY(ID);
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_DB5 PRIMARY KEY(REV, DESCRIPTIONS_ID, DESCRIBEDSPECIMENOROBSERVATIONS_ID);
 ALTER TABLE PUBLIC.USERACCOUNT_AUD ADD CONSTRAINT PUBLIC.CONSTRAINT_850 PRIMARY KEY(ID, REV);
 ALTER TABLE PUBLIC.MEDIAKEY_TAXON ADD CONSTRAINT PUBLIC.CONSTRAINT_3AB PRIMARY KEY(MEDIAKEY_ID, TAXON_ID);
 ALTER TABLE PUBLIC.DERIVATIONEVENT ADD CONSTRAINT PUBLIC.CONSTRAINT_83E PRIMARY KEY(ID);
@@ -5133,7 +5121,7 @@ ALTER TABLE PUBLIC.TERMVOCABULARY_REPRESENTATION ADD CONSTRAINT PUBLIC.FKA408B63
 ALTER TABLE PUBLIC.FEATURENODE_DEFINEDTERMBASE_INAPPLICABLEIF ADD CONSTRAINT PUBLIC.FK56833D0152FCC4B FOREIGN KEY(FEATURENODE_ID) REFERENCES PUBLIC.FEATURENODE(ID) NOCHECK;
 ALTER TABLE PUBLIC.POLYTOMOUSKEY_ORIGINALSOURCEBASE_AUD ADD CONSTRAINT PUBLIC.FKE644349534869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.COLLECTION_MEDIA_AUD ADD CONSTRAINT PUBLIC.FK9AABDB5434869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD8033B8A841 FOREIGN KEY(DESCRIPTIONS_ID) REFERENCES PUBLIC.DESCRIPTIONBASE(ID) NOCHECK;
+ALTER TABLE PUBLIC.DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD8033B8A841 FOREIGN KEY(SPECIMEN_ID) REFERENCES PUBLIC.SPECIMENOROBSERVATIONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.STATEDATA_AUD ADD CONSTRAINT PUBLIC.FKDA6A700C34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FK21CA3272C8505DB FOREIGN KEY(PRESERVATION_ID) REFERENCES PUBLIC.DEFINEDTERMBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.MEDIA_RIGHTS ADD CONSTRAINT PUBLIC.FKDB1266D2C13F7B21 FOREIGN KEY(RIGHTS_ID) REFERENCES PUBLIC.RIGHTS(ID) NOCHECK;
@@ -5393,7 +5381,6 @@ ALTER TABLE PUBLIC.DESCRIPTIONBASE_CREDIT_AUD ADD CONSTRAINT PUBLIC.FK2EBEFB1C34
 ALTER TABLE PUBLIC.TAXONBASE ADD CONSTRAINT PUBLIC.FK9249B49B74FED214 FOREIGN KEY(SEC_ID) REFERENCES PUBLIC.REFERENCE(ID) NOCHECK;
 ALTER TABLE PUBLIC.SEQUENCE_MARKER ADD CONSTRAINT PUBLIC.FK3D22B278D57FFDD5 FOREIGN KEY(SEQUENCE_ID) REFERENCES PUBLIC.SEQUENCE(ID) NOCHECK;
 ALTER TABLE PUBLIC.TAXONRELATIONSHIP ADD CONSTRAINT PUBLIC.FK7482BA02AEB7F3BE FOREIGN KEY(CITATION_ID) REFERENCES PUBLIC.REFERENCE(ID) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE ADD CONSTRAINT PUBLIC.FKDE29CD805C9E3461 FOREIGN KEY(DESCRIBEDSPECIMENOROBSERVATIONS_ID) REFERENCES PUBLIC.SPECIMENOROBSERVATIONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.ANNOTATION ADD CONSTRAINT PUBLIC.FK1A21C74FDF299D00 FOREIGN KEY(ANNOTATIONTYPE_ID) REFERENCES PUBLIC.DEFINEDTERMBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.AGENTBASE_MARKER ADD CONSTRAINT PUBLIC.FK365D5D6386EFC5D4 FOREIGN KEY(AGENTBASE_ID) REFERENCES PUBLIC.AGENTBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.TAXONBASE_ANNOTATION ADD CONSTRAINT PUBLIC.FK41ED09739C9D39 FOREIGN KEY(TAXONBASE_ID) REFERENCES PUBLIC.TAXONBASE(ID) NOCHECK;
@@ -5756,7 +5743,6 @@ ALTER TABLE PUBLIC.POLYTOMOUSKEYNODE_LANGUAGESTRING ADD CONSTRAINT PUBLIC.FK5574
 ALTER TABLE PUBLIC.WORKINGSET ADD CONSTRAINT PUBLIC.FK668D5B9123DB7F04 FOREIGN KEY(DESCRIPTIVESYSTEM_ID) REFERENCES PUBLIC.FEATURETREE(ID) NOCHECK;
 ALTER TABLE PUBLIC.STATEDATA ADD CONSTRAINT PUBLIC.FKFB1697BB4FF2DB2C FOREIGN KEY(CREATEDBY_ID) REFERENCES PUBLIC.USERACCOUNT(ID) NOCHECK;
 ALTER TABLE PUBLIC.AGENTBASE_AGENTBASE_AUD ADD CONSTRAINT PUBLIC.FKA8A87CFE34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
-ALTER TABLE PUBLIC.DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE_AUD ADD CONSTRAINT PUBLIC.FKF1B33B5134869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
 ALTER TABLE PUBLIC.TERMVOCABULARY_ORIGINALSOURCEBASE ADD CONSTRAINT PUBLIC.FK8F2D512A258E060 FOREIGN KEY(TERMVOCABULARY_ID) REFERENCES PUBLIC.TERMVOCABULARY(ID) NOCHECK;
 ALTER TABLE PUBLIC.DESCRIPTIONBASE ADD CONSTRAINT PUBLIC.FKFF4D58CDDE9A3E39 FOREIGN KEY(TAXON_ID) REFERENCES PUBLIC.TAXONBASE(ID) NOCHECK;
 ALTER TABLE PUBLIC.NOMENCLATURALSTATUS_MARKER_AUD ADD CONSTRAINT PUBLIC.FK8619495F34869AAE FOREIGN KEY(REV) REFERENCES PUBLIC.AUDITEVENT(REVISIONNUMBER) NOCHECK;
index e491a213ad443c73c2e5c6d5b06cad017b4743c3..228bb37da065fbb2709bdee76ceca5cab95f71d5 100644 (file)
@@ -3,9 +3,8 @@
   <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" RECORDBASIS="1" ID="20" PUBLISH="true"/>\r
   <SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT/>\r
   <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="10" IMAGEGALLERY="true"/>\r
-  <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="10" FEATURE_ID="923" INDESCRIPTION_ID="10"/>\r
+  <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="10" FEATURE_ID="923" INDESCRIPTION_ID="10" SPECIMEN_ID="20"/>\r
   <DESCRIPTIONELEMENTBASE_MEDIA DESCRIPTIONELEMENTBASE_ID="10" MEDIA_ID="10" SORTINDEX="0"/>\r
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE DESCRIPTIONS_ID="10" DESCRIBEDSPECIMENOROBSERVATIONS_ID="20"/>\r
   <MEDIA DTYPE="Media" ID="10" TITLECACHE="www.derivedUnitImage.de"/>\r
   <MEDIAREPRESENTATION ID="10" SUFFIX="png" MEDIA_ID="10"/>\r
   <MEDIAREPRESENTATIONPART DTYPE="MediaRepresentationPart" ID="10" SIZE="200" URI="www.derivedUnitImage.de" REPRESENTATION_ID="10" SORTINDEX="0"/>\r
index 2c144f58c1ca1b578e9cf1a33a802e5645309881..f7ab0cb7446fd5bfc7acb5fd88dda83f3ef02ae5 100644 (file)
@@ -4,10 +4,9 @@
   <SPECIMENOROBSERVATIONBASE DTYPE="FieldUnit" ID="31" FIELDNUMBER="12345" PUBLISH="true"/>\r
   <SPECIMENOROBSERVATIONBASE_DERIVATIONEVENT ORIGINALS_ID="31" DERIVATIONEVENTS_ID="30"/>\r
   <DERIVATIONEVENT ID="30"/>\r
-  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="30" IMAGEGALLERY="true"/>\r
+  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="30" IMAGEGALLERY="true" SPECIMEN_ID="31"/>\r
   <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="30" INDESCRIPTION_ID="30"/>\r
   <DESCRIPTIONELEMENTBASE_MEDIA DESCRIPTIONELEMENTBASE_ID="30" MEDIA_ID="30" SORTINDEX="0"/>\r
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE DESCRIPTIONS_ID="30" DESCRIBEDSPECIMENOROBSERVATIONS_ID="31"/>\r
   <MEDIA DTYPE="Media" ID="30" TITLECACHE="www.abc.de"/>\r
   <MEDIAREPRESENTATION ID="30" SUFFIX="jpeg" MEDIA_ID="30"/>\r
   <MEDIAREPRESENTATIONPART DTYPE="MediaRepresentationPart" ID="30" SIZE="200" URI="www.abc.de" REPRESENTATION_ID="30" SORTINDEX="0"/>\r
index 13e5fe552e39dab67d11ec9d0ad58bd2863e9211..9fa0182f0b569a967f3d0d565ef936346f0cab73 100644 (file)
@@ -7,8 +7,8 @@
 \r
   <DERIVATIONEVENT ID="10" CREATED="2011-02-10 10:50:59.0" UUID="42dfd0fb-3d12-4517-8841-9a24e52e88da"/>\r
 \r
-  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="10" CREATED="2011-02-10 10:50:59.0" UUID="8cb772e9-1577-45c6-91ab-dbec1413c060" PROTECTEDTITLECACHE="false" TITLECACHE="Field Object Image Gallery" IMAGEGALLERY="true"/>\r
-  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="11" CREATED="2011-02-10 10:50:59.0" UUID="cb03acc4-8363-4020-aeef-ea8a8bcc0fe9" PROTECTEDTITLECACHE="false" TITLECACHE="Derived Unit Image Gallery" IMAGEGALLERY="true"/>\r
+  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="10" CREATED="2011-02-10 10:50:59.0" UUID="8cb772e9-1577-45c6-91ab-dbec1413c060" PROTECTEDTITLECACHE="false" TITLECACHE="Field Object Image Gallery" IMAGEGALLERY="true" SPECIMEN_ID="11"/>\r
+  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="11" CREATED="2011-02-10 10:50:59.0" UUID="cb03acc4-8363-4020-aeef-ea8a8bcc0fe9" PROTECTEDTITLECACHE="false" TITLECACHE="Derived Unit Image Gallery" IMAGEGALLERY="true" SPECIMEN_ID="10"/>\r
 \r
   <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="10" CREATED="2011-02-10 10:50:59.0" UUID="ad3a172c-396f-44c9-b8a6-c848f6c0e77a" FEATURE_ID="937" INDESCRIPTION_ID="10"/>\r
   <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="11" CREATED="2011-02-10 10:50:59.0" UUID="ab29a73b-e889-4ffa-8e64-563c37ff96f4" FEATURE_ID="937" INDESCRIPTION_ID="11"/>\r
@@ -16,9 +16,6 @@
   <DESCRIPTIONELEMENTBASE_MEDIA DESCRIPTIONELEMENTBASE_ID="10" MEDIA_ID="10" SORTINDEX="0"/>\r
   <DESCRIPTIONELEMENTBASE_MEDIA DESCRIPTIONELEMENTBASE_ID="11" MEDIA_ID="10" SORTINDEX="0"/>\r
 \r
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE DESCRIPTIONS_ID="10" DESCRIBEDSPECIMENOROBSERVATIONS_ID="11"/>\r
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE DESCRIPTIONS_ID="11" DESCRIBEDSPECIMENOROBSERVATIONS_ID="10"/>\r
-\r
   <MEDIA DTYPE="Media" ID="10" CREATED="2011-02-10 10:50:59.0" UUID="c4364d8b-90aa-48db-89ad-3acdb2b1f06d" PROTECTEDTITLECACHE="false" TITLECACHE="www.abc.de"/>\r
   <MEDIAREPRESENTATION ID="10" CREATED="2011-02-10 10:50:59.0" UUID="4acdb5c3-6925-43cf-8636-545fe0b7a227" SUFFIX="jpeg" MEDIA_ID="10"/>\r
   <MEDIAREPRESENTATIONPART DTYPE="MediaRepresentationPart" ID="10" CREATED="2011-02-10 10:50:59.0" UUID="1d19c439-3233-4121-b751-1d8b23cdcd27" SIZE="200" URI="www.abc.de" REPRESENTATION_ID="10" SORTINDEX="0"/>\r
index 093f9e9afa6f7f128d4c8ce0d608f4bce8665fdd..0488500efe900030116caa6aa77582e765046c13 100644 (file)
   <ANNOTATION_AUD ID="1" REV="1001" REVTYPE="0" CREATED="2009-06-25 14:42:27.0" UUID="8cfc78b1-584d-43a0-8f46-820fa656033b" TEXT="A1" LANGUAGE_ID="352"/>\r
   <AUDITEVENT REVISIONNUMBER="1000" DATE="2009-06-25 14:42:23.544" TIMESTAMP="1245933743544" UUID="c9c24dd0-6e4d-434b-a310-3e2c6e1ea7c2"/>\r
   <AUDITEVENT REVISIONNUMBER="1001" DATE="2009-06-25 14:42:27.778" TIMESTAMP="1245933747778" UUID="1e5f0107-9fd8-4b37-9cea-d2c876098619"/>\r
-  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="1" CREATED="2009-06-25 18:26:26.0" UUID="40cb1905-f9d8-4647-87ad-40b37a17e85b" PROTECTEDTITLECACHE="true" TITLECACHE="desc2" IMAGEGALLERY="false"/>\r
-  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="2" CREATED="2009-06-25 18:26:26.0" UUID="3d7d643c-5944-47d6-8938-e884f6d79a70" PROTECTEDTITLECACHE="true" TITLECACHE="desc1" IMAGEGALLERY="false"/>\r
-  <DESCRIPTIONBASE_AUD DTYPE="SpecimenDescription" ID="1" REV="1001" REVTYPE="0" CREATED="2009-06-25 18:26:26.0" UUID="40cb1905-f9d8-4647-87ad-40b37a17e85b" PROTECTEDTITLECACHE="true" TITLECACHE="desc2" IMAGEGALLERY="false"/>\r
-  <DESCRIPTIONBASE_AUD DTYPE="SpecimenDescription" ID="2" REV="1001" REVTYPE="0" CREATED="2009-06-25 18:26:26.0" UUID="3d7d643c-5944-47d6-8938-e884f6d79a70" PROTECTEDTITLECACHE="true" TITLECACHE="desc1" IMAGEGALLERY="false"/>\r
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE DESCRIPTIONS_ID="1" DESCRIBEDSPECIMENOROBSERVATIONS_ID="1"/>\r
-  <DESCRIPTIONBASE_SPECIMENOROBSERVATIONBASE DESCRIPTIONS_ID="2" DESCRIBEDSPECIMENOROBSERVATIONS_ID="1"/>\r
+  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="1" CREATED="2009-06-25 18:26:26.0" UUID="40cb1905-f9d8-4647-87ad-40b37a17e85b" PROTECTEDTITLECACHE="true" TITLECACHE="desc2" IMAGEGALLERY="false" SPECIMEN_ID="1"/>\r
+  <DESCRIPTIONBASE DTYPE="SpecimenDescription" ID="2" CREATED="2009-06-25 18:26:26.0" UUID="3d7d643c-5944-47d6-8938-e884f6d79a70" PROTECTEDTITLECACHE="true" TITLECACHE="desc1" IMAGEGALLERY="false" SPECIMEN_ID="1"/>\r
+  <DESCRIPTIONBASE_AUD DTYPE="SpecimenDescription" ID="1" REV="1001" REVTYPE="0" CREATED="2009-06-25 18:26:26.0" UUID="40cb1905-f9d8-4647-87ad-40b37a17e85b" PROTECTEDTITLECACHE="true" TITLECACHE="desc2" IMAGEGALLERY="false" SPECIMEN_ID="1"/>\r
+  <DESCRIPTIONBASE_AUD DTYPE="SpecimenDescription" ID="2" REV="1001" REVTYPE="0" CREATED="2009-06-25 18:26:26.0" UUID="3d7d643c-5944-47d6-8938-e884f6d79a70" PROTECTEDTITLECACHE="true" TITLECACHE="desc1" IMAGEGALLERY="false" SPECIMEN_ID="1"/>\r
   <SPECIMENOROBSERVATIONBASE DTYPE="DerivedUnit" RECORDBASIS="1" ID="1" CREATED="2009-06-25 18:26:26.0" UUID="41539e9c-3764-4f14-9712-2d07d00c8e4c" PROTECTEDTITLECACHE="false" TITLECACHE="" PUBLISH="true"/>\r
   <SPECIMENOROBSERVATIONBASE_AUD DTYPE="DerivedUnit" RECORDBASIS="1" ID="1" REV="1001" REVTYPE="1" CREATED="2009-06-25 18:26:26.0" UUID="41539e9c-3764-4f14-9712-2d07d00c8e4c" PROTECTEDTITLECACHE="false" TITLECACHE="" PUBLISH="true"/>\r
-  <DESCRIPTIONBASE DTYPE="TaxonDescription" ID="3" CREATED="2009-06-25 18:26:26.0" UUID="eb17b80a-9be6-4642-a6a8-b19a318925e6" PROTECTEDTITLECACHE="true" TITLECACHE="desc3" IMAGEGALLERY="false"/>\r
+  <DESCRIPTIONBASE DTYPE="TaxonDescription" ID="3" CREATED="2009-06-25 18:26:26.0" UUID="eb17b80a-9be6-4642-a6a8-b19a318925e6" PROTECTEDTITLECACHE="true" TITLECACHE="desc3" IMAGEGALLERY="false" SPECIMEN_ID="[null]"/>\r
   <DESCRIPTIONELEMENTBASE DTYPE="TextData" ID="1" INDESCRIPTION_ID="3" CREATED="2008-12-10 09:56:07.0" UUID="31a0160a-51b2-4565-85cf-2be58cb561d6" UPDATED="2008-12-10 09:56:07.253" FEATURE_ID="922"/>\r
   <DESCRIPTIONELEMENTBASE_LANGUAGESTRING DESCRIPTIONELEMENTBASE_ID="1" MULTILANGUAGETEXT_ID="1" MULTILANGUAGETEXT_MAPKEY_ID="406"/>\r
   <LANGUAGESTRING ID="1" CREATED="2008-12-10 09:56:07.0" UUID="2a5ceebb-4830-4524-b330-78461bf8cb6b" UPDATED="2008-12-10 09:56:07.253" LANGUAGE_ID="352" TEXT="Lorem ipsum dolor sit amet, consectetur adipiscing elit."/>\r