Project

General

Profile

Revision c9b17396

IDc9b17396a68491dcaf0986888f4d1a6007895aee
Parent ab431a5a
Child ef9c1361

Added by Andreas Kohlbecker about 7 years ago

missing @Override

View differences:

cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/persistence/dao/hibernate/name/TaxonNameDaoHibernateImpl.java
61 61
@Qualifier("taxonNameDaoHibernateImpl")
62 62
public class TaxonNameDaoHibernateImpl extends IdentifiableDaoBase<TaxonNameBase> implements ITaxonNameDao {
63 63

  
64
	private static final Logger logger = Logger.getLogger(TaxonNameDaoHibernateImpl.class);
65

  
66
	@Autowired
67
	private ITaxonDao taxonDao;
68

  
69
	public TaxonNameDaoHibernateImpl() {
70
		super(TaxonNameBase.class);
71
		indexedClasses = new Class[6];
72
		indexedClasses[0] = BacterialName.class;
73
		indexedClasses[1] = BotanicalName.class;
74
		indexedClasses[2] = CultivarPlantName.class;
75
		indexedClasses[3] = NonViralName.class;
76
		indexedClasses[4] = ViralName.class;
77
		indexedClasses[5] = ZoologicalName.class;
78
	}
79

  
80
	@Override
64
    private static final Logger logger = Logger.getLogger(TaxonNameDaoHibernateImpl.class);
65

  
66
    @Autowired
67
    private ITaxonDao taxonDao;
68

  
69
    public TaxonNameDaoHibernateImpl() {
70
        super(TaxonNameBase.class);
71
        indexedClasses = new Class[6];
72
        indexedClasses[0] = BacterialName.class;
73
        indexedClasses[1] = BotanicalName.class;
74
        indexedClasses[2] = CultivarPlantName.class;
75
        indexedClasses[3] = NonViralName.class;
76
        indexedClasses[4] = ViralName.class;
77
        indexedClasses[5] = ZoologicalName.class;
78
    }
79

  
80
    @Override
81 81
    public int countHybridNames(NonViralName name, HybridRelationshipType type) {
82
		AuditEvent auditEvent = getAuditEventFromContext();
83
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
84
			Query query = null;
85
			if(type == null) {
86
				query = getSession().createQuery("select count(relation) from HybridRelationship relation where relation.relatedFrom = :name");
87
			} else {
88
				query = getSession().createQuery("select count(relation) from HybridRelationship relation where relation.relatedFrom = :name and relation.type = :type");
89
				query.setParameter("type", type);
90
			}
91
			query.setParameter("name",name);
92
			return ((Long)query.uniqueResult()).intValue();
93
		} else {
94
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(HybridRelationship.class,auditEvent.getRevisionNumber());
95
			query.add(AuditEntity.relatedId("relatedFrom").eq(name.getId()));
96
			query.addProjection(AuditEntity.id().count("id"));
97

  
98
			if(type != null) {
99
				query.add(AuditEntity.relatedId("type").eq(type.getId()));
100
			}
101

  
102
			return ((Long)query.getSingleResult()).intValue();
103
		}
104
	}
105

  
106
	@Override
82
        AuditEvent auditEvent = getAuditEventFromContext();
83
        if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
84
            Query query = null;
85
            if(type == null) {
86
                query = getSession().createQuery("select count(relation) from HybridRelationship relation where relation.relatedFrom = :name");
87
            } else {
88
                query = getSession().createQuery("select count(relation) from HybridRelationship relation where relation.relatedFrom = :name and relation.type = :type");
89
                query.setParameter("type", type);
90
            }
91
            query.setParameter("name",name);
92
            return ((Long)query.uniqueResult()).intValue();
93
        } else {
94
            AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(HybridRelationship.class,auditEvent.getRevisionNumber());
95
            query.add(AuditEntity.relatedId("relatedFrom").eq(name.getId()));
96
            query.addProjection(AuditEntity.id().count("id"));
97

  
98
            if(type != null) {
99
                query.add(AuditEntity.relatedId("type").eq(type.getId()));
100
            }
101

  
102
            return ((Long)query.getSingleResult()).intValue();
103
        }
104
    }
105

  
106
    @Override
107 107
    public int countNames(String queryString) {
108
		checkNotInPriorView("TaxonNameDaoHibernateImpl.countNames(String queryString)");
108
        checkNotInPriorView("TaxonNameDaoHibernateImpl.countNames(String queryString)");
109 109
        Criteria criteria = getSession().createCriteria(TaxonNameBase.class);
110 110

  
111
		if (queryString != null) {
112
			criteria.add(Restrictions.ilike("nameCache", queryString));
113
		}
114
		criteria.setProjection(Projections.projectionList().add(Projections.rowCount()));
111
        if (queryString != null) {
112
            criteria.add(Restrictions.ilike("nameCache", queryString));
113
        }
114
        criteria.setProjection(Projections.projectionList().add(Projections.rowCount()));
115 115

  
116
		return ((Number)criteria.uniqueResult()).intValue();
117
	}
116
        return ((Number)criteria.uniqueResult()).intValue();
117
    }
118 118

  
119
	@Override
119
    @Override
120 120
    public int countNames(String queryString, MatchMode matchMode, List<Criterion> criteria) {
121 121

  
122
		Criteria crit = getSession().createCriteria(type);
123
		if (matchMode == MatchMode.EXACT) {
124
			crit.add(Restrictions.eq("nameCache", matchMode.queryStringFrom(queryString)));
125
		} else {
126
			crit.add(Restrictions.ilike("nameCache", matchMode.queryStringFrom(queryString)));
127
		}
128
		if(criteria != null) {
129
			for (Criterion criterion : criteria) {
130
				crit.add(criterion);
131
			}
132
		}
133

  
134
		crit.setProjection(Projections.projectionList().add(Projections.rowCount()));
135
		return ((Number)crit.uniqueResult()).intValue();
136
	}
137

  
138
	@Override
122
        Criteria crit = getSession().createCriteria(type);
123
        if (matchMode == MatchMode.EXACT) {
124
            crit.add(Restrictions.eq("nameCache", matchMode.queryStringFrom(queryString)));
125
        } else {
126
            crit.add(Restrictions.ilike("nameCache", matchMode.queryStringFrom(queryString)));
127
        }
128
        if(criteria != null) {
129
            for (Criterion criterion : criteria) {
130
                crit.add(criterion);
131
            }
132
        }
133

  
134
        crit.setProjection(Projections.projectionList().add(Projections.rowCount()));
135
        return ((Number)crit.uniqueResult()).intValue();
136
    }
137

  
138
    @Override
