2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.common
;
12 import java
.lang
.reflect
.Modifier
;
13 import java
.util
.HashSet
;
14 import java
.util
.List
;
17 import org
.apache
.log4j
.Logger
;
18 import org
.hibernate
.Criteria
;
19 import org
.hibernate
.Query
;
20 import org
.hibernate
.Session
;
21 import org
.hibernate
.SessionFactory
;
22 import org
.hibernate
.criterion
.Restrictions
;
23 import org
.hibernate
.impl
.SessionFactoryImpl
;
24 import org
.springframework
.stereotype
.Repository
;
26 import eu
.etaxonomy
.cdm
.model
.agent
.Address
;
27 import eu
.etaxonomy
.cdm
.model
.agent
.AgentBase
;
28 import eu
.etaxonomy
.cdm
.model
.agent
.Contact
;
29 import eu
.etaxonomy
.cdm
.model
.agent
.Institution
;
30 import eu
.etaxonomy
.cdm
.model
.agent
.InstitutionType
;
31 import eu
.etaxonomy
.cdm
.model
.agent
.InstitutionalMembership
;
32 import eu
.etaxonomy
.cdm
.model
.agent
.Person
;
33 import eu
.etaxonomy
.cdm
.model
.agent
.Team
;
34 import eu
.etaxonomy
.cdm
.model
.agent
.TeamOrPersonBase
;
35 import eu
.etaxonomy
.cdm
.model
.common
.Annotation
;
36 import eu
.etaxonomy
.cdm
.model
.common
.AnnotationType
;
37 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
38 import eu
.etaxonomy
.cdm
.model
.common
.Credit
;
39 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
40 import eu
.etaxonomy
.cdm
.model
.common
.Extension
;
41 import eu
.etaxonomy
.cdm
.model
.common
.ExtensionType
;
42 import eu
.etaxonomy
.cdm
.model
.common
.Figure
;
43 import eu
.etaxonomy
.cdm
.model
.common
.GrantedAuthorityImpl
;
44 import eu
.etaxonomy
.cdm
.model
.common
.Group
;
45 import eu
.etaxonomy
.cdm
.model
.common
.Keyword
;
46 import eu
.etaxonomy
.cdm
.model
.common
.LSID
;
47 import eu
.etaxonomy
.cdm
.model
.common
.LSIDAuthority
;
48 import eu
.etaxonomy
.cdm
.model
.common
.Language
;
49 import eu
.etaxonomy
.cdm
.model
.common
.LanguageString
;
50 import eu
.etaxonomy
.cdm
.model
.common
.Marker
;
51 import eu
.etaxonomy
.cdm
.model
.common
.MarkerType
;
52 import eu
.etaxonomy
.cdm
.model
.common
.OrderedTermBase
;
53 import eu
.etaxonomy
.cdm
.model
.common
.OrderedTermVocabulary
;
54 import eu
.etaxonomy
.cdm
.model
.common
.OriginalSource
;
55 import eu
.etaxonomy
.cdm
.model
.common
.RelationshipTermBase
;
56 import eu
.etaxonomy
.cdm
.model
.common
.Representation
;
57 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
58 import eu
.etaxonomy
.cdm
.model
.common
.User
;
59 import eu
.etaxonomy
.cdm
.model
.description
.AbsenceTerm
;
60 import eu
.etaxonomy
.cdm
.model
.description
.CategoricalData
;
61 import eu
.etaxonomy
.cdm
.model
.description
.CommonTaxonName
;
62 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionBase
;
63 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionElementBase
;
64 import eu
.etaxonomy
.cdm
.model
.description
.Distribution
;
65 import eu
.etaxonomy
.cdm
.model
.description
.Feature
;
66 import eu
.etaxonomy
.cdm
.model
.description
.FeatureNode
;
67 import eu
.etaxonomy
.cdm
.model
.description
.FeatureTree
;
68 import eu
.etaxonomy
.cdm
.model
.description
.IdentificationKey
;
69 import eu
.etaxonomy
.cdm
.model
.description
.IndividualsAssociation
;
70 import eu
.etaxonomy
.cdm
.model
.description
.MeasurementUnit
;
71 import eu
.etaxonomy
.cdm
.model
.description
.PresenceAbsenceTermBase
;
72 import eu
.etaxonomy
.cdm
.model
.description
.PresenceTerm
;
73 import eu
.etaxonomy
.cdm
.model
.description
.QuantitativeData
;
74 import eu
.etaxonomy
.cdm
.model
.description
.Scope
;
75 import eu
.etaxonomy
.cdm
.model
.description
.Sex
;
76 import eu
.etaxonomy
.cdm
.model
.description
.SpecimenDescription
;
77 import eu
.etaxonomy
.cdm
.model
.description
.Stage
;
78 import eu
.etaxonomy
.cdm
.model
.description
.State
;
79 import eu
.etaxonomy
.cdm
.model
.description
.StateData
;
80 import eu
.etaxonomy
.cdm
.model
.description
.StatisticalMeasure
;
81 import eu
.etaxonomy
.cdm
.model
.description
.StatisticalMeasurementValue
;
82 import eu
.etaxonomy
.cdm
.model
.description
.TaxonDescription
;
83 import eu
.etaxonomy
.cdm
.model
.description
.TaxonInteraction
;
84 import eu
.etaxonomy
.cdm
.model
.description
.TaxonNameDescription
;
85 import eu
.etaxonomy
.cdm
.model
.description
.TextData
;
86 import eu
.etaxonomy
.cdm
.model
.description
.TextFormat
;
87 import eu
.etaxonomy
.cdm
.model
.location
.Continent
;
88 import eu
.etaxonomy
.cdm
.model
.location
.NamedArea
;
89 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaLevel
;
90 import eu
.etaxonomy
.cdm
.model
.location
.NamedAreaType
;
91 import eu
.etaxonomy
.cdm
.model
.location
.Point
;
92 import eu
.etaxonomy
.cdm
.model
.location
.ReferenceSystem
;
93 import eu
.etaxonomy
.cdm
.model
.location
.TdwgArea
;
94 import eu
.etaxonomy
.cdm
.model
.location
.WaterbodyOrCountry
;
95 import eu
.etaxonomy
.cdm
.model
.media
.AudioFile
;
96 import eu
.etaxonomy
.cdm
.model
.media
.ImageFile
;
97 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
98 import eu
.etaxonomy
.cdm
.model
.media
.MediaRepresentation
;
99 import eu
.etaxonomy
.cdm
.model
.media
.MediaRepresentationPart
;
100 import eu
.etaxonomy
.cdm
.model
.media
.MovieFile
;
101 import eu
.etaxonomy
.cdm
.model
.media
.ReferencedMedia
;
102 import eu
.etaxonomy
.cdm
.model
.media
.Rights
;
103 import eu
.etaxonomy
.cdm
.model
.media
.RightsTerm
;
104 import eu
.etaxonomy
.cdm
.model
.molecular
.DnaSample
;
105 import eu
.etaxonomy
.cdm
.model
.molecular
.GenBankAccession
;
106 import eu
.etaxonomy
.cdm
.model
.molecular
.Locus
;
107 import eu
.etaxonomy
.cdm
.model
.molecular
.PhylogeneticTree
;
108 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
109 import eu
.etaxonomy
.cdm
.model
.name
.BacterialName
;
110 import eu
.etaxonomy
.cdm
.model
.name
.BotanicalName
;
111 import eu
.etaxonomy
.cdm
.model
.name
.CultivarPlantName
;
112 import eu
.etaxonomy
.cdm
.model
.name
.HomotypicalGroup
;
113 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationship
;
114 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationshipType
;
115 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationship
;
116 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
117 import eu
.etaxonomy
.cdm
.model
.name
.NameTypeDesignation
;
118 import eu
.etaxonomy
.cdm
.model
.name
.NameTypeDesignationStatus
;
119 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalCode
;
120 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatus
;
121 import eu
.etaxonomy
.cdm
.model
.name
.NomenclaturalStatusType
;
122 import eu
.etaxonomy
.cdm
.model
.name
.NonViralName
;
123 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
124 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignation
;
125 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignationStatus
;
126 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
127 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationBase
;
128 import eu
.etaxonomy
.cdm
.model
.name
.ViralName
;
129 import eu
.etaxonomy
.cdm
.model
.name
.ZoologicalName
;
130 import eu
.etaxonomy
.cdm
.model
.occurrence
.Collection
;
131 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEvent
;
132 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivationEventType
;
133 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnit
;
134 import eu
.etaxonomy
.cdm
.model
.occurrence
.DerivedUnitBase
;
135 import eu
.etaxonomy
.cdm
.model
.occurrence
.DeterminationEvent
;
136 import eu
.etaxonomy
.cdm
.model
.occurrence
.DeterminationModifier
;
137 import eu
.etaxonomy
.cdm
.model
.occurrence
.FieldObservation
;
138 import eu
.etaxonomy
.cdm
.model
.occurrence
.Fossil
;
139 import eu
.etaxonomy
.cdm
.model
.occurrence
.GatheringEvent
;
140 import eu
.etaxonomy
.cdm
.model
.occurrence
.LivingBeing
;
141 import eu
.etaxonomy
.cdm
.model
.occurrence
.Observation
;
142 import eu
.etaxonomy
.cdm
.model
.occurrence
.PreservationMethod
;
143 import eu
.etaxonomy
.cdm
.model
.occurrence
.Specimen
;
144 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
145 import eu
.etaxonomy
.cdm
.model
.reference
.Article
;
146 import eu
.etaxonomy
.cdm
.model
.reference
.BibtexEntryType
;
147 import eu
.etaxonomy
.cdm
.model
.reference
.BibtexReference
;
148 import eu
.etaxonomy
.cdm
.model
.reference
.Book
;
149 import eu
.etaxonomy
.cdm
.model
.reference
.BookSection
;
150 import eu
.etaxonomy
.cdm
.model
.reference
.CdDvd
;
151 import eu
.etaxonomy
.cdm
.model
.reference
.Database
;
152 import eu
.etaxonomy
.cdm
.model
.reference
.Generic
;
153 import eu
.etaxonomy
.cdm
.model
.reference
.InProceedings
;
154 import eu
.etaxonomy
.cdm
.model
.reference
.Journal
;
155 import eu
.etaxonomy
.cdm
.model
.reference
.Map
;
156 import eu
.etaxonomy
.cdm
.model
.reference
.Patent
;
157 import eu
.etaxonomy
.cdm
.model
.reference
.PersonalCommunication
;
158 import eu
.etaxonomy
.cdm
.model
.reference
.PrintSeries
;
159 import eu
.etaxonomy
.cdm
.model
.reference
.PrintedUnitBase
;
160 import eu
.etaxonomy
.cdm
.model
.reference
.Proceedings
;
161 import eu
.etaxonomy
.cdm
.model
.reference
.Publisher
;
162 import eu
.etaxonomy
.cdm
.model
.reference
.ReferenceBase
;
163 import eu
.etaxonomy
.cdm
.model
.reference
.Report
;
164 import eu
.etaxonomy
.cdm
.model
.reference
.SectionBase
;
165 import eu
.etaxonomy
.cdm
.model
.reference
.StrictReferenceBase
;
166 import eu
.etaxonomy
.cdm
.model
.reference
.Thesis
;
167 import eu
.etaxonomy
.cdm
.model
.reference
.WebPage
;
168 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
169 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationship
;
170 import eu
.etaxonomy
.cdm
.model
.taxon
.SynonymRelationshipType
;
171 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
172 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
173 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
174 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationship
;
175 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonRelationshipType
;
176 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonomicTree
;
177 import eu
.etaxonomy
.cdm
.persistence
.dao
.common
.ICdmGenericDao
;
180 public class CdmGenericDaoImpl
extends CdmEntityDaoBase
<CdmBase
> implements ICdmGenericDao
{
181 private static final Logger logger
= Logger
.getLogger(CdmGenericDaoImpl
.class);
183 public CdmGenericDaoImpl() {
184 super(CdmBase
.class);
188 * @see eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao#getCdmBasesByFieldAndClass(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)
190 public List
<CdmBase
> getCdmBasesByFieldAndClass(Class clazz
, String propertyName
, CdmBase referencedCdmBase
){
191 Session session
= super.getSession();
192 Criteria criteria
= session
.createCriteria(clazz
);
193 criteria
.add(Restrictions
.eq(propertyName
, referencedCdmBase
));
194 return criteria
.list();
198 * @see eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao#getCdmBasesByFieldAndClass(java.lang.Class, java.lang.String, eu.etaxonomy.cdm.model.common.CdmBase)
200 public List
<CdmBase
> getCdmBasesWithItemInCollection(Class itemClass
, Class clazz
, String propertyName
, CdmBase item
){
201 Session session
= super.getSession();
202 String thisClassStr
= itemClass
.getSimpleName();
203 String otherClassStr
= clazz
.getSimpleName();
204 String queryStr
= " SELECT other FROM "+ thisClassStr
+ " this, " + otherClassStr
+ " other " +
205 " WHERE this = :referencedObject AND this member of other."+propertyName
;
206 Query query
= session
.createQuery(queryStr
).setEntity("referencedObject", item
);
207 List result
= query
.list();
212 * @see eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao#getAllCdmClasses(boolean)
214 public Set
<Class
<?
extends CdmBase
>> getAllCdmClasses(boolean includeAbstractClasses
){
215 Set
<Class
<?
extends CdmBase
>> result
= new HashSet
<Class
<?
extends CdmBase
>>();
217 SessionFactory sessionFactory
= getSession().getSessionFactory();
218 java
.util
.Map allClassMetadata
= sessionFactory
.getAllClassMetadata();
219 java
.util
.Collection keys
= allClassMetadata
.keySet();
220 for (Object oKey
: keys
){
221 if (oKey
instanceof String
){
222 String strKey
= (String
)oKey
;
223 if (! strKey
.endsWith("_AUD")){
225 Class clazz
= Class
.forName(strKey
);
226 boolean isAbstractClass
= Modifier
.isAbstract(clazz
.getModifiers());
227 if (! isAbstractClass
|| includeAbstractClasses
){
230 } catch (ClassNotFoundException e
) {
231 logger
.warn("Class not found: " + strKey
);
235 logger
.warn("key is not of type String: " + oKey
);
244 public List
getHqlResult(String hqlQuery
){
245 Query query
= getSession().createQuery(hqlQuery
);
246 List result
= query
.list();