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
.name
;
12 import java
.util
.ArrayList
;
13 import java
.util
.List
;
15 import java
.util
.UUID
;
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
.criterion
.Criterion
;
22 import org
.hibernate
.criterion
.Order
;
23 import org
.hibernate
.criterion
.Projections
;
24 import org
.hibernate
.criterion
.Restrictions
;
25 import org
.hibernate
.envers
.query
.AuditEntity
;
26 import org
.hibernate
.envers
.query
.AuditQuery
;
27 import org
.springframework
.beans
.factory
.annotation
.Autowired
;
28 import org
.springframework
.beans
.factory
.annotation
.Qualifier
;
29 import org
.springframework
.stereotype
.Repository
;
31 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
32 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
33 import eu
.etaxonomy
.cdm
.model
.common
.RelationshipBase
;
34 import eu
.etaxonomy
.cdm
.model
.common
.UuidAndTitleCache
;
35 import eu
.etaxonomy
.cdm
.model
.name
.BacterialName
;
36 import eu
.etaxonomy
.cdm
.model
.name
.BotanicalName
;
37 import eu
.etaxonomy
.cdm
.model
.name
.CultivarPlantName
;
38 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationship
;
39 import eu
.etaxonomy
.cdm
.model
.name
.HybridRelationshipType
;
40 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationship
;
41 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationshipType
;
42 import eu
.etaxonomy
.cdm
.model
.name
.NonViralName
;
43 import eu
.etaxonomy
.cdm
.model
.name
.Rank
;
44 import eu
.etaxonomy
.cdm
.model
.name
.SpecimenTypeDesignationStatus
;
45 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
46 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationBase
;
47 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationStatusBase
;
48 import eu
.etaxonomy
.cdm
.model
.name
.ViralName
;
49 import eu
.etaxonomy
.cdm
.model
.name
.ZoologicalName
;
50 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
51 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
52 import eu
.etaxonomy
.cdm
.model
.view
.AuditEvent
;
53 import eu
.etaxonomy
.cdm
.persistence
.dao
.hibernate
.common
.IdentifiableDaoBase
;
54 import eu
.etaxonomy
.cdm
.persistence
.dao
.name
.ITaxonNameDao
;
55 import eu
.etaxonomy
.cdm
.persistence
.dao
.taxon
.ITaxonDao
;
56 import eu
.etaxonomy
.cdm
.persistence
.query
.MatchMode
;
57 import eu
.etaxonomy
.cdm
.persistence
.query
.OrderHint
;
64 @Qualifier("taxonNameDaoHibernateImpl")
65 public class TaxonNameDaoHibernateImpl
66 extends IdentifiableDaoBase
<TaxonNameBase
> implements ITaxonNameDao
{
68 @SuppressWarnings("unused")
69 private static final Logger logger
= Logger
.getLogger(TaxonNameDaoHibernateImpl
.class);
72 private ITaxonDao taxonDao
;
74 public TaxonNameDaoHibernateImpl() {
75 super(TaxonNameBase
.class);
76 indexedClasses
= new Class
[6];
77 indexedClasses
[0] = BacterialName
.class;
78 indexedClasses
[1] = BotanicalName
.class;
79 indexedClasses
[2] = CultivarPlantName
.class;
80 indexedClasses
[3] = NonViralName
.class;
81 indexedClasses
[4] = ViralName
.class;
82 indexedClasses
[5] = ZoologicalName
.class;
85 public int countHybridNames(NonViralName name
, HybridRelationshipType type
) {
86 AuditEvent auditEvent
= getAuditEventFromContext();
87 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
90 query
= getSession().createQuery("select count(relation) from HybridRelationship relation where relation.relatedFrom = :name");
92 query
= getSession().createQuery("select count(relation) from HybridRelationship relation where relation.relatedFrom = :name and relation.type = :type");
93 query
.setParameter("type", type
);
95 query
.setParameter("name",name
);
96 return ((Long
)query
.uniqueResult()).intValue();
98 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(HybridRelationship
.class,auditEvent
.getRevisionNumber());
99 query
.add(AuditEntity
.relatedId("relatedFrom").eq(name
.getId()));
100 query
.addProjection(AuditEntity
.id().count("id"));
103 query
.add(AuditEntity
.relatedId("type").eq(type
.getId()));
106 return ((Long
)query
.getSingleResult()).intValue();
110 public int countNames(String queryString
) {
111 checkNotInPriorView("TaxonNameDaoHibernateImpl.countNames(String queryString)");
112 Criteria criteria
= getSession().createCriteria(TaxonNameBase
.class);
114 if (queryString
!= null) {
115 criteria
.add(Restrictions
.ilike("nameCache", queryString
));
117 criteria
.setProjection(Projections
.projectionList().add(Projections
.rowCount()));
119 return (Integer
)criteria
.uniqueResult();
122 public int countNames(String queryString
, MatchMode matchMode
, List
<Criterion
> criteria
) {
124 Criteria crit
= getSession().createCriteria(type
);
125 if (matchMode
== MatchMode
.EXACT
) {
126 crit
.add(Restrictions
.eq("nameCache", matchMode
.queryStringFrom(queryString
)));
128 crit
.add(Restrictions
.ilike("nameCache", matchMode
.queryStringFrom(queryString
)));
130 if(criteria
!= null) {
131 for (Criterion criterion
: criteria
) {
136 crit
.setProjection(Projections
.projectionList().add(Projections
.rowCount()));
137 return (Integer
)crit
.uniqueResult();
140 public int countNames(String genusOrUninomial
, String infraGenericEpithet
, String specificEpithet
, String infraSpecificEpithet
, Rank rank
) {
141 AuditEvent auditEvent
= getAuditEventFromContext();
142 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
143 Criteria criteria
= getSession().createCriteria(TaxonNameBase
.class);
146 * Given HHH-2951 - "Restrictions.eq when passed null, should create a NullRestriction"
147 * We need to convert nulls to NullRestrictions for now
149 if(genusOrUninomial
!= null) {
150 criteria
.add(Restrictions
.eq("genusOrUninomial",genusOrUninomial
));
152 criteria
.add(Restrictions
.isNull("genusOrUninomial"));
155 if(infraGenericEpithet
!= null) {
156 criteria
.add(Restrictions
.eq("infraGenericEpithet", infraGenericEpithet
));
158 criteria
.add(Restrictions
.isNull("infraGenericEpithet"));
161 if(specificEpithet
!= null) {
162 criteria
.add(Restrictions
.eq("specificEpithet", specificEpithet
));
164 criteria
.add(Restrictions
.isNull("specificEpithet"));
167 if(infraSpecificEpithet
!= null) {
168 criteria
.add(Restrictions
.eq("infraSpecificEpithet",infraSpecificEpithet
));
170 criteria
.add(Restrictions
.isNull("infraSpecificEpithet"));
174 criteria
.add(Restrictions
.eq("rank", rank
));
177 criteria
.setProjection(Projections
.rowCount());
178 return (Integer
)criteria
.uniqueResult();
180 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(TaxonNameBase
.class,auditEvent
.getRevisionNumber());
182 if(genusOrUninomial
!= null) {
183 query
.add(AuditEntity
.property("genusOrUninomial").eq(genusOrUninomial
));
185 query
.add(AuditEntity
.property("genusOrUninomial").isNull());
188 if(infraGenericEpithet
!= null) {
189 query
.add(AuditEntity
.property("infraGenericEpithet").eq(infraGenericEpithet
));
191 query
.add(AuditEntity
.property("infraGenericEpithet").isNull());
194 if(specificEpithet
!= null) {
195 query
.add(AuditEntity
.property("specificEpithet").eq(specificEpithet
));
197 query
.add(AuditEntity
.property("specificEpithet").isNull());
200 if(infraSpecificEpithet
!= null) {
201 query
.add(AuditEntity
.property("infraSpecificEpithet").eq(infraSpecificEpithet
));
203 query
.add(AuditEntity
.property("infraSpecificEpithet").isNull());
207 query
.add(AuditEntity
.relatedId("rank").eq(rank
.getId()));
210 query
.addProjection(AuditEntity
.id().count("id"));
211 return ((Long
)query
.getSingleResult()).intValue();
215 public int countNameRelationships(TaxonNameBase name
, NameRelationship
.Direction direction
, NameRelationshipType type
) {
217 AuditEvent auditEvent
= getAuditEventFromContext();
218 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
221 query
= getSession().createQuery("select count(relation) from NameRelationship relation where relation." + direction
+" = :name");
223 query
= getSession().createQuery("select count(relation) from NameRelationship relation where relation." + direction
+" = :name and relation.type = :type");
224 query
.setParameter("type", type
);
226 query
.setParameter("name",name
);
227 return ((Long
)query
.uniqueResult()).intValue();
229 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(NameRelationship
.class,auditEvent
.getRevisionNumber());
230 query
.add(AuditEntity
.relatedId(direction
.toString()).eq(name
.getId()));
231 query
.addProjection(AuditEntity
.id().count("id"));
234 query
.add(AuditEntity
.relatedId("type").eq(type
.getId()));
237 return ((Long
)query
.getSingleResult()).intValue();
241 public int countTypeDesignations(TaxonNameBase name
, SpecimenTypeDesignationStatus status
) {
242 checkNotInPriorView("countTypeDesignations(TaxonNameBase name, SpecimenTypeDesignationStatus status)");
245 query
= getSession().createQuery("select count(designation) from TypeDesignationBase designation join designation.typifiedNames name where name = :name");
247 query
= getSession().createQuery("select count(designation) from TypeDesignationBase designation join designation.typifiedNames name where name = :name and designation.typeStatus = :status");
248 query
.setParameter("status", status
);
250 query
.setParameter("name",name
);
251 return ((Long
)query
.uniqueResult()).intValue();
254 public List
<HybridRelationship
> getHybridNames(NonViralName name
, HybridRelationshipType type
, Integer pageSize
, Integer pageNumber
, List
<OrderHint
> orderHints
, List
<String
> propertyPaths
) {
255 AuditEvent auditEvent
= getAuditEventFromContext();
256 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
257 Criteria criteria
= getSession().createCriteria(HybridRelationship
.class);
258 criteria
.add(Restrictions
.eq("relatedFrom", name
));
260 criteria
.add(Restrictions
.eq("type", type
));
263 if(pageSize
!= null) {
264 criteria
.setMaxResults(pageSize
);
265 if(pageNumber
!= null) {
266 criteria
.setFirstResult(pageNumber
* pageSize
);
268 criteria
.setFirstResult(0);
272 addOrder(criteria
, orderHints
);
274 List
<HybridRelationship
> results
= (List
<HybridRelationship
>)criteria
.list();
275 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
278 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(HybridRelationship
.class,auditEvent
.getRevisionNumber());
279 query
.add(AuditEntity
.relatedId("relatedFrom").eq(name
.getId()));
282 query
.add(AuditEntity
.relatedId("type").eq(type
.getId()));
285 if(pageSize
!= null) {
286 query
.setMaxResults(pageSize
);
287 if(pageNumber
!= null) {
288 query
.setFirstResult(pageNumber
* pageSize
);
290 query
.setFirstResult(0);
294 List
<HybridRelationship
> results
= (List
<HybridRelationship
>)query
.getResultList();
295 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
301 * @see eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao#getNameRelationships(eu.etaxonomy.cdm.model.name.TaxonNameBase, eu.etaxonomy.cdm.model.common.RelationshipBase.Direction, eu.etaxonomy.cdm.model.name.NameRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)
303 public List
<NameRelationship
> getNameRelationships(TaxonNameBase name
, NameRelationship
.Direction direction
,
304 NameRelationshipType type
, Integer pageSize
, Integer pageNumber
, List
<OrderHint
> orderHints
,
305 List
<String
> propertyPaths
) {
307 AuditEvent auditEvent
= getAuditEventFromContext();
308 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
309 Criteria criteria
= getSession().createCriteria(NameRelationship
.class);
310 if (name
!= null || direction
!= null){
311 criteria
.add(Restrictions
.eq(direction
.toString(), name
));
314 criteria
.add(Restrictions
.eq("type", type
));
317 if(pageSize
!= null) {
318 criteria
.setMaxResults(pageSize
);
319 if(pageNumber
!= null) {
320 criteria
.setFirstResult(pageNumber
* pageSize
);
322 criteria
.setFirstResult(0);
325 addOrder(criteria
, orderHints
);
327 List
<NameRelationship
> results
= (List
<NameRelationship
>)criteria
.list();
328 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
331 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(NameRelationship
.class,auditEvent
.getRevisionNumber());
332 query
.add(AuditEntity
.relatedId(direction
.toString()).eq(name
.getId()));
335 query
.add(AuditEntity
.relatedId("type").eq(type
.getId()));
338 if(pageSize
!= null) {
339 query
.setMaxResults(pageSize
);
340 if(pageNumber
!= null) {
341 query
.setFirstResult(pageNumber
* pageSize
);
343 query
.setFirstResult(0);
347 List
<NameRelationship
> results
= (List
<NameRelationship
>)query
.getResultList();
348 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
353 public List
<TypeDesignationBase
> getTypeDesignations(TaxonNameBase name
, TypeDesignationStatusBase status
, Integer pageSize
, Integer pageNumber
, List
<String
> propertyPaths
){
354 return getTypeDesignations(name
, null, status
, pageSize
, pageNumber
, propertyPaths
);
357 public <T
extends TypeDesignationBase
> List
<T
> getTypeDesignations(TaxonNameBase name
,
359 TypeDesignationStatusBase status
, Integer pageSize
, Integer pageNumber
,
360 List
<String
> propertyPaths
){
361 checkNotInPriorView("getTypeDesignations(TaxonNameBase name,TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber, List<String> propertyPaths)");
363 String queryString
= "select designation from TypeDesignationBase designation join designation.typifiedNames name where name = :name";
366 queryString
+= " and designation.typeStatus = :status";
369 queryString
+= " and designation.class = :type";
372 query
= getSession().createQuery(queryString
);
375 query
.setParameter("status", status
);
378 query
.setParameter("type", type
.getSimpleName());
381 query
.setParameter("name",name
);
383 if(pageSize
!= null) {
384 query
.setMaxResults(pageSize
);
385 if(pageNumber
!= null) {
386 query
.setFirstResult(pageNumber
* pageSize
);
388 query
.setFirstResult(0);
391 return defaultBeanInitializer
.initializeAll((List
<T
>)query
.list(), propertyPaths
);
395 public List
<TaxonNameBase
<?
,?
>> searchNames(String queryString
, MatchMode matchMode
, Integer pageSize
, Integer pageNumber
) {
396 checkNotInPriorView("TaxonNameDaoHibernateImpl.searchNames(String queryString, Integer pageSize, Integer pageNumber)");
397 Criteria criteria
= getSession().createCriteria(TaxonNameBase
.class);
399 if (queryString
!= null) {
400 criteria
.add(Restrictions
.ilike("nameCache", queryString
));
402 if(pageSize
!= null) {
403 criteria
.setMaxResults(pageSize
);
404 if(pageNumber
!= null) {
405 criteria
.setFirstResult(pageNumber
* pageSize
);
407 criteria
.setFirstResult(0);
410 List
<TaxonNameBase
<?
,?
>> results
= criteria
.list();
415 public List
<TaxonNameBase
<?
,?
>> searchNames(String queryString
, Integer pageSize
, Integer pageNumber
) {
416 return searchNames(queryString
, MatchMode
.BEGINNING
, pageSize
, pageNumber
);
420 public List
<TaxonNameBase
> searchNames(String genusOrUninomial
,String infraGenericEpithet
, String specificEpithet
, String infraSpecificEpithet
, Rank rank
, Integer pageSize
,Integer pageNumber
, List
<OrderHint
> orderHints
,
421 List
<String
> propertyPaths
) {
422 AuditEvent auditEvent
= getAuditEventFromContext();
423 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
424 Criteria criteria
= getSession().createCriteria(TaxonNameBase
.class);
427 * Given HHH-2951 - "Restrictions.eq when passed null, should create a NullRestriction"
428 * We need to convert nulls to NullRestrictions for now
430 if(genusOrUninomial
!= null) {
431 criteria
.add(Restrictions
.eq("genusOrUninomial",genusOrUninomial
));
433 criteria
.add(Restrictions
.isNull("genusOrUninomial"));
436 if(infraGenericEpithet
!= null) {
437 criteria
.add(Restrictions
.eq("infraGenericEpithet", infraGenericEpithet
));
439 criteria
.add(Restrictions
.isNull("infraGenericEpithet"));
442 if(specificEpithet
!= null) {
443 criteria
.add(Restrictions
.eq("specificEpithet", specificEpithet
));
445 criteria
.add(Restrictions
.isNull("specificEpithet"));
448 if(infraSpecificEpithet
!= null) {
449 criteria
.add(Restrictions
.eq("infraSpecificEpithet",infraSpecificEpithet
));
451 criteria
.add(Restrictions
.isNull("infraSpecificEpithet"));
455 criteria
.add(Restrictions
.eq("rank", rank
));
458 if(pageSize
!= null) {
459 criteria
.setMaxResults(pageSize
);
460 if(pageNumber
!= null) {
461 criteria
.setFirstResult(pageNumber
* pageSize
);
463 criteria
.setFirstResult(0);
467 addOrder(criteria
, orderHints
);
469 List
<TaxonNameBase
> results
= (List
<TaxonNameBase
>)criteria
.list();
470 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
473 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(TaxonNameBase
.class,auditEvent
.getRevisionNumber());
475 if(genusOrUninomial
!= null) {
476 query
.add(AuditEntity
.property("genusOrUninomial").eq(genusOrUninomial
));
478 query
.add(AuditEntity
.property("genusOrUninomial").isNull());
481 if(infraGenericEpithet
!= null) {
482 query
.add(AuditEntity
.property("infraGenericEpithet").eq(infraGenericEpithet
));
484 query
.add(AuditEntity
.property("infraGenericEpithet").isNull());
487 if(specificEpithet
!= null) {
488 query
.add(AuditEntity
.property("specificEpithet").eq(specificEpithet
));
490 query
.add(AuditEntity
.property("specificEpithet").isNull());
493 if(infraSpecificEpithet
!= null) {
494 query
.add(AuditEntity
.property("infraSpecificEpithet").eq(infraSpecificEpithet
));
496 query
.add(AuditEntity
.property("infraSpecificEpithet").isNull());
500 query
.add(AuditEntity
.relatedId("rank").eq(rank
.getId()));
503 if(pageSize
!= null) {
504 query
.setMaxResults(pageSize
);
505 if(pageNumber
!= null) {
506 query
.setFirstResult(pageNumber
* pageSize
);
508 query
.setFirstResult(0);
512 List
<TaxonNameBase
> results
= (List
<TaxonNameBase
>)query
.getResultList();
513 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
518 public List
<?
extends TaxonNameBase
<?
,?
>> findByName(String queryString
,
519 MatchMode matchmode
, Integer pageSize
, Integer pageNumber
, List
<Criterion
> criteria
, List
<String
> propertyPaths
) {
521 Criteria crit
= getSession().createCriteria(type
);
522 if (matchmode
== MatchMode
.EXACT
) {
523 crit
.add(Restrictions
.eq("nameCache", matchmode
.queryStringFrom(queryString
)));
525 crit
.add(Restrictions
.ilike("nameCache", matchmode
.queryStringFrom(queryString
)));
527 if(criteria
!= null){
528 for (Criterion criterion
: criteria
) {
532 crit
.addOrder(Order
.asc("nameCache"));
534 if(pageSize
!= null) {
535 crit
.setMaxResults(pageSize
);
536 if(pageNumber
!= null) {
537 crit
.setFirstResult(pageNumber
* pageSize
);
541 List
<?
extends TaxonNameBase
<?
,?
>> results
= crit
.list();
542 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
547 public List
<RelationshipBase
> getRelationships(Integer limit
, Integer start
) {
548 AuditEvent auditEvent
= getAuditEventFromContext();
549 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
550 //FIXME only NameRelationships
551 Criteria criteria
= getSession().createCriteria(RelationshipBase
.class);
552 return (List
<RelationshipBase
>)criteria
.list();
554 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(RelationshipBase
.class,auditEvent
.getRevisionNumber());
555 return (List
<RelationshipBase
>)query
.getResultList();
560 public Integer
countByName(String queryString
, MatchMode matchmode
, List
<Criterion
> criteria
) {
561 //TODO improve performance
562 List
<?
extends TaxonNameBase
<?
,?
>> results
= findByName(queryString
, matchmode
, null, null, criteria
, null);
563 return results
.size();
568 * @see eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao#getUuidAndTitleCacheOfNames()
570 public List
<UuidAndTitleCache
> getUuidAndTitleCacheOfNames() {
571 String queryString
= "SELECT uuid, fullTitleCache FROM TaxonNameBase";
573 List
<Object
[]> result
= getSession().createSQLQuery(queryString
).list();
575 if(result
.size() == 0){
578 List
<UuidAndTitleCache
> list
= new ArrayList
<UuidAndTitleCache
>(result
.size());
580 for (Object object
: result
){
582 Object
[] objectArray
= (Object
[]) object
;
584 UUID uuid
= UUID
.fromString((String
) objectArray
[0]);
585 String titleCache
= (String
) objectArray
[1];
587 list
.add(new UuidAndTitleCache(type
, uuid
, titleCache
));
594 public Integer
countByName(Class
<?
extends TaxonNameBase
> clazz
,String queryString
, MatchMode matchmode
, List
<Criterion
> criteria
) {
595 return super.countByParam(clazz
, "nameCache", queryString
, matchmode
, criteria
);
598 public List
<TaxonNameBase
> findByName(Class
<?
extends TaxonNameBase
> clazz
, String queryString
, MatchMode matchmode
, List
<Criterion
> criteria
,Integer pageSize
, Integer pageNumber
, List
<OrderHint
> orderHints
, List
<String
> propertyPaths
) {
599 return super.findByParam(clazz
, "nameCache", queryString
, matchmode
, criteria
, pageSize
, pageNumber
, orderHints
, propertyPaths
);
602 public UUID
delete (TaxonNameBase persistentObject
){
603 Set
<TaxonBase
> taxonBases
= persistentObject
.getTaxonBases();
604 super.delete(persistentObject
);
606 for (TaxonBase taxonBase
: taxonBases
){
607 taxonDao
.delete(taxonBase
);
609 return persistentObject
.getUuid();
612 public List
<ZoologicalName
> getZoologicalNames(Integer limit
, Integer start
){
613 List
<TaxonNameBase
> names
= new ArrayList
<TaxonNameBase
>();
614 List
<ZoologicalName
> zooNames
= new ArrayList
<ZoologicalName
>();
615 names
= super.list(ZoologicalName
.class, limit
, start
);
616 for (TaxonNameBase name
: names
){
617 zooNames
.add((ZoologicalName
)name
);
622 public ZoologicalName
findZoologicalNameByUUID(UUID uuid
){
623 Criteria criteria
= getSession().createCriteria(type
);
625 criteria
.add(Restrictions
.eq("uuid", uuid
));
627 logger
.error("UUID is NULL");
631 List
<?
extends TaxonNameBase
<?
,?
>> results
= criteria
.list();
632 if (results
.size() == 1) {
633 defaultBeanInitializer
.initializeAll(results
, null);
634 TaxonNameBase
<?
, ?
> taxonName
= results
.iterator().next();
635 if (taxonName
.isInstanceOf(ZoologicalName
.class)) {
636 ZoologicalName zoologicalName
= CdmBase
.deproxy(taxonName
, ZoologicalName
.class);
637 return zoologicalName
;
639 logger
.warn("This UUID (" + uuid
+ ") does not belong to a ZoologicalName. It belongs to: " + taxonName
.getUuid() + " (" + taxonName
.getTitleCache() + ")");
641 } else if (results
.size() > 1) {
642 logger
.warn("Multiple results for UUID: " + uuid
);
643 } else if (results
.size() == 0) {
644 logger
.warn("No results for UUID: " + uuid
);