139 139
    public int countNames(String genusOrUninomial, String infraGenericEpithet,	String specificEpithet, String infraSpecificEpithet, Rank rank) {
140
		AuditEvent auditEvent = getAuditEventFromContext();
141
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
142
			Criteria criteria = getSession().createCriteria(TaxonNameBase.class);
143

  
144
			/**
145
			 * Given HHH-2951 - "Restrictions.eq when passed null, should create a NullRestriction"
146
			 * We need to convert nulls to NullRestrictions for now
147
			 */
148
			if(genusOrUninomial != null) {
149
				criteria.add(Restrictions.eq("genusOrUninomial",genusOrUninomial));
150
			} else {
151
				criteria.add(Restrictions.isNull("genusOrUninomial"));
152
			}
153

  
154
			if(infraGenericEpithet != null) {
155
				criteria.add(Restrictions.eq("infraGenericEpithet", infraGenericEpithet));
156
			} else {
157
				criteria.add(Restrictions.isNull("infraGenericEpithet"));
158
			}
159

  
160
			if(specificEpithet != null) {
161
				criteria.add(Restrictions.eq("specificEpithet", specificEpithet));
162
			} else {
163
				criteria.add(Restrictions.isNull("specificEpithet"));
164
			}
165

  
166
			if(infraSpecificEpithet != null) {
167
				criteria.add(Restrictions.eq("infraSpecificEpithet",infraSpecificEpithet));
168
			} else {
169
				criteria.add(Restrictions.isNull("infraSpecificEpithet"));
170
			}
171

  
172
			if(rank != null) {
173
				criteria.add(Restrictions.eq("rank", rank));
174
			}
175

  
176
			criteria.setProjection(Projections.rowCount());
177
			return ((Number)criteria.uniqueResult()).intValue();
178
		} else {
179
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(TaxonNameBase.class,auditEvent.getRevisionNumber());
180

  
181
			if(genusOrUninomial != null) {
182
				query.add(AuditEntity.property("genusOrUninomial").eq(genusOrUninomial));
183
			} else {
184
				query.add(AuditEntity.property("genusOrUninomial").isNull());
185
			}
186

  
187
			if(infraGenericEpithet != null) {
188
				query.add(AuditEntity.property("infraGenericEpithet").eq(infraGenericEpithet));
189
			} else {
190
				query.add(AuditEntity.property("infraGenericEpithet").isNull());
191
			}
192

  
193
			if(specificEpithet != null) {
194
				query.add(AuditEntity.property("specificEpithet").eq(specificEpithet));
195
			} else {
196
				query.add(AuditEntity.property("specificEpithet").isNull());
197
			}
198

  
199
			if(infraSpecificEpithet != null) {
200
				query.add(AuditEntity.property("infraSpecificEpithet").eq(infraSpecificEpithet));
201
			} else {
202
				query.add(AuditEntity.property("infraSpecificEpithet").isNull());
203
			}
204

  
205
			if(rank != null) {
206
				query.add(AuditEntity.relatedId("rank").eq(rank.getId()));
207
			}
208

  
209
			query.addProjection(AuditEntity.id().count("id"));
210
			return ((Long)query.getSingleResult()).intValue();
211
		}
212
	}
213

  
214
	@Override
140
        AuditEvent auditEvent = getAuditEventFromContext();
141
        if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
142
            Criteria criteria = getSession().createCriteria(TaxonNameBase.class);
143

  
144
            /**
145
             * Given HHH-2951 - "Restrictions.eq when passed null, should create a NullRestriction"
146
             * We need to convert nulls to NullRestrictions for now
147
             */
148
            if(genusOrUninomial != null) {
149
                criteria.add(Restrictions.eq("genusOrUninomial",genusOrUninomial));
150
            } else {
151
                criteria.add(Restrictions.isNull("genusOrUninomial"));
152
            }
153

  
154
            if(infraGenericEpithet != null) {
155
                criteria.add(Restrictions.eq("infraGenericEpithet", infraGenericEpithet));
156
            } else {
157
                criteria.add(Restrictions.isNull("infraGenericEpithet"));
158
            }
159

  
160
            if(specificEpithet != null) {
161
                criteria.add(Restrictions.eq("specificEpithet", specificEpithet));
162
            } else {
163
                criteria.add(Restrictions.isNull("specificEpithet"));
164
            }
165

  
166
            if(infraSpecificEpithet != null) {
167
                criteria.add(Restrictions.eq("infraSpecificEpithet",infraSpecificEpithet));
168
            } else {
169
                criteria.add(Restrictions.isNull("infraSpecificEpithet"));
170
            }
171

  
172
            if(rank != null) {
173
                criteria.add(Restrictions.eq("rank", rank));
174
            }
175

  
176
            criteria.setProjection(Projections.rowCount());
177
            return ((Number)criteria.uniqueResult()).intValue();
178
        } else {
179
            AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(TaxonNameBase.class,auditEvent.getRevisionNumber());
180

  
181
            if(genusOrUninomial != null) {
182
                query.add(AuditEntity.property("genusOrUninomial").eq(genusOrUninomial));
183
            } else {
184
                query.add(AuditEntity.property("genusOrUninomial").isNull());
185
            }
186

  
187
            if(infraGenericEpithet != null) {
188
                query.add(AuditEntity.property("infraGenericEpithet").eq(infraGenericEpithet));
189
            } else {
190
                query.add(AuditEntity.property("infraGenericEpithet").isNull());
191
            }
192

  
193
            if(specificEpithet != null) {
194
                query.add(AuditEntity.property("specificEpithet").eq(specificEpithet));
195
            } else {
196
                query.add(AuditEntity.property("specificEpithet").isNull());
197
            }
198

  
199
            if(infraSpecificEpithet != null) {
200
                query.add(AuditEntity.property("infraSpecificEpithet").eq(infraSpecificEpithet));
201
            } else {
202
                query.add(AuditEntity.property("infraSpecificEpithet").isNull());
203
            }
204

  
205
            if(rank != null) {
206
                query.add(AuditEntity.relatedId("rank").eq(rank.getId()));
207
            }
208

  
209
            query.addProjection(AuditEntity.id().count("id"));
210
            return ((Long)query.getSingleResult()).intValue();
211
        }
212
    }
213

  
214
    @Override
215 215
    public int countNameRelationships(TaxonNameBase name, NameRelationship.Direction direction, NameRelationshipType type) {
216 216

  
217
		AuditEvent auditEvent = getAuditEventFromContext();
218
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
219
			Query query = null;
220
			if(type == null) {
221
				query = getSession().createQuery("select count(relation) from NameRelationship relation where relation." + direction +" = :name");
222
			} else {
223
				query = getSession().createQuery("select count(relation) from NameRelationship relation where relation." + direction +" = :name and relation.type = :type");
224
				query.setParameter("type", type);
225
			}
226
			query.setParameter("name",name);
227
			return ((Long)query.uniqueResult()).intValue();
228
		} else {
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"));
232

  
233
			if(type != null) {
234
				query.add(AuditEntity.relatedId("type").eq(type.getId()));
235
			}
236

  
237
			return ((Long)query.getSingleResult()).intValue();
238
		}
239
	}
240

  
241

  
242
	@Override
217
        AuditEvent auditEvent = getAuditEventFromContext();
