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
);
300 public List
<NameRelationship
> getNameRelationships(TaxonNameBase name
, NameRelationship
.Direction direction
,
301 NameRelationshipType type
, Integer pageSize
, Integer pageNumber
, List
<OrderHint
> orderHints
,
302 List
<String
> propertyPaths
) {
304 AuditEvent auditEvent
= getAuditEventFromContext();
305 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
306 Criteria criteria
= getSession().createCriteria(NameRelationship
.class);
307 criteria
.add(Restrictions
.eq(direction
.toString(), name
));
309 criteria
.add(Restrictions
.eq("type", type
));
312 if(pageSize
!= null) {
313 criteria
.setMaxResults(pageSize
);
314 if(pageNumber
!= null) {
315 criteria
.setFirstResult(pageNumber
* pageSize
);
317 criteria
.setFirstResult(0);
320 addOrder(criteria
, orderHints
);
322 List
<NameRelationship
> results
= (List
<NameRelationship
>)criteria
.list();
323 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
326 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(NameRelationship
.class,auditEvent
.getRevisionNumber());
327 query
.add(AuditEntity
.relatedId(direction
.toString()).eq(name
.getId()));
330 query
.add(AuditEntity
.relatedId("type").eq(type
.getId()));
333 if(pageSize
!= null) {
334 query
.setMaxResults(pageSize
);
335 if(pageNumber
!= null) {
336 query
.setFirstResult(pageNumber
* pageSize
);
338 query
.setFirstResult(0);
342 List
<NameRelationship
> results
= (List
<NameRelationship
>)query
.getResultList();
343 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
348 public List
<TypeDesignationBase
> getTypeDesignations(TaxonNameBase name
, TypeDesignationStatusBase status
, Integer pageSize
, Integer pageNumber
, List
<String
> propertyPaths
){
349 return getTypeDesignations(name
, null, status
, pageSize
, pageNumber
, propertyPaths
);
352 public <T
extends TypeDesignationBase
> List
<T
> getTypeDesignations(TaxonNameBase name
,
354 TypeDesignationStatusBase status
, Integer pageSize
, Integer pageNumber
,
355 List
<String
> propertyPaths
){
356 checkNotInPriorView("getTypeDesignations(TaxonNameBase name,TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber, List<String> propertyPaths)");
358 String queryString
= "select designation from TypeDesignationBase designation join designation.typifiedNames name where name = :name";
361 queryString
+= " and designation.typeStatus = :status";
364 queryString
+= " and designation.class = :type";
367 query
= getSession().createQuery(queryString
);
370 query
.setParameter("status", status
);
373 query
.setParameter("type", type
.getSimpleName());
376 query
.setParameter("name",name
);
378 if(pageSize
!= null) {
379 query
.setMaxResults(pageSize
);
380 if(pageNumber
!= null) {
381 query
.setFirstResult(pageNumber
* pageSize
);
383 query
.setFirstResult(0);
386 return defaultBeanInitializer
.initializeAll((List
<T
>)query
.list(), propertyPaths
);
390 public List
<TaxonNameBase
<?
,?
>> searchNames(String queryString
, MatchMode matchMode
, Integer pageSize
, Integer pageNumber
) {
391 checkNotInPriorView("TaxonNameDaoHibernateImpl.searchNames(String queryString, Integer pageSize, Integer pageNumber)");
392 Criteria criteria
= getSession().createCriteria(TaxonNameBase
.class);
394 if (queryString
!= null) {
395 criteria
.add(Restrictions
.ilike("nameCache", queryString
));
397 if(pageSize
!= null) {
398 criteria
.setMaxResults(pageSize
);
399 if(pageNumber
!= null) {
400 criteria
.setFirstResult(pageNumber
* pageSize
);
402 criteria
.setFirstResult(0);
405 List
<TaxonNameBase
<?
,?
>> results
= criteria
.list();
410 public List
<TaxonNameBase
<?
,?
>> searchNames(String queryString
, Integer pageSize
, Integer pageNumber
) {
411 return searchNames(queryString
, MatchMode
.BEGINNING
, pageSize
, pageNumber
);
415 public List
<TaxonNameBase
> searchNames(String genusOrUninomial
,String infraGenericEpithet
, String specificEpithet
, String infraSpecificEpithet
, Rank rank
, Integer pageSize
,Integer pageNumber
, List
<OrderHint
> orderHints
,
416 List
<String
> propertyPaths
) {
417 AuditEvent auditEvent
= getAuditEventFromContext();
418 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
419 Criteria criteria
= getSession().createCriteria(TaxonNameBase
.class);
422 * Given HHH-2951 - "Restrictions.eq when passed null, should create a NullRestriction"
423 * We need to convert nulls to NullRestrictions for now
425 if(genusOrUninomial
!= null) {
426 criteria
.add(Restrictions
.eq("genusOrUninomial",genusOrUninomial
));
428 criteria
.add(Restrictions
.isNull("genusOrUninomial"));
431 if(infraGenericEpithet
!= null) {
432 criteria
.add(Restrictions
.eq("infraGenericEpithet", infraGenericEpithet
));
434 criteria
.add(Restrictions
.isNull("infraGenericEpithet"));
437 if(specificEpithet
!= null) {
438 criteria
.add(Restrictions
.eq("specificEpithet", specificEpithet
));
440 criteria
.add(Restrictions
.isNull("specificEpithet"));
443 if(infraSpecificEpithet
!= null) {
444 criteria
.add(Restrictions
.eq("infraSpecificEpithet",infraSpecificEpithet
));
446 criteria
.add(Restrictions
.isNull("infraSpecificEpithet"));
450 criteria
.add(Restrictions
.eq("rank", rank
));
453 if(pageSize
!= null) {
454 criteria
.setMaxResults(pageSize
);
455 if(pageNumber
!= null) {
456 criteria
.setFirstResult(pageNumber
* pageSize
);
458 criteria
.setFirstResult(0);
462 addOrder(criteria
, orderHints
);
464 List
<TaxonNameBase
> results
= (List
<TaxonNameBase
>)criteria
.list();
465 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
468 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(TaxonNameBase
.class,auditEvent
.getRevisionNumber());
470 if(genusOrUninomial
!= null) {
471 query
.add(AuditEntity
.property("genusOrUninomial").eq(genusOrUninomial
));
473 query
.add(AuditEntity
.property("genusOrUninomial").isNull());
476 if(infraGenericEpithet
!= null) {
477 query
.add(AuditEntity
.property("infraGenericEpithet").eq(infraGenericEpithet
));
479 query
.add(AuditEntity
.property("infraGenericEpithet").isNull());
482 if(specificEpithet
!= null) {
483 query
.add(AuditEntity
.property("specificEpithet").eq(specificEpithet
));
485 query
.add(AuditEntity
.property("specificEpithet").isNull());
488 if(infraSpecificEpithet
!= null) {
489 query
.add(AuditEntity
.property("infraSpecificEpithet").eq(infraSpecificEpithet
));
491 query
.add(AuditEntity
.property("infraSpecificEpithet").isNull());
495 query
.add(AuditEntity
.relatedId("rank").eq(rank
.getId()));
498 if(pageSize
!= null) {
499 query
.setMaxResults(pageSize
);
500 if(pageNumber
!= null) {
501 query
.setFirstResult(pageNumber
* pageSize
);
503 query
.setFirstResult(0);
507 List
<TaxonNameBase
> results
= (List
<TaxonNameBase
>)query
.getResultList();
508 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
513 public List
<?
extends TaxonNameBase
<?
,?
>> findByName(String queryString
,
514 MatchMode matchmode
, Integer pageSize
, Integer pageNumber
, List
<Criterion
> criteria
, List
<String
> propertyPaths
) {
516 Criteria crit
= getSession().createCriteria(type
);
517 if (matchmode
== MatchMode
.EXACT
) {
518 crit
.add(Restrictions
.eq("nameCache", matchmode
.queryStringFrom(queryString
)));
520 crit
.add(Restrictions
.ilike("nameCache", matchmode
.queryStringFrom(queryString
)));
522 if(criteria
!= null){
523 for (Criterion criterion
: criteria
) {
527 crit
.addOrder(Order
.asc("nameCache"));
529 if(pageSize
!= null) {
530 crit
.setMaxResults(pageSize
);
531 if(pageNumber
!= null) {
532 crit
.setFirstResult(pageNumber
* pageSize
);
536 List
<?
extends TaxonNameBase
<?
,?
>> results
= crit
.list();
537 defaultBeanInitializer
.initializeAll(results
, propertyPaths
);
542 public List
<RelationshipBase
> getAllRelationships(Integer limit
, Integer start
) {
543 AuditEvent auditEvent
= getAuditEventFromContext();
544 if(auditEvent
.equals(AuditEvent
.CURRENT_VIEW
)) {
545 //FIXME only NameRelationships
546 Criteria criteria
= getSession().createCriteria(RelationshipBase
.class);
547 return (List
<RelationshipBase
>)criteria
.list();
549 AuditQuery query
= getAuditReader().createQuery().forEntitiesAtRevision(RelationshipBase
.class,auditEvent
.getRevisionNumber());
550 return (List
<RelationshipBase
>)query
.getResultList();
555 public Integer
countByName(String queryString
, MatchMode matchmode
, List
<Criterion
> criteria
) {
556 //TODO improve performance
557 List
<?
extends TaxonNameBase
<?
,?
>> results
= findByName(queryString
, matchmode
, null, null, criteria
, null);
558 return results
.size();
563 * @see eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao#getUuidAndTitleCacheOfNames()
565 public List
<UuidAndTitleCache
> getUuidAndTitleCacheOfNames() {
566 String queryString
= "SELECT uuid, fullTitleCache FROM TaxonNameBase";
568 List
<Object
[]> result
= getSession().createSQLQuery(queryString
).list();
570 if(result
.size() == 0){
573 List
<UuidAndTitleCache
> list
= new ArrayList
<UuidAndTitleCache
>(result
.size());
575 for (Object object
: result
){
577 Object
[] objectArray
= (Object
[]) object
;
579 UUID uuid
= UUID
.fromString((String
) objectArray
[0]);
580 String titleCache
= (String
) objectArray
[1];
582 list
.add(new UuidAndTitleCache(type
, uuid
, titleCache
));
589 public Integer
countByName(Class
<?
extends TaxonNameBase
> clazz
,String queryString
, MatchMode matchmode
, List
<Criterion
> criteria
) {
590 return super.countByParam(clazz
, "nameCache", queryString
, matchmode
, criteria
);
593 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
) {
594 return super.findByParam(clazz
, "nameCache", queryString
, matchmode
, criteria
, pageSize
, pageNumber
, orderHints
, propertyPaths
);
597 public UUID
delete (TaxonNameBase persistentObject
){
598 Set
<TaxonBase
> taxonBases
= persistentObject
.getTaxonBases();
599 super.delete(persistentObject
);
601 for (TaxonBase taxonBase
: taxonBases
){
602 taxonDao
.delete(taxonBase
);
604 return persistentObject
.getUuid();
607 public List
<ZoologicalName
> getAllZoologicalNames(Integer limit
, Integer start
){
608 List
<TaxonNameBase
> names
= new ArrayList
<TaxonNameBase
>();
609 List
<ZoologicalName
> zooNames
= new ArrayList
<ZoologicalName
>();
610 names
= super.list(ZoologicalName
.class, limit
, start
);
611 for (TaxonNameBase name
: names
){
612 zooNames
.add((ZoologicalName
)name
);
617 public ZoologicalName
findZoologicalNameByUUID(UUID uuid
){
618 Criteria criteria
= getSession().createCriteria(type
);
620 criteria
.add(Restrictions
.eq("uuid", uuid
));
622 logger
.error("UUID is NULL");
626 List
<?
extends TaxonNameBase
<?
,?
>> results
= criteria
.list();
627 if (results
.size() == 1) {
628 defaultBeanInitializer
.initializeAll(results
, null);
629 TaxonNameBase
<?
, ?
> taxonName
= results
.iterator().next();
630 if (taxonName
.isInstanceOf(ZoologicalName
.class)) {
631 ZoologicalName zoologicalName
= CdmBase
.deproxy(taxonName
, ZoologicalName
.class);
632 return zoologicalName
;
634 logger
.warn("This UUID (" + uuid
+ ") does not belong to a ZoologicalName. It belongs to: " + taxonName
.getUuid() + " (" + taxonName
.getTitleCache() + ")");
636 } else if (results
.size() > 1) {
637 logger
.warn("Multiple results for UUID: " + uuid
);
638 } else if (results
.size() == 0) {
639 logger
.warn("No results for UUID: " + uuid
);