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