218
        if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
219
            Query query = null;
220
            if(type == null) {
221
                query = getSession().createQuery("select count(relation) from NameRelationship relation where relation." + direction +" = :name");
222
            } else {
223
                query = getSession().createQuery("select count(relation) from NameRelationship relation where relation." + direction +" = :name and relation.type = :type");
224
                query.setParameter("type", type);
225
            }
226
            query.setParameter("name",name);
227
            return ((Long)query.uniqueResult()).intValue();
228
        } else {
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"));
232

  
233
            if(type != null) {
234
                query.add(AuditEntity.relatedId("type").eq(type.getId()));
235
            }
236

  
237
            return ((Long)query.getSingleResult()).intValue();
238
        }
239
    }
240

  
241

  
242
    @Override
243 243
    public int countTypeDesignations(TaxonNameBase name, SpecimenTypeDesignationStatus status) {
244
		checkNotInPriorView("countTypeDesignations(TaxonNameBase name, SpecimenTypeDesignationStatus status)");
245
		Query query = null;
246
		if(status == null) {
247
			query = getSession().createQuery("select count(designation) from TypeDesignationBase designation join designation.typifiedNames name where name = :name");
248
		} else {
249
			query = getSession().createQuery("select count(designation) from TypeDesignationBase designation join designation.typifiedNames name where name = :name and designation.typeStatus = :status");
250
			query.setParameter("status", status);
251
		}
252
		query.setParameter("name",name);
253
		return ((Long)query.uniqueResult()).intValue();
254
	}
255

  
256
	@Override
244
        checkNotInPriorView("countTypeDesignations(TaxonNameBase name, SpecimenTypeDesignationStatus status)");
245
        Query query = null;
246
        if(status == null) {
247
            query = getSession().createQuery("select count(designation) from TypeDesignationBase designation join designation.typifiedNames name where name = :name");
248
        } else {
249
            query = getSession().createQuery("select count(designation) from TypeDesignationBase designation join designation.typifiedNames name where name = :name and designation.typeStatus = :status");
250
            query.setParameter("status", status);
251
        }
252
        query.setParameter("name",name);
253
        return ((Long)query.uniqueResult()).intValue();
254
    }
255

  
256
    @Override
257 257
    public List<HybridRelationship> getHybridNames(NonViralName name, HybridRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {
258
		AuditEvent auditEvent = getAuditEventFromContext();
259
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
260
			Criteria criteria = getSession().createCriteria(HybridRelationship.class);
261
			criteria.add(Restrictions.eq("relatedFrom", name));
262
			if(type != null) {
263
				criteria.add(Restrictions.eq("type", type));
264
			}
265

  
266
			if(pageSize != null) {
267
				criteria.setMaxResults(pageSize);
268
				if(pageNumber != null) {
269
					criteria.setFirstResult(pageNumber * pageSize);
270
				} else {
271
					criteria.setFirstResult(0);
272
				}
273
			}
274

  
275
			addOrder(criteria, orderHints);
276

  
277
			List<HybridRelationship> results = criteria.list();
278
			defaultBeanInitializer.initializeAll(results, propertyPaths);
279
			return results;
280
		} else {
281
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(HybridRelationship.class,auditEvent.getRevisionNumber());
282
			query.add(AuditEntity.relatedId("relatedFrom").eq(name.getId()));
283

  
284
			if(type != null) {
285
				query.add(AuditEntity.relatedId("type").eq(type.getId()));
286
			}
287

  
288
			if(pageSize != null) {
289
				query.setMaxResults(pageSize);
290
				if(pageNumber != null) {
291
					query.setFirstResult(pageNumber * pageSize);
292
				} else {
293
					query.setFirstResult(0);
294
				}
295
			}
296

  
297
			List<HybridRelationship> results =  query.getResultList();
298
			defaultBeanInitializer.initializeAll(results, propertyPaths);
299
			return results;
300
		}
301
	}
302

  
303
	/* (non-Javadoc)
304
	 * @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)
305
	 */
306
	@Override
258
        AuditEvent auditEvent = getAuditEventFromContext();
259
        if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
260
            Criteria criteria = getSession().createCriteria(HybridRelationship.class);
261
            criteria.add(Restrictions.eq("relatedFrom", name));
262
            if(type != null) {
263
                criteria.add(Restrictions.eq("type", type));
264
            }
265

  
266
            if(pageSize != null) {
267
                criteria.setMaxResults(pageSize);
268
                if(pageNumber != null) {
269
                    criteria.setFirstResult(pageNumber * pageSize);
270
                } else {
271
                    criteria.setFirstResult(0);
272
                }
273
            }
274

  
275
            addOrder(criteria, orderHints);
276

  
277
            List<HybridRelationship> results = criteria.list();
278
            defaultBeanInitializer.initializeAll(results, propertyPaths);
279
            return results;
280
        } else {
281
            AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(HybridRelationship.class,auditEvent.getRevisionNumber());
282
            query.add(AuditEntity.relatedId("relatedFrom").eq(name.getId()));
283

  
284
            if(type != null) {
285
                query.add(AuditEntity.relatedId("type").eq(type.getId()));
286
            }
287

  
288
            if(pageSize != null) {
289
                query.setMaxResults(pageSize);
290
                if(pageNumber != null) {
291
                    query.setFirstResult(pageNumber * pageSize);
292
                } else {
293
                    query.setFirstResult(0);
294
                }
295
            }
296

  
297
            List<HybridRelationship> results =  query.getResultList();
298
            defaultBeanInitializer.initializeAll(results, propertyPaths);
299
            return results;
300
        }
301
    }
302

  
303
    /* (non-Javadoc)
304
     * @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)
305
     */
306
    @Override
307 307
    public List<NameRelationship> getNameRelationships(TaxonNameBase name, NameRelationship.Direction direction,
308
			NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,
309
			List<String> propertyPaths) {
310

  
311
		AuditEvent auditEvent = getAuditEventFromContext();
312
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
313
			Criteria criteria = getSession().createCriteria(NameRelationship.class);
314
			if (name != null || direction != null){
315
				criteria.add(Restrictions.eq(direction.toString(), name));
316
			}
317
			if(type != null) {
318
				criteria.add(Restrictions.eq("type", type));
319
			}
320

  
321
			if(pageSize != null) {
322
				criteria.setMaxResults(pageSize);
323
				if(pageNumber != null) {
324
					criteria.setFirstResult(pageNumber * pageSize);
325
				} else {
326
					criteria.setFirstResult(0);
327
				}
328
			}
329
			addOrder(criteria, orderHints);
330

  
331
			List<NameRelationship> results = criteria.list();
332
			defaultBeanInitializer.initializeAll(results, propertyPaths);
333
			return results;
334
		} else {
335
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(NameRelationship.class,auditEvent.getRevisionNumber());
336
			query.add(AuditEntity.relatedId(direction.toString()).eq(name.getId()));
337

  
338
			if(type != null) {
339
				query.add(AuditEntity.relatedId("type").eq(type.getId()));
340
			}
341

  
342
			if(pageSize != null) {
343
				query.setMaxResults(pageSize);
344
				if(pageNumber != null) {
345
					query.setFirstResult(pageNumber * pageSize);
346
				} else {
347
					query.setFirstResult(0);
348
				}
349
			}
350

  
351
			List<NameRelationship> results = query.getResultList();
352
			defaultBeanInitializer.initializeAll(results, propertyPaths);
353
			return results;
354
		}
