Added methods for querying for identification keys (part of #467)
authorben.clark <ben.clark@localhost>
Fri, 19 Dec 2008 13:25:03 +0000 (13:25 +0000)
committerben.clark <ben.clark@localhost>
Fri, 19 Dec 2008 13:25:03 +0000 (13:25 +0000)
.gitattributes
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptionDaoImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoHibernateImpl.java
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/media/IMediaDao.java
cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoImplTest.java [new file with mode: 0644]
cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/PUBLIC.xsd
cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/dataset.xsd
cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoImplTest.xml [new file with mode: 0644]

index 300f1c64c19b945e2ec9a4134b1fe0852c55ada8..08492aa7a58b46566b6482d8b23ec62fefdb75ba 100644 (file)
@@ -1054,6 +1054,7 @@ cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/comm
 cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/DefinedTermDaoImplTest.java -text
 cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/common/IdentifiableDaoBaseTest.java -text
 cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptionDaoHibernateImplTest.java -text
+cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoImplTest.java -text
 cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonDaoHibernateImplTest.java -text
 cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/test/function/Datasource.java -text
 cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/test/function/TestCdmApplicationUtils.java -text
@@ -1083,6 +1084,7 @@ cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate
 cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/common/IdentifiableDaoBaseTest.xml -text
 cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/dataset.xsd -text
 cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/description/DescriptionDaoHibernateImplTest.xml -text
+cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoImplTest.xml -text
 cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/taxon/TaxonDaoHibernateImplTest.xml -text
 cdmlib-persistence/src/test/resources/unitils.properties -text
 cdmlib-remote/LICENSE.TXT -text
index 3bca0937bb0fbe5ae33f227236db18f505405674..e3d24690bbf48196aebe0e62725d8d57d56c9e06 100644 (file)
@@ -16,11 +16,8 @@ import java.util.Set;
 import org.apache.log4j.Logger;\r
 import org.hibernate.Criteria;\r
 import org.hibernate.Query;\r
-import org.hibernate.criterion.CriteriaSpecification;\r
-import org.hibernate.criterion.DetachedCriteria;\r
 import org.hibernate.criterion.Projections;\r
 import org.hibernate.criterion.Restrictions;\r
-import org.hibernate.criterion.Subqueries;\r
 import org.springframework.stereotype.Repository;\r
 \r
 import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
@@ -30,8 +27,8 @@ import eu.etaxonomy.cdm.model.description.PresenceAbsenceTermBase;
 import eu.etaxonomy.cdm.model.description.Scope;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
 import eu.etaxonomy.cdm.model.description.TaxonNameDescription;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.location.NamedArea;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.persistence.dao.description.IDescriptionDao;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.IdentifiableDaoBase;\r
index 927a3047422614bd28c17c9cf0a53e16ba9992d6..2794412e9337c15cc9c85c0ffaedf1c968e6ffd2 100644 (file)
@@ -6,9 +6,19 @@
 \r
 package eu.etaxonomy.cdm.persistence.dao.hibernate.media;\r
 \r
+import java.util.HashSet;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import org.hibernate.Criteria;\r
+import org.hibernate.criterion.Projections;\r
+import org.hibernate.criterion.Restrictions;\r
 import org.springframework.stereotype.Repository;\r
 \r
+import eu.etaxonomy.cdm.model.description.IdentificationKey;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.media.Media;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.persistence.dao.hibernate.common.CdmEntityDaoBase;\r
 import eu.etaxonomy.cdm.persistence.dao.media.IMediaDao;\r
 \r
@@ -23,4 +33,62 @@ public class MediaDaoHibernateImpl extends CdmEntityDaoBase<Media>
        public MediaDaoHibernateImpl() {\r
                super(Media.class);\r
        }\r
+\r
+       public int countIdentificationKeys(Set<Taxon> taxonomicScope,   Set<NamedArea> geoScopes) {\r
+               Criteria criteria = getSession().createCriteria(IdentificationKey.class);\r
+               \r
+               if(taxonomicScope != null && !taxonomicScope.isEmpty()) {\r
+                       Set<Integer> taxonomicScopeIds = new HashSet<Integer>();\r
+                       for(Taxon n : taxonomicScope) {\r
+                               taxonomicScopeIds.add(n.getId());\r
+                       }\r
+                       criteria.createCriteria("taxonomicScope").add(Restrictions.in("id", taxonomicScopeIds));\r
+               }\r
+               \r
+               if(geoScopes != null && !geoScopes.isEmpty()) {\r
+                       Set<Integer> geoScopeIds = new HashSet<Integer>();\r
+                       for(NamedArea n : geoScopes) {\r
+                               geoScopeIds.add(n.getId());\r
+                       }\r
+                       criteria.createCriteria("geoScopes").add(Restrictions.in("id", geoScopeIds));\r
+               }\r
+               \r
+               criteria.setProjection(Projections.countDistinct("id"));\r
+               \r
+               return (Integer)criteria.uniqueResult();\r
+       }\r
+\r
+       public List<IdentificationKey> getIdentificationKeys(Set<Taxon> taxonomicScope, Set<NamedArea> geoScopes, Integer pageSize, Integer pageNumber) {\r
+        Criteria inner = getSession().createCriteria(IdentificationKey.class);\r
+               \r
+               if(taxonomicScope != null && !taxonomicScope.isEmpty()) {\r
+                       Set<Integer> taxonomicScopeIds = new HashSet<Integer>();\r
+                       for(Taxon n : taxonomicScope) {\r
+                               taxonomicScopeIds.add(n.getId());\r
+                       }\r
+                       inner.createCriteria("taxonomicScope").add(Restrictions.in("id", taxonomicScopeIds));\r
+               }\r
+               \r
+               if(geoScopes != null && !geoScopes.isEmpty()) {\r
+                       Set<Integer> geoScopeIds = new HashSet<Integer>();\r
+                       for(NamedArea n : geoScopes) {\r
+                               geoScopeIds.add(n.getId());\r
+                       }\r
+                       inner.createCriteria("geoScopes").add(Restrictions.in("id", geoScopeIds));\r
+               }\r
+               \r
+               inner.setProjection(Projections.distinct(Projections.id()));\r
+               \r
+               Criteria criteria = getSession().createCriteria(IdentificationKey.class);\r
+               criteria.add(Restrictions.in("id", (List<Integer>)inner.list()));\r
+               \r
+               if(pageSize != null) {\r
+                       criteria.setMaxResults(pageSize);\r
+                   if(pageNumber != null) {\r
+                       criteria.setFirstResult(pageNumber * pageSize);\r
+                   }\r
+               }\r
+               \r
+               return (List<IdentificationKey>)criteria.list();\r
+       }\r
 }\r
