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.quadrige2.core.dao.system.context;
7   
8   /*-
9    * #%L
10   * Quadrige2 Core :: Server API
11   * %%
12   * Copyright (C) 2017 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  
29  import fr.ifremer.quadrige2.core.dao.PrincipalStore;
30  import fr.ifremer.quadrige2.core.dao.PropertySearch;
31  import fr.ifremer.quadrige2.core.dao.Search;
32  import fr.ifremer.quadrige2.core.dao.referential.Status;
33  import fr.ifremer.quadrige2.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>Context</code>.
54   * </p>
55   *
56   * @see Context
57   */
58  public abstract class ContextDaoBase
59      extends HibernateDaoSupport    
60      implements ContextDao
61  {
62      /**
63       * {@inheritDoc}
64       */
65      @Override
66      public Object get(final int transform, final Integer contextId)
67      {
68          if (contextId == null)
69          {
70              throw new IllegalArgumentException(
71                  "Context.get - 'contextId' can not be null");
72          }
73          final Context entity = get(ContextImpl.class, contextId);
74          return transformEntity(transform, entity);
75      }
76      /**
77       * {@inheritDoc}
78       */
79      @Override
80      public Context get(Integer contextId)
81      {
82          return (Context)this.get(TRANSFORM_NONE, contextId);
83      }
84  
85      /**
86       * {@inheritDoc}
87       */
88      @Override
89      public Object load(final int transform, final Integer contextId)
90      {
91          if (contextId == null)
92          {
93              throw new IllegalArgumentException(
94                  "Context.load - 'contextId' can not be null");
95          }
96          final Context entity = get(ContextImpl.class, contextId);
97          return transformEntity(transform, entity);
98      }
99  
100     /**
101      * {@inheritDoc}
102      */
103     @Override
104     public Context load(Integer contextId)
105     {
106         return (Context)this.load(TRANSFORM_NONE, contextId);
107     }
108 
109     /**
110      * {@inheritDoc}
111      */
112     @Override
113     @SuppressWarnings({"unchecked"})
114     public Collection<Context> loadAll()
115     {
116         return (Collection<Context>) this.loadAll(ContextDao.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(ContextDao.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(ContextImpl.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 Context create(Context context)
182     {
183         return (Context)this.create(ContextDao.TRANSFORM_NONE, context);
184     }
185 
186     /**
187      * {@inheritDoc}
188      */
189     @Override
190     public Object create(final int transform, final Context context)
191     {
192         if (context == null)
193         {
194             throw new IllegalArgumentException(
195                 "Context.create - 'context' can not be null");
196         }
197         this.getSessionFactory().getCurrentSession().save(context);
198         return this.transformEntity(transform, context);
199     }
200 
201     /**
202      * {@inheritDoc}
203      */
204     @Override
205     @SuppressWarnings({"unchecked"})
206     public Collection<Context> create(final Collection<Context> entities)
207     {
208         return (Collection<Context>) create(ContextDao.TRANSFORM_NONE, entities);
209     }
210 
211     /**
212      * {@inheritDoc}
213      */
214     @Override
215     public Collection<?> create(final int transform, final Collection<Context> entities)
216     {
217         if (entities == null)
218         {
219             throw new IllegalArgumentException(
220                 "Context.create - 'entities' can not be null");
221         }
222                     for (Context entity : entities)
223                     {
224                         create(transform, entity);
225                     }
226         return entities;
227     }
228 
229     /**
230      * {@inheritDoc}
231      */
232     @Override
233     public Context create(
234         String contextNm,
235         String contextDc,
236         String contextIsDefault,
237         Double contextSurveyOrder,
238         Double contextTaxonDisplay,
239         Double contextInitPopOrder,
240         Float contextPlugZone,
241         Date contextCreationDt,
242         Timestamp updateDt)
243     {
244         return (Context)this.create(ContextDao.TRANSFORM_NONE, contextNm, contextDc, contextIsDefault, contextSurveyOrder, contextTaxonDisplay, contextInitPopOrder, contextPlugZone, contextCreationDt, updateDt);
245     }
246 
247     /**
248      * {@inheritDoc}
249      */
250     @Override
251     public Object create(
252         final int transform,
253         String contextNm,
254         String contextDc,
255         String contextIsDefault,
256         Double contextSurveyOrder,
257         Double contextTaxonDisplay,
258         Double contextInitPopOrder,
259         Float contextPlugZone,
260         Date contextCreationDt,
261         Timestamp updateDt)
262     {
263         Context entity = new ContextImpl();
264         entity.setContextNm(contextNm);
265         entity.setContextDc(contextDc);
266         entity.setContextIsDefault(contextIsDefault);
267         entity.setContextSurveyOrder(contextSurveyOrder);
268         entity.setContextTaxonDisplay(contextTaxonDisplay);
269         entity.setContextInitPopOrder(contextInitPopOrder);
270         entity.setContextPlugZone(contextPlugZone);
271         entity.setContextCreationDt(contextCreationDt);
272         entity.setUpdateDt(updateDt);
273         return this.create(transform, entity);
274     }
275 
276     /**
277      * {@inheritDoc}
278      */
279     @Override
280     public Context create(
281         String contextNm,
282         Status status,
283         Timestamp updateDt)
284     {
285         return (Context)this.create(ContextDao.TRANSFORM_NONE, contextNm, status, updateDt);
286     }
287 
288     /**
289      * {@inheritDoc}
290      */
291     @Override
292     public Object create(
293         final int transform,
294         String contextNm,
295         Status status,
296         Timestamp updateDt)
297     {
298         Context entity = new ContextImpl();
299         entity.setContextNm(contextNm);
300         entity.setStatus(status);
301         entity.setUpdateDt(updateDt);
302         return this.create(transform, entity);
303     }
304 
305     /**
306      * {@inheritDoc}
307      */
308     @Override
309     public void update(Context context)
310     {
311         if (context == null)
312         {
313             throw new IllegalArgumentException(
314                 "Context.update - 'context' can not be null");
315         }
316         this.getSessionFactory().getCurrentSession().update(context);
317     }
318 
319     /**
320      * {@inheritDoc}
321      */
322     @Override
323     public void update(final Collection<Context> entities)
324     {
325         if (entities == null)
326         {
327             throw new IllegalArgumentException(
328                 "Context.update - 'entities' can not be null");
329         }
330                     for (Context entity : entities)
331                     {
332                         update(entity);
333                     }
334     }
335 
336     /**
337      * {@inheritDoc}
338      */
339     @Override
340     public void remove(Context context)
341     {
342         if (context == null)
343         {
344             throw new IllegalArgumentException(
345                 "Context.remove - 'context' can not be null");
346         }
347         this.getSessionFactory().getCurrentSession().delete(context);
348     }
349 
350     /**
351      * {@inheritDoc}
352      */
353     @Override
354     public void remove(Integer contextId)
355     {
356         if (contextId == null)
357         {
358             throw new IllegalArgumentException(
359                 "Context.remove - 'contextId' can not be null");
360         }
361         Context entity = this.get(contextId);
362         if (entity != null)
363         {
364             this.remove(entity);
365         }
366     }
367 
368     /**
369      * {@inheritDoc}
370      */
371     @Override
372     public void remove(Collection<Context> entities)
373     {
374         if (entities == null)
375         {
376             throw new IllegalArgumentException(
377                 "Context.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>ContextDao</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 ContextDao}
391      * @param entity an entity that was found
392      * @return the transformed entity (i.e. new value object, etc)
393      * @see ContextDao#transformEntity(int, Context)
394      */
395     public Object transformEntity(final int transform, final Context entity)
396     {
397         Object target = null;
398         if (entity != null)
399         {
400             switch (transform)
401             {
402                 case ContextDao.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 ContextDao.TRANSFORM_NONE : // fall-through
419                 default:
420                 // do nothing;
421         }
422     }
423 
424     /**
425      * @see ContextDao#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 Context}
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 Context)
451                 {
452                     result = input;
453                 }
454                 return result;
455             }
456         };
457 
458     /**
459      * @param row
460      * @return Context
461      */
462     protected Context toEntity(Object[] row)
463     {
464         Context 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 Context)
472                 {
473                     target = (Context)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(), ContextImpl.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(ContextDao.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(), ContextImpl.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<Context> search(final Search search)
550     {
551         return (Set<Context>) this.search(ContextDao.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 }