355
	}
356

  
357
	@Override
308
            NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,
309
            List<String> propertyPaths) {
310

  
311
        AuditEvent auditEvent = getAuditEventFromContext();
312
        if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
313
            Criteria criteria = getSession().createCriteria(NameRelationship.class);
314
            if (name != null || direction != null){
315
                criteria.add(Restrictions.eq(direction.toString(), name));
316
            }
317
            if(type != null) {
318
                criteria.add(Restrictions.eq("type", type));
319
            }
320

  
321
            if(pageSize != null) {
322
                criteria.setMaxResults(pageSize);
323
                if(pageNumber != null) {
324
                    criteria.setFirstResult(pageNumber * pageSize);
325
                } else {
326
                    criteria.setFirstResult(0);
327
                }
328
            }
329
            addOrder(criteria, orderHints);
330

  
331
            List<NameRelationship> results = criteria.list();
332
            defaultBeanInitializer.initializeAll(results, propertyPaths);
333
            return results;
334
        } else {
335
            AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(NameRelationship.class,auditEvent.getRevisionNumber());
336
            query.add(AuditEntity.relatedId(direction.toString()).eq(name.getId()));
337

  
338
            if(type != null) {
339
                query.add(AuditEntity.relatedId("type").eq(type.getId()));
340
            }
341

  
342
            if(pageSize != null) {
343
                query.setMaxResults(pageSize);
344
                if(pageNumber != null) {
345
                    query.setFirstResult(pageNumber * pageSize);
346
                } else {
347
                    query.setFirstResult(0);
348
                }
349
            }
350

  
351
            List<NameRelationship> results = query.getResultList();
352
            defaultBeanInitializer.initializeAll(results, propertyPaths);
353
            return results;
354
        }
355
    }
356

  
357
    @Override
358 358
    public List<TypeDesignationBase> getTypeDesignations(TaxonNameBase name, TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber,	List<String> propertyPaths){
359
		return getTypeDesignations(name, null, status, pageSize, pageNumber, propertyPaths);
360
	}
359
        return getTypeDesignations(name, null, status, pageSize, pageNumber, propertyPaths);
360
    }
361 361

  
362
	@Override
362
    @Override
363 363
    public <T extends TypeDesignationBase> List<T> getTypeDesignations(TaxonNameBase name,
364
				Class<T> type,
365
				TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber,
366
				List<String> propertyPaths){
367
		checkNotInPriorView("getTypeDesignations(TaxonNameBase name,TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber,	List<String> propertyPaths)");
368
		Query query = null;
369
		String queryString = "select designation from TypeDesignationBase designation join designation.typifiedNames name where name = :name";
370

  
371
		if(status != null) {
372
			queryString +=  " and designation.typeStatus = :status";
373
		}
374
		if(type != null){
375
			queryString +=  " and designation.class = :type";
376
		}
377

  
378
		query = getSession().createQuery(queryString);
379

  
380
		if(status != null) {
381
			query.setParameter("status", status);
382
		}
383
		if(type != null){
384
			query.setParameter("type", type.getSimpleName());
385
		}
386

  
387
		query.setParameter("name",name);
388

  
389
		if(pageSize != null) {
390
			query.setMaxResults(pageSize);
391
			if(pageNumber != null) {
392
				query.setFirstResult(pageNumber * pageSize);
393
			} else {
394
				query.setFirstResult(0);
395
			}
396
		}
397
		return defaultBeanInitializer.initializeAll((List<T>)query.list(), propertyPaths);
398
	}
399

  
400

  
401
	public List<TaxonNameBase<?,?>> searchNames(String queryString, MatchMode matchMode, Integer pageSize, Integer pageNumber) {
402
		checkNotInPriorView("TaxonNameDaoHibernateImpl.searchNames(String queryString, Integer pageSize, Integer pageNumber)");
403
		Criteria criteria = getSession().createCriteria(TaxonNameBase.class);
404

  
405
		if (queryString != null) {
406
			criteria.add(Restrictions.ilike("nameCache", queryString));
407
		}
408
		if(pageSize != null) {
409
	    	criteria.setMaxResults(pageSize);
410
		    if(pageNumber != null) {
411
		    	criteria.setFirstResult(pageNumber * pageSize);
412
		    } else {
413
		    	criteria.setFirstResult(0);
414
		    }
415
		}
416
		List<TaxonNameBase<?,?>> results = criteria.list();
417
		return results;
418
	}
419

  
420

  
421
	@Override
364
                Class<T> type,
365
                TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber,
366
                List<String> propertyPaths){
367
        checkNotInPriorView("getTypeDesignations(TaxonNameBase name,TypeDesignationStatusBase status, Integer pageSize, Integer pageNumber,	List<String> propertyPaths)");
368
        Query query = null;
369
        String queryString = "select designation from TypeDesignationBase designation join designation.typifiedNames name where name = :name";
370

  
371
        if(status != null) {
372
            queryString +=  " and designation.typeStatus = :status";
373
        }
374
        if(type != null){
375
            queryString +=  " and designation.class = :type";
376
        }
377

  
378
        query = getSession().createQuery(queryString);
379

  
380
        if(status != null) {
381
            query.setParameter("status", status);
382
        }
383
        if(type != null){
384
            query.setParameter("type", type.getSimpleName());
385
        }
386

  
387
        query.setParameter("name",name);
388

  
389
        if(pageSize != null) {
390
            query.setMaxResults(pageSize);
391
            if(pageNumber != null) {
392
                query.setFirstResult(pageNumber * pageSize);
393
            } else {
394
                query.setFirstResult(0);
395
            }
396
        }
397
        return defaultBeanInitializer.initializeAll((List<T>)query.list(), propertyPaths);
398
    }
399

  
400

  
401
    public List<TaxonNameBase<?,?>> searchNames(String queryString, MatchMode matchMode, Integer pageSize, Integer pageNumber) {
402
        checkNotInPriorView("TaxonNameDaoHibernateImpl.searchNames(String queryString, Integer pageSize, Integer pageNumber)");
403
        Criteria criteria = getSession().createCriteria(TaxonNameBase.class);
404

  
405
        if (queryString != null) {
406
            criteria.add(Restrictions.ilike("nameCache", queryString));
407
        }
408
        if(pageSize != null) {
409
            criteria.setMaxResults(pageSize);
410
            if(pageNumber != null) {
411
                criteria.setFirstResult(pageNumber * pageSize);
412
            } else {
413
                criteria.setFirstResult(0);
414
            }
415
        }
416
        List<TaxonNameBase<?,?>> results = criteria.list();
417
        return results;
418
    }