index 4ade1c4790c436c86ce60d9a14cda301d4eae77f..93582b5d32e3c27c13d1329efba085619d057ab0 100644 (file)
@@ -6,7 +6,13 @@
 \r
 package eu.etaxonomy.cdm.persistence.dao.media;\r
 \r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import eu.etaxonomy.cdm.model.description.IdentificationKey;\r
 import eu.etaxonomy.cdm.model.media.Media;\r
+import eu.etaxonomy.cdm.model.location.NamedArea;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao;\r
 \r
 /**\r
@@ -14,5 +20,9 @@ import eu.etaxonomy.cdm.persistence.dao.common.ICdmEntityDao;
  * @created 08.09.2008\r
  */\r
 public interface IMediaDao extends ICdmEntityDao<Media> {\r
+       \r
+       public int countIdentificationKeys(Set<Taxon> taxonomicScope, Set<NamedArea> geoScopes);\r
+       \r
+       public List<IdentificationKey> getIdentificationKeys(Set<Taxon> taxonomicScope, Set<NamedArea> geoScopes, Integer pageSize, Integer pageNumber);\r
 \r
 }\r
diff --git a/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoImplTest.java b/cdmlib-persistence/src/test/java/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoImplTest.java
new file mode 100644 (file)
index 0000000..f4916cc
--- /dev/null
@@ -0,0 +1,108 @@
+package eu.etaxonomy.cdm.persistence.dao.hibernate.media;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.unitils.dbunit.annotation.DataSet;
+import org.unitils.spring.annotation.SpringBeanByType;
+
+import eu.etaxonomy.cdm.model.description.IdentificationKey;
+import eu.etaxonomy.cdm.model.location.NamedArea;
+import eu.etaxonomy.cdm.model.taxon.Taxon;
+import eu.etaxonomy.cdm.persistence.dao.common.IDefinedTermDao;
+import eu.etaxonomy.cdm.persistence.dao.media.IMediaDao;
+import eu.etaxonomy.cdm.persistence.dao.taxon.ITaxonDao;
+import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;
+
+@DataSet
+public class MediaDaoImplTest extends CdmIntegrationTest {
+
+       @SpringBeanByType
+       IMediaDao mediaDao;
+       
+       @SpringBeanByType
+       IDefinedTermDao definedTermDao;
+       
+       @SpringBeanByType
+       ITaxonDao taxonDao;
+       
+       UUID europeUuid;
+       UUID africaUuid;
+       UUID sphingidaeUuid;
+       
+       Set<Taxon> taxonomicScope;
+       Set<NamedArea> geoScopes;
+       
+       @Before
+       public void setUp() {
+               europeUuid = UUID.fromString("e860871c-3a14-4ef2-9367-bbd92586c95b");
+               africaUuid = UUID.fromString("9444016a-b334-4772-8795-ed4019552087");
+               sphingidaeUuid = UUID.fromString("54e767ee-894e-4540-a758-f906ecb4e2d9");
+               
+               taxonomicScope = new HashSet<Taxon>();
+               geoScopes = new HashSet<NamedArea>();
+       }
+       
+       @Test
+       public void testCountIdentificationKeys() {
+               int numberOfIdentificationKeys = mediaDao.countIdentificationKeys(null,null);
+               
+               assertEquals("countIdentificationKeys should return 3",3,numberOfIdentificationKeys);
+       }
+       
+       @Test
+       public void testGetIdentificationKeys() {
+               List<IdentificationKey> keys = mediaDao.getIdentificationKeys(null, null, null, null);
+               
+               assertNotNull("getIdentificationKeys should return a List",keys);
+               assertFalse("The list should not be empty",keys.isEmpty());
+               assertEquals("The list should contain 3 IdentificationKey instances",3, keys.size());
+       }
+       
+       @Test
+       public void testCountIdentificationKeysWithScope() {
+               NamedArea europe = (NamedArea)definedTermDao.findByUuid(europeUuid);
+               NamedArea africa = (NamedArea)definedTermDao.findByUuid(africaUuid);
+               Taxon sphingidae = (Taxon)taxonDao.findByUuid(sphingidaeUuid);
+               assert europe != null : "NamedArea must exist";
+               assert africa != null : "NamedArea must exist";
+               assert sphingidae != null : "Taxon must exist";
+               
+               geoScopes.add(europe);
+               geoScopes.add(africa);
+               taxonomicScope.add(sphingidae);
+               
+               int numberOfIdentificationKeys = mediaDao.countIdentificationKeys(taxonomicScope,geoScopes);
+               
+               assertEquals("countIdentificationKeys should return 1",1,numberOfIdentificationKeys);
+       }
+       
+       @Test
+       public void testGetIdentificationKeysWithScope() {
+               NamedArea europe = (NamedArea)definedTermDao.findByUuid(europeUuid);
+               NamedArea africa = (NamedArea)definedTermDao.findByUuid(africaUuid);
+               Taxon sphingidae = (Taxon)taxonDao.findByUuid(sphingidaeUuid);
+               assert europe != null : "NamedArea must exist";
+               assert africa != null : "NamedArea must exist";
+               assert sphingidae != null : "Taxon must exist";
+               
+               geoScopes.add(europe);
+               geoScopes.add(africa);
+               taxonomicScope.add(sphingidae);
+               
+               List<IdentificationKey> keys = mediaDao.getIdentificationKeys(taxonomicScope,geoScopes, null, null);
+               
+               assertNotNull("getIdentificationKeys should return a List",keys);
+               assertFalse("The list should not be empty",keys.isEmpty());
+               assertEquals("The list should contain 1 IdentificationKey instance",1, keys.size());
+       }
+       
+}
index 156740f5e11a0f6e8db99a14c91c5038e7f1bd74..70fc786afc09700fb99e7a39fc086795e72fadb7 100644 (file)
@@ -38,6 +38,7 @@
        <xsd:element name="TAXONNAMEBASE_NOMENCLATURALSTATUS" type="TAXONNAMEBASE_NOMENCLATURALSTATUS__type" />
        <xsd:element name="SEQUENCE_MEDIA" type="SEQUENCE_MEDIA__type" />
        <xsd:element name="SEQUENCE_REFERENCEBASE" type="SEQUENCE_REFERENCEBASE__type" />
