1
2
3
4
5
6 package fr.ifremer.quadrige3.core.dao.data.survey;
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 import fr.ifremer.quadrige3.core.dao.PrincipalStore;
29 import fr.ifremer.quadrige3.core.dao.PropertySearch;
30 import fr.ifremer.quadrige3.core.dao.Search;
31 import fr.ifremer.quadrige3.core.dao.technical.hibernate.HibernateDaoSupport;
32 import java.security.Principal;
33 import java.sql.Timestamp;
34 import java.util.Collection;
35 import java.util.LinkedHashSet;
36 import java.util.List;
37 import java.util.Set;
38 import javax.annotation.Resource;
39 import org.andromda.spring.PaginationResult;
40 import org.apache.commons.collections.CollectionUtils;
41 import org.apache.commons.collections.Transformer;
42 import org.hibernate.Criteria;
43 import org.hibernate.HibernateException;
44 import org.hibernate.Query;
45 import org.hibernate.ScrollableResults;
46
47
48
49
50
51
52
53
54
55 public abstract class ShipDaoBase
56 extends HibernateDaoSupport
57 implements ShipDao
58 {
59
60
61
62 @Override
63 public Object get(final int transform, final Integer shipId)
64 {
65 if (shipId == null)
66 {
67 throw new IllegalArgumentException(
68 "Ship.get - 'shipId' can not be null");
69 }
70 final Ship entity = get(ShipImpl.class, shipId);
71 return transformEntity(transform, entity);
72 }
73
74
75
76 @Override
77 public Ship get(Integer shipId)
78 {
79 return (Ship)this.get(TRANSFORM_NONE, shipId);
80 }
81
82
83
84
85 @Override
86 public Object load(final int transform, final Integer shipId)
87 {
88 if (shipId == null)
89 {
90 throw new IllegalArgumentException(
91 "Ship.load - 'shipId' can not be null");
92 }
93 final Ship entity = get(ShipImpl.class, shipId);
94 return transformEntity(transform, entity);
95 }
96
97
98
99
100 @Override
101 public Ship load(Integer shipId)
102 {
103 return (Ship)this.load(TRANSFORM_NONE, shipId);
104 }
105
106
107
108
109 @Override
110 @SuppressWarnings({"unchecked"})
111 public Collection<Ship> loadAll()
112 {
113 return (Collection<Ship>) this.loadAll(ShipDao.TRANSFORM_NONE);
114 }
115
116
117
118
119 @Override
120 public Collection<?> loadAll(final int transform)
121 {
122 return this.loadAll(transform, -1, -1);
123 }
124
125
126
127
128 @Override
129 public Collection<?> loadAll(final int pageNumber, final int pageSize)
130 {
131 return this.loadAll(ShipDao.TRANSFORM_NONE, pageNumber, pageSize);
132 }
133
134
135
136
137 @Override
138 public Collection<?> loadAll(final int transform, final int pageNumber, final int pageSize)
139 {
140 try
141 {
142 final Criteria criteria = this.getSession().createCriteria(ShipImpl.class);
143 if (pageNumber > 0 && pageSize > 0)
144 {
145 criteria.setFirstResult(this.calculateFirstResult(pageNumber, pageSize));
146 criteria.setMaxResults(pageSize);
147 }
148 final Collection<?> results = criteria.list();
149 this.transformEntities(transform, results);
150 return results;
151 }
152 catch (HibernateException ex)
153 {
154 throw ex;
155 }
156 }
157
158
159
160
161
162
163
164 protected int calculateFirstResult(int pageNumber, int pageSize)
165 {
166 int firstResult = 0;
167 if (pageNumber > 0)
168 {
169 firstResult = (pageNumber - 1) * pageSize;
170 }
171 return firstResult;
172 }
173
174
175
176
177 @Override
178 public Ship create(Ship ship)
179 {
180 return (Ship)this.create(ShipDao.TRANSFORM_NONE, ship);
181 }
182
183
184
185
186 @Override
187 public Object create(final int transform, final Ship ship)
188 {
189 if (ship == null)
190 {
191 throw new IllegalArgumentException(
192 "Ship.create - 'ship' can not be null");
193 }
194 this.getSessionFactory().getCurrentSession().save(ship);
195 return this.transformEntity(transform, ship);
196 }
197
198
199
200
201 @Override
202 @SuppressWarnings({"unchecked"})
203 public Collection<Ship> create(final Collection<Ship> entities)
204 {
205 return (Collection<Ship>) create(ShipDao.TRANSFORM_NONE, entities);
206 }
207
208
209
210
211 @Override
212 public Collection<?> create(final int transform, final Collection<Ship> entities)
213 {
214 if (entities == null)
215 {
216 throw new IllegalArgumentException(
217 "Ship.create - 'entities' can not be null");
218 }
219 for (Ship entity : entities)
220 {
221 create(transform, entity);
222 }
223 return entities;
224 }
225
226
227
228
229 @Override
230 public Ship create(
231 String shipLb,
232 String shipNm,
233 Timestamp updateDt,
234 Integer remoteId)
235 {
236 return (Ship)this.create(ShipDao.TRANSFORM_NONE, shipLb, shipNm, updateDt, remoteId);
237 }
238
239
240
241
242 @Override
243 public Object create(
244 final int transform,
245 String shipLb,
246 String shipNm,
247 Timestamp updateDt,
248 Integer remoteId)
249 {
250 Ship entity = new ShipImpl();
251 entity.setShipLb(shipLb);
252 entity.setShipNm(shipNm);
253 entity.setUpdateDt(updateDt);
254 entity.setRemoteId(remoteId);
255 return this.create(transform, entity);
256 }
257
258
259
260
261 @Override
262 public void update(Ship ship)
263 {
264 if (ship == null)
265 {
266 throw new IllegalArgumentException(
267 "Ship.update - 'ship' can not be null");
268 }
269 this.getSessionFactory().getCurrentSession().update(ship);
270 }
271
272
273
274
275 @Override
276 public void update(final Collection<Ship> entities)
277 {
278 if (entities == null)
279 {
280 throw new IllegalArgumentException(
281 "Ship.update - 'entities' can not be null");
282 }
283 for (Ship entity : entities)
284 {
285 update(entity);
286 }
287 }
288
289
290
291
292 @Override
293 public void remove(Ship ship)
294 {
295 if (ship == null)
296 {
297 throw new IllegalArgumentException(
298 "Ship.remove - 'ship' can not be null");
299 }
300 this.getSessionFactory().getCurrentSession().delete(ship);
301 }
302
303
304
305
306 @Override
307 public void remove(Integer shipId)
308 {
309 if (shipId == null)
310 {
311 throw new IllegalArgumentException(
312 "Ship.remove - 'shipId' can not be null");
313 }
314 Ship entity = this.get(shipId);
315 if (entity != null)
316 {
317 this.remove(entity);
318 }
319 }
320
321
322
323
324 @Override
325 public void remove(Collection<Ship> entities)
326 {
327 if (entities == null)
328 {
329 throw new IllegalArgumentException(
330 "Ship.remove - 'entities' can not be null");
331 }
332 deleteAll(entities);
333 }
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348 public Object transformEntity(final int transform, final Ship entity)
349 {
350 Object target = null;
351 if (entity != null)
352 {
353 switch (transform)
354 {
355 case ShipDao.TRANSFORM_NONE :
356 default:
357 target = entity;
358 }
359 }
360 return target;
361 }
362
363
364
365
366 @Override
367 public void transformEntities(final int transform, final Collection<?> entities)
368 {
369 switch (transform)
370 {
371 case ShipDao.TRANSFORM_NONE :
372 default:
373
374 }
375 }
376
377
378
379
380 public void toEntities(final Collection<?> results)
381 {
382 if (results != null)
383 {
384 CollectionUtils.transform(results, this.ENTITYTRANSFORMER);
385 }
386 }
387
388
389
390
391
392
393 private Transformer ENTITYTRANSFORMER =
394 new Transformer()
395 {
396 public Object transform(Object input)
397 {
398 Object result = null;
399 if (input instanceof Object[])
400 {
401 result = toEntity((Object[])input);
402 }
403 else if (input instanceof Ship)
404 {
405 result = input;
406 }
407 return result;
408 }
409 };
410
411
412
413
414
415 protected Ship toEntity(Object[] row)
416 {
417 Ship target = null;
418 if (row != null)
419 {
420 final int numberOfObjects = row.length;
421 for (int ctr = 0; ctr < numberOfObjects; ctr++)
422 {
423 final Object object = row[ctr];
424 if (object instanceof Ship)
425 {
426 target = (Ship)object;
427 break;
428 }
429 }
430 }
431 return target;
432 }
433
434
435
436
437
438
439
440 protected Principal getPrincipal()
441 {
442 return PrincipalStore.get();
443 }
444
445
446
447
448 @Override
449 @SuppressWarnings({ "unchecked" })
450 public PaginationResult search(final int transform, final int pageNumber, final int pageSize, final Search search)
451 {
452 try
453 {
454 search.setPageNumber(pageNumber);
455 search.setPageSize(pageSize);
456 final PropertySearch propertySearch = new PropertySearch(
457 this.getSession(), ShipImpl.class, search);
458 final List results = propertySearch.executeAsList();
459 this.transformEntities(transform, results);
460 return new PaginationResult(results.toArray(new Object[results.size()]), propertySearch.getTotalCount());
461 }
462 catch (HibernateException ex)
463 {
464 throw ex;
465 }
466 }
467
468
469
470
471 @Override
472 public PaginationResult search(final int pageNumber, final int pageSize, final Search search)
473 {
474 return this.search(ShipDao.TRANSFORM_NONE, pageNumber, pageSize, search);
475 }
476
477
478
479
480 @Override
481 public Set<?> search(final int transform, final Search search)
482 {
483 try
484 {
485 final PropertySearch propertySearch = new PropertySearch(
486 this.getSession(), ShipImpl.class, search);
487 final Set<?> results = propertySearch.executeAsSet();
488 this.transformEntities(transform, results);
489 return results;
490 }
491 catch (HibernateException ex)
492 {
493 throw ex;
494 }
495 }
496
497
498
499
500 @Override
501 @SuppressWarnings("unchecked")
502 public Set<Ship> search(final Search search)
503 {
504 return (Set<Ship>) this.search(ShipDao.TRANSFORM_NONE, search);
505 }
506
507
508
509
510
511
512
513
514
515 @SuppressWarnings({ "unchecked" })
516 protected PaginationResult getPaginationResult(
517 final Query queryObject,
518 final int transform, int pageNumber, int pageSize)
519 {
520 try
521 {
522 final ScrollableResults scrollableResults = queryObject.scroll();
523 scrollableResults.last();
524 int totalCount = scrollableResults.getRowNumber();
525 totalCount = totalCount >= 0 ? totalCount + 1 : 0;
526 if (pageNumber > 0 && pageSize > 0)
527 {
528 queryObject.setFirstResult(this.calculateFirstResult(pageNumber, pageSize));
529 queryObject.setMaxResults(pageSize);
530 }
531
532 Set results = new LinkedHashSet(queryObject.list());
533 transformEntities(transform, results);
534 return new PaginationResult(results.toArray(new Object[results.size()]), totalCount);
535 }
536 catch (HibernateException ex)
537 {
538 throw ex;
539 }
540 }
541
542
543 }