419

  
420

  
421
    @Override
422 422
    public List<TaxonNameBase<?,?>> searchNames(String queryString, Integer pageSize, Integer pageNumber) {
423
		return searchNames(queryString, MatchMode.BEGINNING, pageSize, pageNumber);
424
	}
423
        return searchNames(queryString, MatchMode.BEGINNING, pageSize, pageNumber);
424
    }
425 425

  
426 426

  
427
	@Override
427
    @Override
428 428
    public List<TaxonNameBase> searchNames(String genusOrUninomial,String infraGenericEpithet, String specificEpithet,	String infraSpecificEpithet, Rank rank, Integer pageSize,Integer pageNumber, List<OrderHint> orderHints,
429
			List<String> propertyPaths) {
430
		AuditEvent auditEvent = getAuditEventFromContext();
431
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
432
			Criteria criteria = getSession().createCriteria(TaxonNameBase.class);
433

  
434
			/**
435
			 * Given HHH-2951 - "Restrictions.eq when passed null, should create a NullRestriction"
436
			 * We need to convert nulls to NullRestrictions for now
437
			 */
438
			if(genusOrUninomial != null) {
439
				criteria.add(Restrictions.eq("genusOrUninomial",genusOrUninomial));
440
			} else {
441
				criteria.add(Restrictions.isNull("genusOrUninomial"));
442
			}
443

  
444
			if(infraGenericEpithet != null) {
445
				criteria.add(Restrictions.eq("infraGenericEpithet", infraGenericEpithet));
446
			} else {
447
				criteria.add(Restrictions.isNull("infraGenericEpithet"));
448
			}
449

  
450
			if(specificEpithet != null) {
451
				criteria.add(Restrictions.eq("specificEpithet", specificEpithet));
452
			} else {
453
				criteria.add(Restrictions.isNull("specificEpithet"));
454
			}
455

  
456
			if(infraSpecificEpithet != null) {
457
				criteria.add(Restrictions.eq("infraSpecificEpithet",infraSpecificEpithet));
458
			} else {
459
				criteria.add(Restrictions.isNull("infraSpecificEpithet"));
460
			}
461

  
462
			if(rank != null) {
463
			    criteria.add(Restrictions.eq("rank", rank));
464
			}
465

  
466
			if(pageSize != null) {
467
				criteria.setMaxResults(pageSize);
468
				if(pageNumber != null) {
469
					criteria.setFirstResult(pageNumber * pageSize);
470
				} else {
471
					criteria.setFirstResult(0);
472
				}
473
			}
474

  
475
			addOrder(criteria, orderHints);
476

  
477
			List<TaxonNameBase> results = criteria.list();
478
			defaultBeanInitializer.initializeAll(results, propertyPaths);
479
			return results;
480
		} else {
481
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(TaxonNameBase.class,auditEvent.getRevisionNumber());
482

  
483
			if(genusOrUninomial != null) {
484
				query.add(AuditEntity.property("genusOrUninomial").eq(genusOrUninomial));
485
			} else {
486
				query.add(AuditEntity.property("genusOrUninomial").isNull());
487
			}
488

  
489
			if(infraGenericEpithet != null) {
490
				query.add(AuditEntity.property("infraGenericEpithet").eq(infraGenericEpithet));
491
			} else {
492
				query.add(AuditEntity.property("infraGenericEpithet").isNull());
493
			}
494

  
495
			if(specificEpithet != null) {
496
				query.add(AuditEntity.property("specificEpithet").eq(specificEpithet));
497
			} else {
498
				query.add(AuditEntity.property("specificEpithet").isNull());
499
			}
500

  
501
			if(infraSpecificEpithet != null) {
502
				query.add(AuditEntity.property("infraSpecificEpithet").eq(infraSpecificEpithet));
503
			} else {
504
				query.add(AuditEntity.property("infraSpecificEpithet").isNull());
505
			}
506

  
507
			if(rank != null) {
508
				query.add(AuditEntity.relatedId("rank").eq(rank.getId()));
509
			}
510

  
511
			if(pageSize != null) {
512
				query.setMaxResults(pageSize);
513
				if(pageNumber != null) {
514
					query.setFirstResult(pageNumber * pageSize);
515
				} else {
516
					query.setFirstResult(0);
517
				}
518
			}
519

  
520
			List<TaxonNameBase> results = query.getResultList();
521
			defaultBeanInitializer.initializeAll(results, propertyPaths);
522
			return results;
523
		}
524
	}
525

  
526
	@Override
429
            List<String> propertyPaths) {
430
        AuditEvent auditEvent = getAuditEventFromContext();
431
        if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
432
            Criteria criteria = getSession().createCriteria(TaxonNameBase.class);
433

  
434
            /**
435
             * Given HHH-2951 - "Restrictions.eq when passed null, should create a NullRestriction"
436
             * We need to convert nulls to NullRestrictions for now
437
             */
438
            if(genusOrUninomial != null) {
439
                criteria.add(Restrictions.eq("genusOrUninomial",genusOrUninomial));
440
            } else {
441
                criteria.add(Restrictions.isNull("genusOrUninomial"));
442
            }
443

  
444
            if(infraGenericEpithet != null) {
445
                criteria.add(Restrictions.eq("infraGenericEpithet", infraGenericEpithet));
446
            } else {
447
                criteria.add(Restrictions.isNull("infraGenericEpithet"));
448
            }
449

  
450
            if(specificEpithet != null) {
451
                criteria.add(Restrictions.eq("specificEpithet", specificEpithet));
452
            } else {
453
                criteria.add(Restrictions.isNull("specificEpithet"));
454
            }
455

  
456
            if(infraSpecificEpithet != null) {
457
                criteria.add(Restrictions.eq("infraSpecificEpithet",infraSpecificEpithet));
458
            } else {
459
                criteria.add(Restrictions.isNull("infraSpecificEpithet"));
460
            }
461

  
462
            if(rank != null) {
463
                criteria.add(Restrictions.eq("rank", rank));
464
            }
465

  
466
            if(pageSize != null) {
467
                criteria.setMaxResults(pageSize);
468
                if(pageNumber != null) {
469
                    criteria.setFirstResult(pageNumber * pageSize);
470
                } else {
471
                    criteria.setFirstResult(0);
472
                }
473
            }
474

  
475
            addOrder(criteria, orderHints);
476

  
477
            List<TaxonNameBase> results = criteria.list();
478
            defaultBeanInitializer.initializeAll(results, propertyPaths);
479
            return results;
480
        } else {
481
            AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(TaxonNameBase.class,auditEvent.getRevisionNumber());
482

  
483
            if(genusOrUninomial != null) {
484
                query.add(AuditEntity.property("genusOrUninomial").eq(genusOrUninomial));
485
            } else {
486
                query.add(AuditEntity.property("genusOrUninomial").isNull());
487
            }
488

  
489
            if(infraGenericEpithet != null) {
490
                query.add(AuditEntity.property("infraGenericEpithet").eq(infraGenericEpithet));
491
            } else {
492
                query.add(AuditEntity.property("infraGenericEpithet").isNull());
493
            }
494

  
495
            if(specificEpithet != null) {
496
                query.add(AuditEntity.property("specificEpithet").eq(specificEpithet));
497
            } else {
498
                query.add(AuditEntity.property("specificEpithet").isNull());
499
            }
500

  
501
            if(infraSpecificEpithet != null) {
502
                query.add(AuditEntity.property("infraSpecificEpithet").eq(infraSpecificEpithet));
503
            } else {
504
                query.add(AuditEntity.property("infraSpecificEpithet").isNull());
505
            }
506

  
507
            if(rank != null) {
508
                query.add(AuditEntity.relatedId("rank").eq(rank.getId()));
509
            }
510

  
511
            if(pageSize != null) {
512
                query.setMaxResults(pageSize);
513
                if(pageNumber != null) {
514
                    query.setFirstResult(pageNumber * pageSize);
515
                } else {
516
                    query.setFirstResult(0);
517
                }
518
            }
519

  
520
            List<TaxonNameBase> results = query.getResultList();
521
            defaultBeanInitializer.initializeAll(results, propertyPaths);
522
            return results;
523
        }