+       <xsd:element name="IDENTIFICATIONKEY_TAXON" type="IDENTIFICATIONKEY_TAXON__type" />
        <xsd:element name="DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION" type="DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION__type" />
        <xsd:element name="DESCRIPTIONELEMENTBASE_MODIFIER" type="DESCRIPTIONELEMENTBASE_MODIFIER__type" />
        <xsd:element name="DESCRIPTIONELEMENTBASE_MEDIA" type="DESCRIPTIONELEMENTBASE_MEDIA__type" />
@@ -98,8 +99,8 @@
        <xsd:element name="TAXONBASE_RIGHTS" type="TAXONBASE_RIGHTS__type" />
        <xsd:element name="DESCRIPTIONELEMENTBASE" type="DESCRIPTIONELEMENTBASE__type" />
        <xsd:element name="HOMOTYPICALGROUP" type="HOMOTYPICALGROUP__type" />
-       <xsd:element name="DESCRIPTIONBASE_RIGHTS" type="DESCRIPTIONBASE_RIGHTS__type" />
        <xsd:element name="REFERENCEBASE_MEDIA" type="REFERENCEBASE_MEDIA__type" />
+       <xsd:element name="DESCRIPTIONBASE_RIGHTS" type="DESCRIPTIONBASE_RIGHTS__type" />
        <xsd:element name="COLLECTION" type="COLLECTION__type" />
        <xsd:element name="TAXONBASE_ANNOTATION" type="TAXONBASE_ANNOTATION__type" />
        <xsd:element name="TAXONRELATIONSHIP" type="TAXONRELATIONSHIP__type" />
        <xsd:element name="MEDIAREPRESENTATIONPART" type="MEDIAREPRESENTATIONPART__type" />
        <xsd:element name="SYNONYMRELATIONSHIP" type="SYNONYMRELATIONSHIP__type" />
        <xsd:element name="CONTACT" type="CONTACT__type" />
