View Javadoc
1   // license-header java merge-point
2   //
3   // Attention: Generated code! Do not modify by hand!
4   // Generated by: hibernate/SpringHibernateDaoBase.vsl in <project>/mda/src/main/cartridge/custom/...
5   //
6   package fr.ifremer.quadrige3.core.dao.referential.taxon;
7   
8   /*-
9    * #%L
10   * Quadrige3 Core :: Client API
11   * %%
12   * Copyright (C) 2017 - 2024 Ifremer
13   * %%
14   * This program is free software: you can redistribute it and/or modify
15   * it under the terms of the GNU Affero General Public License as published by
16   * the Free Software Foundation, either version 3 of the License, or
17   * (at your option) any later version.
18   * 
19   * This program is distributed in the hope that it will be useful,
20   * but WITHOUT ANY WARRANTY; without even the implied warranty of
21   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22   * GNU General Public License for more details.
23   * 
24   * You should have received a copy of the GNU Affero General Public License
25   * along with this program.  If not, see <http://www.gnu.org/licenses/>.
26   * #L%
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.referential.Status;
32  import fr.ifremer.quadrige3.core.dao.technical.hibernate.HibernateDaoSupport;
33  import java.security.Principal;
34  import java.sql.Timestamp;
35  import java.util.Collection;
36  import java.util.Date;
37  import java.util.LinkedHashSet;
38  import java.util.List;
39  import java.util.Set;
40  import javax.annotation.Resource;
41  import org.andromda.spring.PaginationResult;
42  import org.apache.commons.collections.CollectionUtils;
43  import org.apache.commons.collections.Transformer;
44  import org.hibernate.Criteria;
45  import org.hibernate.HibernateException;
46  import org.hibernate.Query;
47  import org.hibernate.ScrollableResults;
48  
49  /**
50   * <p>
51   * Base Spring DAO Class: is able to create, update, remove, load, and find
52   * objects of type <code>Citation</code>.
53   * </p>
54   *
55   * @see Citation
56   */
57  public abstract class CitationDaoBase
58      extends HibernateDaoSupport    
59      implements CitationDao
60  {
61      /**
62       * {@inheritDoc}
63       */
64      @Override
65      public Object get(final int transform, final Integer citId)
66      {
67          if (citId == null)
68          {
69              throw new IllegalArgumentException(
70                  "Citation.get - 'citId' can not be null");
71          }
72          final Citation entity = get(CitationImpl.class, citId);
73          return transformEntity(transform, entity);
74      }
75      /**
76       * {@inheritDoc}
77       */
78      @Override
79      public Citation get(Integer citId)
80      {
81          return (Citation)this.get(TRANSFORM_NONE, citId);
82      }
83  
84      /**
85       * {@inheritDoc}
86       */
87      @Override
88      public Object load(final int transform, final Integer citId)
89      {
90          if (citId == null)
91          {
92              throw new IllegalArgumentException(
93                  "Citation.load - 'citId' can not be null");
94          }
95          final Citation entity = get(CitationImpl.class, citId);
96          return transformEntity(transform, entity);
97      }
98  
99      /**
100      * {@inheritDoc}
101      */
102     @Override
103     public Citation load(Integer citId)
104     {
105         return (Citation)this.load(TRANSFORM_NONE, citId);
106     }
107 
108     /**
109      * {@inheritDoc}
110      */
111     @Override
112     @SuppressWarnings({"unchecked"})
113     public Collection<Citation> loadAll()
114     {
115         return (Collection<Citation>) this.loadAll(CitationDao.TRANSFORM_NONE);
116     }
117 
118     /**
119      * {@inheritDoc}
120      */
121     @Override
122     public Collection<?> loadAll(final int transform)
123     {
124         return this.loadAll(transform, -1, -1);
125     }
126 
127     /**
128      * {@inheritDoc}
129      */
130     @Override
131     public Collection<?> loadAll(final int pageNumber, final int pageSize)
132     {
133         return this.loadAll(CitationDao.TRANSFORM_NONE, pageNumber, pageSize);
134     }
135 
136     /**
137      * {@inheritDoc}
138      */
139     @Override
140     public Collection<?> loadAll(final int transform, final int pageNumber, final int pageSize)
141     {
142         try
143         {
144             final Criteria criteria = this.getSession().createCriteria(CitationImpl.class);
145             if (pageNumber > 0 && pageSize > 0)
146             {
147                 criteria.setFirstResult(this.calculateFirstResult(pageNumber, pageSize));
148                 criteria.setMaxResults(pageSize);
149             }
150             final Collection<?> results = criteria.list();
151             this.transformEntities(transform, results);
152             return results;
153         }
154         catch (HibernateException ex)
155         {
156             throw ex;
157         }
158     }
159 
160     /**
161      * firstResult = (pageNumber - 1) * pageSize
162      * @param pageNumber
163      * @param pageSize
164      * @return firstResult
165      */
166     protected int calculateFirstResult(int pageNumber, int pageSize)
167     {
168         int firstResult = 0;
169         if (pageNumber > 0)
170         {
171             firstResult = (pageNumber - 1) * pageSize;
172         }
173         return firstResult;
174     }
175 
176     /**
177      * {@inheritDoc}
178      */
179     @Override
180     public Citation create(Citation citation)
181     {
182         return (Citation)this.create(CitationDao.TRANSFORM_NONE, citation);
183     }
184 
185     /**
186      * {@inheritDoc}
187      */
188     @Override
189     public Object create(final int transform, final Citation citation)
190     {
191         if (citation == null)
192         {
193             throw new IllegalArgumentException(
194                 "Citation.create - 'citation' can not be null");
195         }
196         this.getSessionFactory().getCurrentSession().save(citation);
197         return this.transformEntity(transform, citation);
198     }
199 
200     /**
201      * {@inheritDoc}
202      */
203     @Override
204     @SuppressWarnings({"unchecked"})
205     public Collection<Citation> create(final Collection<Citation> entities)
206     {
207         return (Collection<Citation>) create(CitationDao.TRANSFORM_NONE, entities);
208     }
209 
210     /**
211      * {@inheritDoc}
212      */
213     @Override
214     public Collection<?> create(final int transform, final Collection<Citation> entities)
215     {
216         if (entities == null)
217         {
218             throw new IllegalArgumentException(
219                 "Citation.create - 'entities' can not be null");
220         }
221                     for (Citation entity : entities)
222                     {
223                         create(transform, entity);
224                     }
225         return entities;
226     }
227 
228     /**
229      * {@inheritDoc}
230      */
231     @Override
232     public Citation create(
233         String citNm,
234         Date citCreationDt,
235         Timestamp updateDt)
236     {
237         return (Citation)this.create(CitationDao.TRANSFORM_NONE, citNm, citCreationDt, updateDt);
238     }
239 
240     /**
241      * {@inheritDoc}
242      */
243     @Override
244     public Object create(
245         final int transform,
246         String citNm,
247         Date citCreationDt,
248         Timestamp updateDt)
249     {
250         Citation entity = new CitationImpl();
251         entity.setCitNm(citNm);
252         entity.setCitCreationDt(citCreationDt);
253         entity.setUpdateDt(updateDt);
254         return this.create(transform, entity);
255     }
256 
257     /**
258      * {@inheritDoc}
259      */
260     @Override
261     public Citation create(
262         Status status)
263     {
264         return (Citation)this.create(CitationDao.TRANSFORM_NONE, status);
265     }
266 
267     /**
268      * {@inheritDoc}
269      */
270     @Override
271     public Object create(
272         final int transform,
273         Status status)
274     {
275         Citation entity = new CitationImpl();
276         entity.setStatus(status);
277         return this.create(transform, entity);
278     }
279 
280     /**
281      * {@inheritDoc}
282      */
283     @Override
284     public void update(Citation citation)
285     {
286         if (citation == null)
287         {
288             throw new IllegalArgumentException(
289                 "Citation.update - 'citation' can not be null");
290         }
291         this.getSessionFactory().getCurrentSession().update(citation);
292     }
293 
294     /**
295      * {@inheritDoc}
296      */
297     @Override
298     public void update(final Collection<Citation> entities)
299     {
300         if (entities == null)
301         {
302             throw new IllegalArgumentException(
303                 "Citation.update - 'entities' can not be null");
304         }
305                     for (Citation entity : entities)
306                     {
307                         update(entity);
308                     }
309     }
310 
311     /**
312      * {@inheritDoc}
313      */
314     @Override
315     public void remove(Citation citation)
316     {
317         if (citation == null)
318         {
319             throw new IllegalArgumentException(
320                 "Citation.remove - 'citation' can not be null");
321         }
322         this.getSessionFactory().getCurrentSession().delete(citation);
323     }
324 
325     /**
326      * {@inheritDoc}
327      */
328     @Override
329     public void remove(Integer citId)
330     {
331         if (citId == null)
332         {
333             throw new IllegalArgumentException(
334                 "Citation.remove - 'citId' can not be null");
335         }
336         Citation entity = this.get(citId);
337         if (entity != null)
338         {
339             this.remove(entity);
340         }
341     }
342 
343     /**
344      * {@inheritDoc}
345      */
346     @Override
347     public void remove(Collection<Citation> entities)
348     {
349         if (entities == null)
350         {
351             throw new IllegalArgumentException(
352                 "Citation.remove - 'entities' can not be null");
353         }
354         deleteAll(entities);
355     }
356     /**
357      * Allows transformation of entities into value objects
358      * (or something else for that matter), when the <code>transform</code>
359      * flag is set to one of the constants defined in <code>CitationDao</code>, please note
360      * that the {@link #TRANSFORM_NONE} constant denotes no transformation, so the entity itself
361      * will be returned.
362      *
363      * If the integer argument value is unknown {@link #TRANSFORM_NONE} is assumed.
364      *
365      * @param transform one of the constants declared in {@link CitationDao}
366      * @param entity an entity that was found
367      * @return the transformed entity (i.e. new value object, etc)
368      * @see CitationDao#transformEntity(int, Citation)
369      */
370     public Object transformEntity(final int transform, final Citation entity)
371     {
372         Object target = null;
373         if (entity != null)
374         {
375             switch (transform)
376             {
377                 case CitationDao.TRANSFORM_NONE : // fall-through
378                 default:
379                     target = entity;
380             }
381         }
382         return target;
383     }
384 
385     /**
386      * {@inheritDoc}
387      */
388     @Override
389     public void transformEntities(final int transform, final Collection<?> entities)
390     {
391         switch (transform)
392         {
393             case CitationDao.TRANSFORM_NONE : // fall-through
394                 default:
395                 // do nothing;
396         }
397     }
398 
399     /**
400      * @see CitationDao#toEntities(Collection)
401      */
402     public void toEntities(final Collection<?> results)
403     {
404         if (results != null)
405         {
406             CollectionUtils.transform(results, this.ENTITYTRANSFORMER);
407         }
408     }
409 
410     /**
411      * This anonymous transformer is designed to transform report query results
412      * (which result in an array of entities) to {@link Citation}
413      * using the Jakarta Commons-Collections Transformation API.
414      */
415     private Transformer ENTITYTRANSFORMER =
416         new Transformer()
417         {
418             public Object transform(Object input)
419             {
420                 Object result = null;
421                 if (input instanceof Object[])
422                 {
423                     result = toEntity((Object[])input);
424                 }
425                 else if (input instanceof Citation)
426                 {
427                     result = input;
428                 }
429                 return result;
430             }
431         };
432 
433     /**
434      * @param row
435      * @return Citation
436      */
437     protected Citation toEntity(Object[] row)
438     {
439         Citation target = null;
440         if (row != null)
441         {
442             final int numberOfObjects = row.length;
443             for (int ctr = 0; ctr < numberOfObjects; ctr++)
444             {
445                 final Object object = row[ctr];
446                 if (object instanceof Citation)
447                 {
448                     target = (Citation)object;
449                     break;
450                 }
451             }
452         }
453         return target;
454     }
455 
456     /**
457      * Gets the current <code>principal</code> if one has been set,
458      * otherwise returns <code>null</code>.
459      *
460      * @return the current principal
461      */
462     protected Principal getPrincipal()
463     {
464         return PrincipalStore.get();
465     }
466 
467     /**
468      * {@inheritDoc}
469      */
470     @Override
471     @SuppressWarnings({ "unchecked" })
472     public PaginationResult search(final int transform, final int pageNumber, final int pageSize, final Search search)
473     {
474         try
475         {
476             search.setPageNumber(pageNumber);
477             search.setPageSize(pageSize);
478             final PropertySearch propertySearch = new PropertySearch(
479                 this.getSession(), CitationImpl.class, search);
480             final List results = propertySearch.executeAsList();
481             this.transformEntities(transform, results);
482             return new PaginationResult(results.toArray(new Object[results.size()]), propertySearch.getTotalCount());
483         }
484         catch (HibernateException ex)
485         {
486             throw ex; /*super.convertHibernateAccessException(ex);*/
487         }
488     }
489 
490     /**
491      * {@inheritDoc}
492      */
493     @Override
494     public PaginationResult search(final int pageNumber, final int pageSize, final Search search)
495     {
496         return this.search(CitationDao.TRANSFORM_NONE, pageNumber, pageSize, search);
497     }
498 
499     /**
500      * {@inheritDoc}
501      */
502     @Override
503     public Set<?> search(final int transform, final Search search)
504     {
505         try
506         {
507             final PropertySearch propertySearch = new PropertySearch(
508                 this.getSession(), CitationImpl.class, search);
509             final Set<?> results = propertySearch.executeAsSet();
510             this.transformEntities(transform, results);
511             return results;
512         }
513         catch (HibernateException ex)
514         {
515             throw ex; /*super.convertHibernateAccessException(ex);*/
516         }
517     }
518 
519     /**
520      * {@inheritDoc}
521      */
522     @Override
523     @SuppressWarnings("unchecked")
524     public Set<Citation> search(final Search search)
525     {
526         return (Set<Citation>) this.search(CitationDao.TRANSFORM_NONE, search);
527     }
528 
529     /**
530      * Executes and returns the given Hibernate queryObject as a {@link PaginationResult} instance.
531      * @param queryObject
532      * @param transform
533      * @param pageNumber
534      * @param pageSize
535      * @return PaginationResult
536      */
537     @SuppressWarnings({ "unchecked" })
538     protected PaginationResult getPaginationResult(
539         final Query queryObject,
540         final int transform, int pageNumber, int pageSize)
541     {
542         try
543         {
544             final ScrollableResults scrollableResults = queryObject.scroll();
545             scrollableResults.last();
546             int totalCount = scrollableResults.getRowNumber();
547             totalCount = totalCount >= 0 ? totalCount + 1 : 0;
548             if (pageNumber > 0 && pageSize > 0)
549             {
550                 queryObject.setFirstResult(this.calculateFirstResult(pageNumber, pageSize));
551                 queryObject.setMaxResults(pageSize);
552             }
553             // Unchecked transformation because Set object is reused, cannot be strongly typed.
554             Set results = new LinkedHashSet(queryObject.list());
555             transformEntities(transform, results);
556             return new PaginationResult(results.toArray(new Object[results.size()]), totalCount);
557         }
558         catch (HibernateException ex)
559         {
560             throw ex; /*super.convertHibernateAccessException(ex);*/
561         }
562     }
563 
564     // spring-hibernate-dao-base merge-point
565 }