524
    }
525

  
526
    @Override
527 527
    public List<? extends TaxonNameBase<?,?>> findByName(String queryString,
528
			MatchMode matchmode, Integer pageSize, Integer pageNumber, List<Criterion> criteria, List<String> propertyPaths) {
529

  
530
		Criteria crit = getSession().createCriteria(type);
531
		if (matchmode == MatchMode.EXACT) {
532
			crit.add(Restrictions.eq("nameCache", matchmode.queryStringFrom(queryString)));
533
		} else {
534
			crit.add(Restrictions.ilike("nameCache", matchmode.queryStringFrom(queryString)));
535
		}
536
		if(criteria != null){
537
			for (Criterion criterion : criteria) {
538
				crit.add(criterion);
539
			}
540
		}
541
		crit.addOrder(Order.asc("nameCache"));
542

  
543
		if(pageSize != null) {
544
			crit.setMaxResults(pageSize);
545
			if(pageNumber != null) {
546
				crit.setFirstResult(pageNumber * pageSize);
547
			}
548
		}
549

  
550
		List<? extends TaxonNameBase<?,?>> results = crit.list();
551
		defaultBeanInitializer.initializeAll(results, propertyPaths);
552

  
553
		return results;
554
	}
555

  
556
	@Override
528
            MatchMode matchmode, Integer pageSize, Integer pageNumber, List<Criterion> criteria, List<String> propertyPaths) {
529

  
530
        Criteria crit = getSession().createCriteria(type);
531
        if (matchmode == MatchMode.EXACT) {
532
            crit.add(Restrictions.eq("nameCache", matchmode.queryStringFrom(queryString)));
533
        } else {
534
            crit.add(Restrictions.ilike("nameCache", matchmode.queryStringFrom(queryString)));
535
        }
536
        if(criteria != null){
537
            for (Criterion criterion : criteria) {
538
                crit.add(criterion);
539
            }
540
        }
541
        crit.addOrder(Order.asc("nameCache"));
542

  
543
        if(pageSize != null) {
544
            crit.setMaxResults(pageSize);
545
            if(pageNumber != null) {
546
                crit.setFirstResult(pageNumber * pageSize);
547
            }
548
        }
549

  
550
        List<? extends TaxonNameBase<?,?>> results = crit.list();
551
        defaultBeanInitializer.initializeAll(results, propertyPaths);
552

  
553
        return results;
554
    }
555

  
556
    @Override
557 557
    public List<? extends TaxonNameBase<?,?>> findByTitle(String queryString,
558
			MatchMode matchmode, Integer pageSize, Integer pageNumber, List<Criterion> criteria, List<String> propertyPaths) {
559

  
560
		Criteria crit = getSession().createCriteria(type);
561
		if (matchmode == MatchMode.EXACT) {
562
			crit.add(Restrictions.eq("titleCache", matchmode.queryStringFrom(queryString)));
563
		} else {
564
			crit.add(Restrictions.ilike("titleCache", matchmode.queryStringFrom(queryString)));
565
		}
566
		if(criteria != null){
567
			for (Criterion criterion : criteria) {
568
				crit.add(criterion);
569
			}
570
		}
571
		crit.addOrder(Order.asc("titleCache"));
572

  
573
		if(pageSize != null) {
574
			crit.setMaxResults(pageSize);
575
			if(pageNumber != null) {
576
				crit.setFirstResult(pageNumber * pageSize);
577
			}
578
		}
579

  
580
		List<? extends TaxonNameBase<?,?>> results = crit.list();
581
		defaultBeanInitializer.initializeAll(results, propertyPaths);
582

  
583
		return results;
584
	}
585

  
586

  
587
	@Override
558
            MatchMode matchmode, Integer pageSize, Integer pageNumber, List<Criterion> criteria, List<String> propertyPaths) {
559

  
560
        Criteria crit = getSession().createCriteria(type);
561
        if (matchmode == MatchMode.EXACT) {
562
            crit.add(Restrictions.eq("titleCache", matchmode.queryStringFrom(queryString)));
563
        } else {
564
            crit.add(Restrictions.ilike("titleCache", matchmode.queryStringFrom(queryString)));
565
        }
566
        if(criteria != null){
567
            for (Criterion criterion : criteria) {
568
                crit.add(criterion);
569
            }
570
        }
571
        crit.addOrder(Order.asc("titleCache"));
572

  
573
        if(pageSize != null) {
574
            crit.setMaxResults(pageSize);
575
            if(pageNumber != null) {
576
                crit.setFirstResult(pageNumber * pageSize);
577
            }
578
        }
579

  
580
        List<? extends TaxonNameBase<?,?>> results = crit.list();
581
        defaultBeanInitializer.initializeAll(results, propertyPaths);
582

  
583
        return results;
584
    }
585

  
586

  
587
    @Override
588 588
    public TaxonNameBase<?,?> findByUuid(UUID uuid, List<Criterion> criteria, List<String> propertyPaths) {
589 589

  
590
		Criteria crit = getSession().createCriteria(type);
591

  
592
		if (uuid != null) {
593
			crit.add(Restrictions.eq("uuid", uuid));
594
		} else {
595
			logger.warn("UUID is NULL");
596
			return null;
597
		}
598
		if(criteria != null){
599
			for (Criterion criterion : criteria) {
600
				crit.add(criterion);
601
			}
602
		}
603
		crit.addOrder(Order.asc("uuid"));
604

  
605
		List<? extends TaxonNameBase<?,?>> results = crit.list();
606
		if (results.size() == 1) {
607
			defaultBeanInitializer.initializeAll(results, propertyPaths);
608
			TaxonNameBase<?, ?> taxonName = results.iterator().next();
609
			return taxonName;
610
		} else if (results.size() > 1) {
611
			logger.error("Multiple results for UUID: " + uuid);
612
		} else if (results.size() == 0) {
613
			logger.info("No results for UUID: " + uuid);
614
		}
615

  
616
		return null;
617
	}