+       <xsd:element name="MEDIA_DEFINEDTERMBASE" type="MEDIA_DEFINEDTERMBASE__type" />
        <xsd:element name="TYPEDESIGNATIONBASE" type="TYPEDESIGNATIONBASE__type" />
        <xsd:element name="LANGUAGESTRING" type="LANGUAGESTRING__type" />
        <xsd:element name="HOMOTYPICALGROUP_ANNOTATION" type="HOMOTYPICALGROUP_ANNOTATION__type" />
                <xsd:attribute name="CITATIONMICROREFERENCE" use="optional" />
                <xsd:attribute name="UUID" use="optional" />
                <xsd:attribute name="RELATEDTO_ID" use="optional" />
-               <xsd:attribute name="RELATEDFROM_ID" use="optional" />
                <xsd:attribute name="RULECONSIDERED" use="optional" />
+               <xsd:attribute name="RELATEDFROM_ID" use="optional" />
                <xsd:attribute name="CREATED" use="optional" />
                <xsd:attribute name="UPDATEDBY_ID" use="optional" />
                <xsd:attribute name="CITATION_ID" use="optional" />
                <xsd:attribute name="CITATIONS_ID" use="optional" />
                <xsd:attribute name="SEQUENCE_ID" use="optional" />
        </xsd:complexType>
