+ public UUID delete(TaxonBase taxonBase) throws DataAccessException{\r
+ //getSession().update(taxonBase); doesn't work with lazy collections\r
+ //annotations\r
+ try {\r
+ Set<Annotation> annotations = taxonBase.getAnnotations();\r
+ for (Annotation annotation: annotations){\r
+ taxonBase.removeAnnotation(annotation);\r
+ }\r
+ } catch (LazyInitializationException e) {\r
+ logger.warn("LazyInitializationException: " + e);\r
+ }\r
+ //markers\r
+ try {\r
+ Set<Marker> markers = taxonBase.getMarkers();\r
+ for (Marker marker: markers){\r
+ taxonBase.removeMarker(marker);\r
+ }\r
+ } catch (LazyInitializationException e) {\r
+ logger.warn("LazyInitializationException: " + e);\r
+ }\r
+ //originalSource\r
+ try {\r
+ Set<OriginalSource> origSources = taxonBase.getSources();\r
+ for (OriginalSource source: origSources){\r
+ taxonBase.removeSource(source);\r
+ }\r
+ } catch (LazyInitializationException e) {\r
+ logger.warn("LazyInitializationException: " + e);\r
+ }\r
+ //is Taxon\r
+ taxonBase.getName().removeTaxonBase(taxonBase);\r
+ if (taxonBase instanceof Taxon){\r
+ //taxonRelationships\r
+ Taxon taxon = (Taxon)taxonBase;\r
+ Set<TaxonRelationship> taxRels = taxon.getTaxonRelations();\r
+ for (TaxonRelationship taxRel: taxRels){\r
+ taxon.removeTaxonRelation(taxRel);\r
+ } ;\r
+ //SynonymRelationships\r
+ Set<SynonymRelationship> synRels = taxon.getSynonymRelations();\r
+ for (SynonymRelationship synRel: synRels){\r
+ taxon.removeSynonymRelation(synRel);\r
+ } ;\r
+ }//is Synonym\r
+ else if (taxonBase instanceof Synonym){\r
+ Synonym synonym = (Synonym)taxonBase;\r
+ Set<SynonymRelationship> synRels = synonym.getSynonymRelations();\r
+ for (SynonymRelationship synRel: synRels){\r
+ synonym.removeSynonymRelation(synRel);\r
+ } ;\r
+ }\r
+ return super.delete(taxonBase);\r
+ }\r
+\r
+\r
+ // TODO add generic return type !!\r
+ public List findByName(String queryString, ITitledDao.MATCH_MODE matchMode, int page, int pagesize, boolean onlyAcccepted) {\r
+ ArrayList<Criterion> criteria = new ArrayList<Criterion>();\r
+ //TODO ... Restrictions.eq(propertyName, value)\r
+ return super.findByTitle(queryString, matchMode, page, pagesize, criteria);\r
+\r
+ }\r
+\r
+ public int countMatchesByName(String queryString, ITitledDao.MATCH_MODE matchMode, boolean onlyAcccepted) {\r
+\r
+ Criteria crit = getSession().createCriteria(type);\r
+ crit.add(Restrictions.ilike("persistentTitleCache", matchMode.queryStringFrom(queryString)));\r
+ crit.setProjection(Projections.rowCount());\r
+ int result = ((Integer)crit.list().get(0)).intValue();\r
+ return result;\r
+ }\r
+\r
+\r
+ public int countMatchesByName(String queryString, ITitledDao.MATCH_MODE matchMode, boolean onlyAcccepted, List<Criterion> criteria) {\r
+\r
+ Criteria crit = getSession().createCriteria(type);\r
+ crit.add(Restrictions.ilike("persistentTitleCache", matchMode.queryStringFrom(queryString)));\r
+ if(criteria != null){\r
+ for (Criterion criterion : criteria) {\r
+ crit.add(criterion);\r
+ }\r
+ }\r
+ crit.setProjection(Projections.rowCount());\r
+ int result = ((Integer)crit.list().get(0)).intValue();\r
+ return result;\r
+ }\r
+\r
+ public int countRelatedTaxa(Taxon taxon, TaxonRelationshipType type) {\r
+ Query query = null;\r
+ \r
+ if(type == null) {\r
+ query = getSession().createQuery("select count(taxonRelationship) from TaxonRelationship taxonRelationship where taxonRelationship.relatedTo = :relatedTo");\r
+ } else {\r
+ query = getSession().createQuery("select count(taxonRelationship) from TaxonRelationship taxonRelationship where taxonRelationship.relatedTo = :relatedTo and taxonRelationship.type = :type");\r
+ query.setParameter("type",type);\r
+ }\r
+ \r
+ query.setParameter("relatedTo", taxon);\r
+ \r
+ return ((Long)query.uniqueResult()).intValue();\r
+ }\r
+\r
+ public int countSynonyms(Taxon taxon, SynonymRelationshipType type) {\r
+ Query query = null;\r