618

  
619
	@Override
590
        Criteria crit = getSession().createCriteria(type);
591

  
592
        if (uuid != null) {
593
            crit.add(Restrictions.eq("uuid", uuid));
594
        } else {
595
            logger.warn("UUID is NULL");
596
            return null;
597
        }
598
        if(criteria != null){
599
            for (Criterion criterion : criteria) {
600
                crit.add(criterion);
601
            }
602
        }
603
        crit.addOrder(Order.asc("uuid"));
604

  
605
        List<? extends TaxonNameBase<?,?>> results = crit.list();
606
        if (results.size() == 1) {
607
            defaultBeanInitializer.initializeAll(results, propertyPaths);
608
            TaxonNameBase<?, ?> taxonName = results.iterator().next();
609
            return taxonName;
610
        } else if (results.size() > 1) {
611
            logger.error("Multiple results for UUID: " + uuid);
612
        } else if (results.size() == 0) {
613
            logger.info("No results for UUID: " + uuid);
614
        }
615

  
616
        return null;
617
    }
618

  
619
    @Override
620 620
    public List<RelationshipBase> getAllRelationships(Integer limit, Integer start) {
621
		AuditEvent auditEvent = getAuditEventFromContext();
622
		if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
623
        	// for some reason the HQL .class discriminator didn't work here so I created this preliminary
624
        	// implementation for now. Should be cleaned in future.
621
        AuditEvent auditEvent = getAuditEventFromContext();
622
        if(auditEvent.equals(AuditEvent.CURRENT_VIEW)) {
623
            // for some reason the HQL .class discriminator didn't work here so I created this preliminary
624
            // implementation for now. Should be cleaned in future.
625 625

  
626
        	List<RelationshipBase> result = new ArrayList<RelationshipBase>();
626
            List<RelationshipBase> result = new ArrayList<RelationshipBase>();
627 627

  
628
        	int nameRelSize = countAllRelationships(NameRelationship.class);
629
        	if (nameRelSize > start){
628
            int nameRelSize = countAllRelationships(NameRelationship.class);
629
            if (nameRelSize > start){
630 630

  
631
        		String hql = " FROM %s as rb ORDER BY rb.id ";
632
        		hql = String.format(hql, NameRelationship.class.getSimpleName());
633
        		Query query = getSession().createQuery(hql);
631
                String hql = " FROM %s as rb ORDER BY rb.id ";
632
                hql = String.format(hql, NameRelationship.class.getSimpleName());
633
                Query query = getSession().createQuery(hql);
634 634
                query.setFirstResult(start);
635 635
                if (limit != null){
636 636
                    query.setMaxResults(limit);
637 637
                }
638 638
                result = query.list();
639
        	}
640
        	limit = limit - result.size();
641
        	if (limit > 0){
642
        		String hql = " FROM HybridRelationship as rb ORDER BY rb.id ";
643
        		hql = String.format(hql, HybridRelationship.class.getSimpleName());
644
        		Query query = getSession().createQuery(hql);
645
        		start = (nameRelSize > start) ? 0 : (start - nameRelSize);
639
            }
640
            limit = limit - result.size();
641
            if (limit > 0){
642
                String hql = " FROM HybridRelationship as rb ORDER BY rb.id ";
643
                hql = String.format(hql, HybridRelationship.class.getSimpleName());
644
                Query query = getSession().createQuery(hql);
645
                start = (nameRelSize > start) ? 0 : (start - nameRelSize);
646 646
                query.setFirstResult(start);
647 647
                if (limit != null){
648 648
                    query.setMaxResults(limit);
649 649
                }
650 650
                result.addAll( query.list());
651
        	}
651
            }
652 652
            return result;
653
		} else {
654
			AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(RelationshipBase.class,auditEvent.getRevisionNumber());
655
			return query.getResultList();
656
		}
657
	}
653
        } else {
654
            AuditQuery query = getAuditReader().createQuery().forEntitiesAtRevision(RelationshipBase.class,auditEvent.getRevisionNumber());
655
            return query.getResultList();
656
        }
657
    }
658 658

  
659 659

  
660 660
    /**
......
663 663
     * @return
664 664
     */
665 665
    public int countAllRelationships(Class<? extends RelationshipBase> clazz) {
666
    	if (clazz != null && ! NameRelationship.class.isAssignableFrom(clazz) && ! HybridRelationship.class.isAssignableFrom(clazz) ){
667
    		throw new RuntimeException("Class must be assignable by a taxon or snonym relation");
668
    	}
669
    	int size = 0;
666
        if (clazz != null && ! NameRelationship.class.isAssignableFrom(clazz) && ! HybridRelationship.class.isAssignableFrom(clazz) ){
667
            throw new RuntimeException("Class must be assignable by a taxon or snonym relation");
668
        }
669
        int size = 0;
670 670

  
671 671
        if (clazz == null || NameRelationship.class.isAssignableFrom(clazz)){
672
        	String hql = " SELECT count(rel) FROM NameRelationship rel";
673
        	size += (Long)getSession().createQuery(hql).list().get(0);
672
            String hql = " SELECT count(rel) FROM NameRelationship rel";
673
            size += (Long)getSession().createQuery(hql).list().get(0);
674 674
        }
675 675
        if (clazz == null || HybridRelationship.class.isAssignableFrom(clazz)){
676
        	String hql = " SELECT count(rel) FROM HybridRelationship rel";
677
        	size += (Long)getSession().createQuery(hql).list().get(0);
676
            String hql = " SELECT count(rel) FROM HybridRelationship rel";
677
            size += (Long)getSession().createQuery(hql).list().get(0);
678 678
        }
679 679
        return size;
680 680
    }
681 681

  
682 682

  
683
	@Override
683
    @Override
684 684
    public Integer countByName(String queryString, MatchMode matchmode, List<Criterion> criteria) {
685
		//TODO improve performance
686
		List<? extends TaxonNameBase<?,?>> results = findByName(queryString, matchmode, null, null, criteria, null);
687
		return results.size();
685
        //TODO improve performance
686
        List<? extends TaxonNameBase<?,?>> results = findByName(queryString, matchmode, null, null, criteria, null);
687
        return results.size();
688 688

  
689
	}
689
    }
690 690

  
691
	/* (non-Javadoc)
692
	 * @see eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao#getUuidAndTitleCacheOfNames()
693
	 */
694
	@Override
691
    /* (non-Javadoc)
692
     * @see eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao#getUuidAndTitleCacheOfNames()
693
     */