+       <xsd:complexType name="IDENTIFICATIONKEY_TAXON__type">
+               <xsd:attribute name="TAXON_FK" use="optional" />
+               <xsd:attribute name="IDENTIFICATIONKEY_FK" use="optional" />
+       </xsd:complexType>
        <xsd:complexType name="DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION__type">
                <xsd:attribute name="DEFINEDTERMBASE_ID" use="optional" />
                <xsd:attribute name="SUPPORTEDCATEGORICALENUMERATIONS_ID" use="optional" />
                <xsd:attribute name="NAME" use="optional" />
                <xsd:attribute name="STATUS_ID" use="optional" />
                <xsd:attribute name="CITATIONMICROREFERENCE" use="optional" />
-               <xsd:attribute name="LANGUAGE_ID" use="optional" />
                <xsd:attribute name="DESCRIPTION" use="optional" />
+               <xsd:attribute name="LANGUAGE_ID" use="optional" />
                <xsd:attribute name="UUID" use="optional" />
                <xsd:attribute name="UNIT_ID" use="optional" />
                <xsd:attribute name="MODIFYINGTEXT" use="optional" />
                <xsd:attribute name="ASSOCIATEDSPECIMENOROBSERVATION_ID" use="optional" />
                <xsd:attribute name="AREA_ID" use="optional" />
                <xsd:attribute name="CREATED" use="optional" />
-               <xsd:attribute name="INDESCRIPTION_ID" use="optional" />
                <xsd:attribute name="UPDATEDBY_ID" use="optional" />
+               <xsd:attribute name="INDESCRIPTION_ID" use="optional" />
                <xsd:attribute name="CITATION_ID" use="optional" />
                <xsd:attribute name="TAXON2_ID" use="optional" />
                <xsd:attribute name="UPDATED" use="optional" />
                <xsd:attribute name="CREATED" use="optional" />
                <xsd:attribute name="UPDATEDBY_ID" use="optional" />
        </xsd:complexType>
-       <xsd:complexType name="DESCRIPTIONBASE_RIGHTS__type">
-               <xsd:attribute name="DESCRIPTIONBASE_ID" use="optional" />
-               <xsd:attribute name="RIGHTS_ID" use="optional" />
-       </xsd:complexType>
        <xsd:complexType name="REFERENCEBASE_MEDIA__type">
                <xsd:attribute name="REFERENCEBASE_ID" use="optional" />
                <xsd:attribute name="MEDIA_ID" use="optional" />
        </xsd:complexType>
+       <xsd:complexType name="DESCRIPTIONBASE_RIGHTS__type">
+               <xsd:attribute name="DESCRIPTIONBASE_ID" use="optional" />
+               <xsd:attribute name="RIGHTS_ID" use="optional" />
+       </xsd:complexType>
        <xsd:complexType name="COLLECTION__type">
                <xsd:attribute name="SUPERCOLLECTION_ID" use="optional" />
                <xsd:attribute name="NAME" use="optional" />
                <xsd:attribute name="SEX_ID" use="optional" />
                <xsd:attribute name="DEFINITION" use="optional" />
                <xsd:attribute name="TITLECACHE" use="optional" />
-               <xsd:attribute name="GATHERINGEVENT_ID" use="optional" />
                <xsd:attribute name="LIFESTAGE_ID" use="optional" />
+               <xsd:attribute name="GATHERINGEVENT_ID" use="optional" />
                <xsd:attribute name="UPDATED" use="optional" />
                <xsd:attribute name="ID" use="optional" />
                <xsd:attribute name="CREATEDBY_ID" use="optional" />
                <xsd:attribute name="CREATED" use="optional" />
                <xsd:attribute name="LSID" use="optional" />
                <xsd:attribute name="UPDATEDBY_ID" use="optional" />
-               <xsd:attribute name="TITLECACHE" use="optional" />
                <xsd:attribute name="TAXONNAME_FK" use="optional" />
+               <xsd:attribute name="TITLECACHE" use="optional" />
                <xsd:attribute name="SEC_ID" use="optional" />
                <xsd:attribute name="DOUBTFUL" use="optional" />
                <xsd:attribute name="UPDATED" use="optional" />
                <xsd:attribute name="ID" use="optional" />
-               <xsd:attribute name="CREATEDBY_ID" use="optional" />
                <xsd:attribute name="DTYPE" use="optional" />
+               <xsd:attribute name="CREATEDBY_ID" use="optional" />
                <xsd:attribute name="TAXONOMICCHILDRENCOUNT" use="optional" />
                <xsd:attribute name="TAXONOMICPARENTCACHE_ID" use="optional" />
                <xsd:attribute name="PROTECTEDTITLECACHE" use="optional" />
                <xsd:attribute name="DOUBTFUL" use="optional" />
                <xsd:attribute name="UPDATED" use="optional" />
                <xsd:attribute name="ORIGINALNAMESTRING" use="optional" />
-               <xsd:attribute name="ID" use="optional" />
                <xsd:attribute name="TYPE_ID" use="optional" />
+               <xsd:attribute name="ID" use="optional" />
                <xsd:attribute name="CREATEDBY_ID" use="optional" />
        </xsd:complexType>
        <xsd:complexType name="TAXONNAMEBASE_ANNOTATION__type">
                <xsd:attribute name="URI" use="optional" />
                <xsd:attribute name="SUPPORTSINDIVIDUALASSOCIATION" use="optional" />
                <xsd:attribute name="CREATED" use="optional" />
-               <xsd:attribute name="UPDATEDBY_ID" use="optional" />
                <xsd:attribute name="POINTAPPROXIMATION_REFERENCESYSTEM_ID" use="optional" />
+               <xsd:attribute name="UPDATEDBY_ID" use="optional" />
                <xsd:attribute name="SYMMETRIC" use="optional" />
                <xsd:attribute name="PARTOF_ID" use="optional" />
                <xsd:attribute name="SUPPORTSTAXONINTERACTION" use="optional" />
                <xsd:attribute name="LOCATION_LONGITUDE" use="optional" />
                <xsd:attribute name="POSTCODE" use="optional" />
                <xsd:attribute name="POBOX" use="optional" />
-               <xsd:attribute name="CONTACT_ID" use="optional" />
                <xsd:attribute name="CREATED" use="optional" />
                <xsd:attribute name="LOCATION_LATITUDE" use="optional" />
                <xsd:attribute name="STREET" use="optional" />
+               <xsd:attribute name="CONTACT_ID" use="optional" />
                <xsd:attribute name="LOCALITY" use="optional" />
                <xsd:attribute name="UPDATEDBY_ID" use="optional" />
                <xsd:attribute name="COUNTRY_ID" use="optional" />
                <xsd:attribute name="FAX" use="optional" />
                <xsd:attribute name="UPDATEDBY_ID" use="optional" />
        </xsd:complexType>
+       <xsd:complexType name="MEDIA_DEFINEDTERMBASE__type">
+               <xsd:attribute name="GEOSCOPES_ID" use="optional" />
+               <xsd:attribute name="MEDIA_ID" use="optional" />
+       </xsd:complexType>
        <xsd:complexType name="TYPEDESIGNATIONBASE__type">
                <xsd:attribute name="TYPENAME_ID" use="optional" />
-               <xsd:attribute name="CITATIONMICROREFERENCE" use="optional" />
                <xsd:attribute name="HOMOTYPICALGROUP_ID" use="optional" />