694
    @Override
695 695
    public List<UuidAndTitleCache> getUuidAndTitleCacheOfNames() {
696
		String queryString = "SELECT uuid, fullTitleCache FROM TaxonNameBase";
696
        String queryString = "SELECT uuid, fullTitleCache FROM TaxonNameBase";
697 697

  
698
		List<Object[]> result = getSession().createSQLQuery(queryString).list();
698
        List<Object[]> result = getSession().createSQLQuery(queryString).list();
699 699

  
700
		if(result.size() == 0){
701
			return null;
702
		}else{
703
			List<UuidAndTitleCache> list = new ArrayList<UuidAndTitleCache>(result.size());
700
        if(result.size() == 0){
701
            return null;
702
        }else{
703
            List<UuidAndTitleCache> list = new ArrayList<UuidAndTitleCache>(result.size());
704 704

  
705
			for (Object object : result){
705
            for (Object object : result){
706 706

  
707
				Object[] objectArray = (Object[]) object;
707
                Object[] objectArray = (Object[]) object;
708 708

  
709
				UUID uuid = UUID.fromString((String) objectArray[0]);
710
				String titleCache = (String) objectArray[1];
709
                UUID uuid = UUID.fromString((String) objectArray[0]);
710
                String titleCache = (String) objectArray[1];
711 711

  
712
				list.add(new UuidAndTitleCache(type, uuid, titleCache));
713
			}
712
                list.add(new UuidAndTitleCache(type, uuid, titleCache));
713
            }
714 714

  
715
			return list;
716
		}
717
	}
715
            return list;
716
        }
717
    }
718 718

  
719
	@Override
719
    @Override
720 720
    public Integer countByName(Class<? extends TaxonNameBase> clazz,String queryString, MatchMode matchmode, List<Criterion> criteria) {
721 721
        return super.countByParam(clazz, "nameCache", queryString, matchmode, criteria);
722
	}
722
    }
723 723

  
724
	@Override
724
    @Override
725 725
    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) {
726
		return super.findByParam(clazz, "nameCache", queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
727
	}
726
        return super.findByParam(clazz, "nameCache", queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);
727
    }
728 728

  
729
	@Override
729
    @Override
730 730
    public UUID delete (TaxonNameBase persistentObject){
731
		Set<TaxonBase> taxonBases = persistentObject.getTaxonBases();
732
		super.delete(persistentObject);
733

  
734
		for (TaxonBase taxonBase: taxonBases){
735
			taxonDao.delete(taxonBase);
736
		}
737
		return persistentObject.getUuid();
738
	}
739
	
740
	/* (non-Javadoc)
741
	 * @see eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao#getZoologicalNames(java.lang.Integer, java.lang.Integer)
742
	 */
743
	//TODO candidate for harmonization
744
	public List<ZoologicalName> getZoologicalNames(Integer limit, Integer start){
745
		List <TaxonNameBase> names = new ArrayList<TaxonNameBase>();
746
		List <ZoologicalName> zooNames = new ArrayList<ZoologicalName>();
747
		names = super.list(ZoologicalName.class, limit, start);
748
		for (TaxonNameBase name: names){
749
			zooNames.add((ZoologicalName)name);
750
		}
751
		return zooNames;
752
	}
753

  
754
	@Override
731
        Set<TaxonBase> taxonBases = persistentObject.getTaxonBases();
732
        super.delete(persistentObject);
733

  
734
        for (TaxonBase taxonBase: taxonBases){
735
            taxonDao.delete(taxonBase);
736
        }
737
        return persistentObject.getUuid();
738
    }
739

  
740
    /* (non-Javadoc)
741
     * @see eu.etaxonomy.cdm.persistence.dao.name.ITaxonNameDao#getZoologicalNames(java.lang.Integer, java.lang.Integer)
742
     */
743
    //TODO candidate for harmonization
744
    @Override
745
    public List<ZoologicalName> getZoologicalNames(Integer limit, Integer start){
746
        List <TaxonNameBase> names = new ArrayList<TaxonNameBase>();
747
        List <ZoologicalName> zooNames = new ArrayList<ZoologicalName>();
748
        names = super.list(ZoologicalName.class, limit, start);
749
        for (TaxonNameBase name: names){
750
            zooNames.add((ZoologicalName)name);
751
        }
752
        return zooNames;
753
    }
754

  
755
    @Override
755 756
    public ZoologicalName findZoologicalNameByUUID(UUID uuid){
756
		Criteria criteria = getSession().createCriteria(type);
757
		if (uuid != null) {
758
			criteria.add(Restrictions.eq("uuid", uuid));
759
		} else {
760
			logger.warn("UUID is NULL");
761
			return null;
762
		}
763

  
764
		List<? extends TaxonNameBase<?,?>> results = criteria.list();
765
		if (results.size() == 1) {
766
			defaultBeanInitializer.initializeAll(results, null);
767
			TaxonNameBase<?, ?> taxonName = results.iterator().next();
768
			if (taxonName.isInstanceOf(ZoologicalName.class)) {
769
				ZoologicalName zoologicalName = CdmBase.deproxy(taxonName, ZoologicalName.class);
770
				return zoologicalName;
771
			} else {
772
				logger.warn("This UUID (" + uuid + ") does not belong to a ZoologicalName. It belongs to: " + taxonName.getUuid() + " (" + taxonName.getTitleCache() + ")");
773
			}
774
		} else if (results.size() > 1) {
775
			logger.error("Multiple results for UUID: " + uuid);
776
		} else if (results.size() == 0) {
777
			logger.info("No results for UUID: " + uuid);
778
		}
779
		return null;
780
	}
757
        Criteria criteria = getSession().createCriteria(type);
758
        if (uuid != null) {
759
            criteria.add(Restrictions.eq("uuid", uuid));
760
        } else {
761
            logger.warn("UUID is NULL");
762
            return null;
763
        }
764

  
765
        List<? extends TaxonNameBase<?,?>> results = criteria.list();
766
        if (results.size() == 1) {
767
            defaultBeanInitializer.initializeAll(results, null);
768
            TaxonNameBase<?, ?> taxonName = results.iterator().next();
769
            if (taxonName.isInstanceOf(ZoologicalName.class)) {
770
                ZoologicalName zoologicalName = CdmBase.deproxy(taxonName, ZoologicalName.class);
771
                return zoologicalName;
772
            } else {
773
                logger.warn("This UUID (" + uuid + ") does not belong to a ZoologicalName. It belongs to: " + taxonName.getUuid() + " (" + taxonName.getTitleCache() + ")");
774
            }
775
        } else if (results.size() > 1) {
776
            logger.error("Multiple results for UUID: " + uuid);
777
        } else if (results.size() == 0) {
778
            logger.info("No results for UUID: " + uuid);
779
        }
780
        return null;
781
    }
781 782

  
782 783
}

Also available in: Unified diff

Add picture from clipboard (Maximum size: 40 MB)