+               <xsd:attribute name="CITATIONMICROREFERENCE" use="optional" />
                <xsd:attribute name="TYPESPECIMEN_ID" use="optional" />
                <xsd:attribute name="CONSERVEDTYPE" use="optional" />
                <xsd:attribute name="UUID" use="optional" />
index 189ca7f9dadb98d4efa640c250f76d420026699b..60fd3af97681988748bce3f5bf396186bd6d0e89 100644 (file)
@@ -42,6 +42,7 @@
                                <xsd:element name="TAXONNAMEBASE_NOMENCLATURALSTATUS" type="dflt:TAXONNAMEBASE_NOMENCLATURALSTATUS__type" />
                                <xsd:element name="SEQUENCE_MEDIA" type="dflt:SEQUENCE_MEDIA__type" />
                                <xsd:element name="SEQUENCE_REFERENCEBASE" type="dflt:SEQUENCE_REFERENCEBASE__type" />
+                               <xsd:element name="IDENTIFICATIONKEY_TAXON" type="dflt:IDENTIFICATIONKEY_TAXON__type" />
                                <xsd:element name="DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION" type="dflt:DEFINEDTERMBASE_SUPPORTEDCATEGORICALENUMERATION__type" />
                                <xsd:element name="DESCRIPTIONELEMENTBASE_MODIFIER" type="dflt:DESCRIPTIONELEMENTBASE_MODIFIER__type" />
                                <xsd:element name="DESCRIPTIONELEMENTBASE_MEDIA" type="dflt:DESCRIPTIONELEMENTBASE_MEDIA__type" />
                                <xsd:element name="TAXONBASE_RIGHTS" type="dflt:TAXONBASE_RIGHTS__type" />
                                <xsd:element name="DESCRIPTIONELEMENTBASE" type="dflt:DESCRIPTIONELEMENTBASE__type" />
                                <xsd:element name="HOMOTYPICALGROUP" type="dflt:HOMOTYPICALGROUP__type" />
-                               <xsd:element name="DESCRIPTIONBASE_RIGHTS" type="dflt:DESCRIPTIONBASE_RIGHTS__type" />
                                <xsd:element name="REFERENCEBASE_MEDIA" type="dflt:REFERENCEBASE_MEDIA__type" />
+                               <xsd:element name="DESCRIPTIONBASE_RIGHTS" type="dflt:DESCRIPTIONBASE_RIGHTS__type" />
                                <xsd:element name="COLLECTION" type="dflt:COLLECTION__type" />
                                <xsd:element name="TAXONBASE_ANNOTATION" type="dflt:TAXONBASE_ANNOTATION__type" />
                                <xsd:element name="TAXONRELATIONSHIP" type="dflt:TAXONRELATIONSHIP__type" />
                                <xsd:element name="MEDIAREPRESENTATIONPART" type="dflt:MEDIAREPRESENTATIONPART__type" />
                                <xsd:element name="SYNONYMRELATIONSHIP" type="dflt:SYNONYMRELATIONSHIP__type" />
                                <xsd:element name="CONTACT" type="dflt:CONTACT__type" />
+                               <xsd:element name="MEDIA_DEFINEDTERMBASE" type="dflt:MEDIA_DEFINEDTERMBASE__type" />
                                <xsd:element name="TYPEDESIGNATIONBASE" type="dflt:TYPEDESIGNATIONBASE__type" />
                                <xsd:element name="LANGUAGESTRING" type="dflt:LANGUAGESTRING__type" />
                                <xsd:element name="HOMOTYPICALGROUP_ANNOTATION" type="dflt:HOMOTYPICALGROUP_ANNOTATION__type" />
diff --git a/cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoImplTest.xml b/cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoImplTest.xml
new file mode 100644 (file)
index 0000000..b291370
Binary files /dev/null and b/cdmlib-persistence/src/test/resources/eu/etaxonomy/cdm/persistence/dao/hibernate/media/MediaDaoImplTest.xml differ