1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * Permission is hereby granted, free of charge, to any person obtaining a copy
5    * of this software and associated documentation files (the "Software"), to deal
6    * in the Software without restriction, including without limitation the rights
7    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8    * copies of the Software, and to permit persons to whom the Software is
9    * furnished to do so, subject to the following conditions:
10   *
11   * The above copyright notice and this permission notice shall be included in
12   * all copies or substantial portions of the Software.
13   *
14   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20   * SOFTWARE.
21   */
22  
23  package com.liferay.portlet.journal.service.persistence;
24  
25  import com.liferay.portal.SystemException;
26  import com.liferay.portal.kernel.annotation.BeanReference;
27  import com.liferay.portal.kernel.cache.CacheRegistry;
28  import com.liferay.portal.kernel.dao.orm.DynamicQuery;
29  import com.liferay.portal.kernel.dao.orm.EntityCacheUtil;
30  import com.liferay.portal.kernel.dao.orm.FinderCacheUtil;
31  import com.liferay.portal.kernel.dao.orm.FinderPath;
32  import com.liferay.portal.kernel.dao.orm.Query;
33  import com.liferay.portal.kernel.dao.orm.QueryPos;
34  import com.liferay.portal.kernel.dao.orm.QueryUtil;
35  import com.liferay.portal.kernel.dao.orm.Session;
36  import com.liferay.portal.kernel.log.Log;
37  import com.liferay.portal.kernel.log.LogFactoryUtil;
38  import com.liferay.portal.kernel.util.GetterUtil;
39  import com.liferay.portal.kernel.util.OrderByComparator;
40  import com.liferay.portal.kernel.util.StringPool;
41  import com.liferay.portal.kernel.util.StringUtil;
42  import com.liferay.portal.kernel.util.Validator;
43  import com.liferay.portal.model.ModelListener;
44  import com.liferay.portal.service.persistence.BatchSessionUtil;
45  import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
46  
47  import com.liferay.portlet.journal.NoSuchArticleResourceException;
48  import com.liferay.portlet.journal.model.JournalArticleResource;
49  import com.liferay.portlet.journal.model.impl.JournalArticleResourceImpl;
50  import com.liferay.portlet.journal.model.impl.JournalArticleResourceModelImpl;
51  
52  import java.util.ArrayList;
53  import java.util.Collections;
54  import java.util.List;
55  
56  /**
57   * <a href="JournalArticleResourcePersistenceImpl.java.html"><b><i>View Source</i></b></a>
58   *
59   * @author Brian Wing Shun Chan
60   *
61   */
62  public class JournalArticleResourcePersistenceImpl extends BasePersistenceImpl
63      implements JournalArticleResourcePersistence {
64      public static final String FINDER_CLASS_NAME_ENTITY = JournalArticleResourceImpl.class.getName();
65      public static final String FINDER_CLASS_NAME_LIST = FINDER_CLASS_NAME_ENTITY +
66          ".List";
67      public static final FinderPath FINDER_PATH_FIND_BY_GROUPID = new FinderPath(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
68              JournalArticleResourceModelImpl.FINDER_CACHE_ENABLED,
69              FINDER_CLASS_NAME_LIST, "findByGroupId",
70              new String[] { Long.class.getName() });
71      public static final FinderPath FINDER_PATH_FIND_BY_OBC_GROUPID = new FinderPath(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
72              JournalArticleResourceModelImpl.FINDER_CACHE_ENABLED,
73              FINDER_CLASS_NAME_LIST, "findByGroupId",
74              new String[] {
75                  Long.class.getName(),
76                  
77              "java.lang.Integer", "java.lang.Integer",
78                  "com.liferay.portal.kernel.util.OrderByComparator"
79              });
80      public static final FinderPath FINDER_PATH_COUNT_BY_GROUPID = new FinderPath(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
81              JournalArticleResourceModelImpl.FINDER_CACHE_ENABLED,
82              FINDER_CLASS_NAME_LIST, "countByGroupId",
83              new String[] { Long.class.getName() });
84      public static final FinderPath FINDER_PATH_FETCH_BY_G_A = new FinderPath(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
85              JournalArticleResourceModelImpl.FINDER_CACHE_ENABLED,
86              FINDER_CLASS_NAME_ENTITY, "fetchByG_A",
87              new String[] { Long.class.getName(), String.class.getName() });
88      public static final FinderPath FINDER_PATH_COUNT_BY_G_A = new FinderPath(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
89              JournalArticleResourceModelImpl.FINDER_CACHE_ENABLED,
90              FINDER_CLASS_NAME_LIST, "countByG_A",
91              new String[] { Long.class.getName(), String.class.getName() });
92      public static final FinderPath FINDER_PATH_FIND_ALL = new FinderPath(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
93              JournalArticleResourceModelImpl.FINDER_CACHE_ENABLED,
94              FINDER_CLASS_NAME_LIST, "findAll", new String[0]);
95      public static final FinderPath FINDER_PATH_COUNT_ALL = new FinderPath(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
96              JournalArticleResourceModelImpl.FINDER_CACHE_ENABLED,
97              FINDER_CLASS_NAME_LIST, "countAll", new String[0]);
98  
99      public void cacheResult(JournalArticleResource journalArticleResource) {
100         EntityCacheUtil.putResult(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
101             JournalArticleResourceImpl.class,
102             journalArticleResource.getPrimaryKey(), journalArticleResource);
103 
104         FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_G_A,
105             new Object[] {
106                 new Long(journalArticleResource.getGroupId()),
107                 
108             journalArticleResource.getArticleId()
109             }, journalArticleResource);
110     }
111 
112     public void cacheResult(
113         List<JournalArticleResource> journalArticleResources) {
114         for (JournalArticleResource journalArticleResource : journalArticleResources) {
115             if (EntityCacheUtil.getResult(
116                         JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
117                         JournalArticleResourceImpl.class,
118                         journalArticleResource.getPrimaryKey(), this) == null) {
119                 cacheResult(journalArticleResource);
120             }
121         }
122     }
123 
124     public void clearCache() {
125         CacheRegistry.clear(JournalArticleResourceImpl.class.getName());
126         EntityCacheUtil.clearCache(JournalArticleResourceImpl.class.getName());
127         FinderCacheUtil.clearCache(FINDER_CLASS_NAME_ENTITY);
128         FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
129     }
130 
131     public JournalArticleResource create(long resourcePrimKey) {
132         JournalArticleResource journalArticleResource = new JournalArticleResourceImpl();
133 
134         journalArticleResource.setNew(true);
135         journalArticleResource.setPrimaryKey(resourcePrimKey);
136 
137         return journalArticleResource;
138     }
139 
140     public JournalArticleResource remove(long resourcePrimKey)
141         throws NoSuchArticleResourceException, SystemException {
142         Session session = null;
143 
144         try {
145             session = openSession();
146 
147             JournalArticleResource journalArticleResource = (JournalArticleResource)session.get(JournalArticleResourceImpl.class,
148                     new Long(resourcePrimKey));
149 
150             if (journalArticleResource == null) {
151                 if (_log.isWarnEnabled()) {
152                     _log.warn(
153                         "No JournalArticleResource exists with the primary key " +
154                         resourcePrimKey);
155                 }
156 
157                 throw new NoSuchArticleResourceException(
158                     "No JournalArticleResource exists with the primary key " +
159                     resourcePrimKey);
160             }
161 
162             return remove(journalArticleResource);
163         }
164         catch (NoSuchArticleResourceException nsee) {
165             throw nsee;
166         }
167         catch (Exception e) {
168             throw processException(e);
169         }
170         finally {
171             closeSession(session);
172         }
173     }
174 
175     public JournalArticleResource remove(
176         JournalArticleResource journalArticleResource)
177         throws SystemException {
178         for (ModelListener<JournalArticleResource> listener : listeners) {
179             listener.onBeforeRemove(journalArticleResource);
180         }
181 
182         journalArticleResource = removeImpl(journalArticleResource);
183 
184         for (ModelListener<JournalArticleResource> listener : listeners) {
185             listener.onAfterRemove(journalArticleResource);
186         }
187 
188         return journalArticleResource;
189     }
190 
191     protected JournalArticleResource removeImpl(
192         JournalArticleResource journalArticleResource)
193         throws SystemException {
194         Session session = null;
195 
196         try {
197             session = openSession();
198 
199             if (journalArticleResource.isCachedModel() ||
200                     BatchSessionUtil.isEnabled()) {
201                 Object staleObject = session.get(JournalArticleResourceImpl.class,
202                         journalArticleResource.getPrimaryKeyObj());
203 
204                 if (staleObject != null) {
205                     session.evict(staleObject);
206                 }
207             }
208 
209             session.delete(journalArticleResource);
210 
211             session.flush();
212         }
213         catch (Exception e) {
214             throw processException(e);
215         }
216         finally {
217             closeSession(session);
218         }
219 
220         FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
221 
222         JournalArticleResourceModelImpl journalArticleResourceModelImpl = (JournalArticleResourceModelImpl)journalArticleResource;
223 
224         FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_G_A,
225             new Object[] {
226                 new Long(journalArticleResourceModelImpl.getOriginalGroupId()),
227                 
228             journalArticleResourceModelImpl.getOriginalArticleId()
229             });
230 
231         EntityCacheUtil.removeResult(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
232             JournalArticleResourceImpl.class,
233             journalArticleResource.getPrimaryKey());
234 
235         return journalArticleResource;
236     }
237 
238     /**
239      * @deprecated Use <code>update(JournalArticleResource journalArticleResource, boolean merge)</code>.
240      */
241     public JournalArticleResource update(
242         JournalArticleResource journalArticleResource)
243         throws SystemException {
244         if (_log.isWarnEnabled()) {
245             _log.warn(
246                 "Using the deprecated update(JournalArticleResource journalArticleResource) method. Use update(JournalArticleResource journalArticleResource, boolean merge) instead.");
247         }
248 
249         return update(journalArticleResource, false);
250     }
251 
252     /**
253      * Add, update, or merge, the entity. This method also calls the model
254      * listeners to trigger the proper events associated with adding, deleting,
255      * or updating an entity.
256      *
257      * @param        journalArticleResource the entity to add, update, or merge
258      * @param        merge boolean value for whether to merge the entity. The
259      *                default value is false. Setting merge to true is more
260      *                expensive and should only be true when journalArticleResource is
261      *                transient. See LEP-5473 for a detailed discussion of this
262      *                method.
263      * @return        true if the portlet can be displayed via Ajax
264      */
265     public JournalArticleResource update(
266         JournalArticleResource journalArticleResource, boolean merge)
267         throws SystemException {
268         boolean isNew = journalArticleResource.isNew();
269 
270         for (ModelListener<JournalArticleResource> listener : listeners) {
271             if (isNew) {
272                 listener.onBeforeCreate(journalArticleResource);
273             }
274             else {
275                 listener.onBeforeUpdate(journalArticleResource);
276             }
277         }
278 
279         journalArticleResource = updateImpl(journalArticleResource, merge);
280 
281         for (ModelListener<JournalArticleResource> listener : listeners) {
282             if (isNew) {
283                 listener.onAfterCreate(journalArticleResource);
284             }
285             else {
286                 listener.onAfterUpdate(journalArticleResource);
287             }
288         }
289 
290         return journalArticleResource;
291     }
292 
293     public JournalArticleResource updateImpl(
294         com.liferay.portlet.journal.model.JournalArticleResource journalArticleResource,
295         boolean merge) throws SystemException {
296         boolean isNew = journalArticleResource.isNew();
297 
298         JournalArticleResourceModelImpl journalArticleResourceModelImpl = (JournalArticleResourceModelImpl)journalArticleResource;
299 
300         Session session = null;
301 
302         try {
303             session = openSession();
304 
305             BatchSessionUtil.update(session, journalArticleResource, merge);
306 
307             journalArticleResource.setNew(false);
308         }
309         catch (Exception e) {
310             throw processException(e);
311         }
312         finally {
313             closeSession(session);
314         }
315 
316         FinderCacheUtil.clearCache(FINDER_CLASS_NAME_LIST);
317 
318         EntityCacheUtil.putResult(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
319             JournalArticleResourceImpl.class,
320             journalArticleResource.getPrimaryKey(), journalArticleResource);
321 
322         if (!isNew &&
323                 ((journalArticleResource.getGroupId() != journalArticleResourceModelImpl.getOriginalGroupId()) ||
324                 !Validator.equals(journalArticleResource.getArticleId(),
325                     journalArticleResourceModelImpl.getOriginalArticleId()))) {
326             FinderCacheUtil.removeResult(FINDER_PATH_FETCH_BY_G_A,
327                 new Object[] {
328                     new Long(journalArticleResourceModelImpl.getOriginalGroupId()),
329                     
330                 journalArticleResourceModelImpl.getOriginalArticleId()
331                 });
332         }
333 
334         if (isNew ||
335                 ((journalArticleResource.getGroupId() != journalArticleResourceModelImpl.getOriginalGroupId()) ||
336                 !Validator.equals(journalArticleResource.getArticleId(),
337                     journalArticleResourceModelImpl.getOriginalArticleId()))) {
338             FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_G_A,
339                 new Object[] {
340                     new Long(journalArticleResource.getGroupId()),
341                     
342                 journalArticleResource.getArticleId()
343                 }, journalArticleResource);
344         }
345 
346         return journalArticleResource;
347     }
348 
349     public JournalArticleResource findByPrimaryKey(long resourcePrimKey)
350         throws NoSuchArticleResourceException, SystemException {
351         JournalArticleResource journalArticleResource = fetchByPrimaryKey(resourcePrimKey);
352 
353         if (journalArticleResource == null) {
354             if (_log.isWarnEnabled()) {
355                 _log.warn(
356                     "No JournalArticleResource exists with the primary key " +
357                     resourcePrimKey);
358             }
359 
360             throw new NoSuchArticleResourceException(
361                 "No JournalArticleResource exists with the primary key " +
362                 resourcePrimKey);
363         }
364 
365         return journalArticleResource;
366     }
367 
368     public JournalArticleResource fetchByPrimaryKey(long resourcePrimKey)
369         throws SystemException {
370         JournalArticleResource journalArticleResource = (JournalArticleResource)EntityCacheUtil.getResult(JournalArticleResourceModelImpl.ENTITY_CACHE_ENABLED,
371                 JournalArticleResourceImpl.class, resourcePrimKey, this);
372 
373         if (journalArticleResource == null) {
374             Session session = null;
375 
376             try {
377                 session = openSession();
378 
379                 journalArticleResource = (JournalArticleResource)session.get(JournalArticleResourceImpl.class,
380                         new Long(resourcePrimKey));
381             }
382             catch (Exception e) {
383                 throw processException(e);
384             }
385             finally {
386                 if (journalArticleResource != null) {
387                     cacheResult(journalArticleResource);
388                 }
389 
390                 closeSession(session);
391             }
392         }
393 
394         return journalArticleResource;
395     }
396 
397     public List<JournalArticleResource> findByGroupId(long groupId)
398         throws SystemException {
399         Object[] finderArgs = new Object[] { new Long(groupId) };
400 
401         List<JournalArticleResource> list = (List<JournalArticleResource>)FinderCacheUtil.getResult(FINDER_PATH_FIND_BY_GROUPID,
402                 finderArgs, this);
403 
404         if (list == null) {
405             Session session = null;
406 
407             try {
408                 session = openSession();
409 
410                 StringBuilder query = new StringBuilder();
411 
412                 query.append(
413                     "FROM com.liferay.portlet.journal.model.JournalArticleResource WHERE ");
414 
415                 query.append("groupId = ?");
416 
417                 query.append(" ");
418 
419                 Query q = session.createQuery(query.toString());
420 
421                 QueryPos qPos = QueryPos.getInstance(q);
422 
423                 qPos.add(groupId);
424 
425                 list = q.list();
426             }
427             catch (Exception e) {
428                 throw processException(e);
429             }
430             finally {
431                 if (list == null) {
432                     list = new ArrayList<JournalArticleResource>();
433                 }
434 
435                 cacheResult(list);
436 
437                 FinderCacheUtil.putResult(FINDER_PATH_FIND_BY_GROUPID,
438                     finderArgs, list);
439 
440                 closeSession(session);
441             }
442         }
443 
444         return list;
445     }
446 
447     public List<JournalArticleResource> findByGroupId(long groupId, int start,
448         int end) throws SystemException {
449         return findByGroupId(groupId, start, end, null);
450     }
451 
452     public List<JournalArticleResource> findByGroupId(long groupId, int start,
453         int end, OrderByComparator obc) throws SystemException {
454         Object[] finderArgs = new Object[] {
455                 new Long(groupId),
456                 
457                 String.valueOf(start), String.valueOf(end), String.valueOf(obc)
458             };
459 
460         List<JournalArticleResource> list = (List<JournalArticleResource>)FinderCacheUtil.getResult(FINDER_PATH_FIND_BY_OBC_GROUPID,
461                 finderArgs, this);
462 
463         if (list == null) {
464             Session session = null;
465 
466             try {
467                 session = openSession();
468 
469                 StringBuilder query = new StringBuilder();
470 
471                 query.append(
472                     "FROM com.liferay.portlet.journal.model.JournalArticleResource WHERE ");
473 
474                 query.append("groupId = ?");
475 
476                 query.append(" ");
477 
478                 if (obc != null) {
479                     query.append("ORDER BY ");
480                     query.append(obc.getOrderBy());
481                 }
482 
483                 Query q = session.createQuery(query.toString());
484 
485                 QueryPos qPos = QueryPos.getInstance(q);
486 
487                 qPos.add(groupId);
488 
489                 list = (List<JournalArticleResource>)QueryUtil.list(q,
490                         getDialect(), start, end);
491             }
492             catch (Exception e) {
493                 throw processException(e);
494             }
495             finally {
496                 if (list == null) {
497                     list = new ArrayList<JournalArticleResource>();
498                 }
499 
500                 cacheResult(list);
501 
502                 FinderCacheUtil.putResult(FINDER_PATH_FIND_BY_OBC_GROUPID,
503                     finderArgs, list);
504 
505                 closeSession(session);
506             }
507         }
508 
509         return list;
510     }
511 
512     public JournalArticleResource findByGroupId_First(long groupId,
513         OrderByComparator obc)
514         throws NoSuchArticleResourceException, SystemException {
515         List<JournalArticleResource> list = findByGroupId(groupId, 0, 1, obc);
516 
517         if (list.isEmpty()) {
518             StringBuilder msg = new StringBuilder();
519 
520             msg.append("No JournalArticleResource exists with the key {");
521 
522             msg.append("groupId=" + groupId);
523 
524             msg.append(StringPool.CLOSE_CURLY_BRACE);
525 
526             throw new NoSuchArticleResourceException(msg.toString());
527         }
528         else {
529             return list.get(0);
530         }
531     }
532 
533     public JournalArticleResource findByGroupId_Last(long groupId,
534         OrderByComparator obc)
535         throws NoSuchArticleResourceException, SystemException {
536         int count = countByGroupId(groupId);
537 
538         List<JournalArticleResource> list = findByGroupId(groupId, count - 1,
539                 count, obc);
540 
541         if (list.isEmpty()) {
542             StringBuilder msg = new StringBuilder();
543 
544             msg.append("No JournalArticleResource exists with the key {");
545 
546             msg.append("groupId=" + groupId);
547 
548             msg.append(StringPool.CLOSE_CURLY_BRACE);
549 
550             throw new NoSuchArticleResourceException(msg.toString());
551         }
552         else {
553             return list.get(0);
554         }
555     }
556 
557     public JournalArticleResource[] findByGroupId_PrevAndNext(
558         long resourcePrimKey, long groupId, OrderByComparator obc)
559         throws NoSuchArticleResourceException, SystemException {
560         JournalArticleResource journalArticleResource = findByPrimaryKey(resourcePrimKey);
561 
562         int count = countByGroupId(groupId);
563 
564         Session session = null;
565 
566         try {
567             session = openSession();
568 
569             StringBuilder query = new StringBuilder();
570 
571             query.append(
572                 "FROM com.liferay.portlet.journal.model.JournalArticleResource WHERE ");
573 
574             query.append("groupId = ?");
575 
576             query.append(" ");
577 
578             if (obc != null) {
579                 query.append("ORDER BY ");
580                 query.append(obc.getOrderBy());
581             }
582 
583             Query q = session.createQuery(query.toString());
584 
585             QueryPos qPos = QueryPos.getInstance(q);
586 
587             qPos.add(groupId);
588 
589             Object[] objArray = QueryUtil.getPrevAndNext(q, count, obc,
590                     journalArticleResource);
591 
592             JournalArticleResource[] array = new JournalArticleResourceImpl[3];
593 
594             array[0] = (JournalArticleResource)objArray[0];
595             array[1] = (JournalArticleResource)objArray[1];
596             array[2] = (JournalArticleResource)objArray[2];
597 
598             return array;
599         }
600         catch (Exception e) {
601             throw processException(e);
602         }
603         finally {
604             closeSession(session);
605         }
606     }
607 
608     public JournalArticleResource findByG_A(long groupId, String articleId)
609         throws NoSuchArticleResourceException, SystemException {
610         JournalArticleResource journalArticleResource = fetchByG_A(groupId,
611                 articleId);
612 
613         if (journalArticleResource == null) {
614             StringBuilder msg = new StringBuilder();
615 
616             msg.append("No JournalArticleResource exists with the key {");
617 
618             msg.append("groupId=" + groupId);
619 
620             msg.append(", ");
621             msg.append("articleId=" + articleId);
622 
623             msg.append(StringPool.CLOSE_CURLY_BRACE);
624 
625             if (_log.isWarnEnabled()) {
626                 _log.warn(msg.toString());
627             }
628 
629             throw new NoSuchArticleResourceException(msg.toString());
630         }
631 
632         return journalArticleResource;
633     }
634 
635     public JournalArticleResource fetchByG_A(long groupId, String articleId)
636         throws SystemException {
637         return fetchByG_A(groupId, articleId, true);
638     }
639 
640     public JournalArticleResource fetchByG_A(long groupId, String articleId,
641         boolean retrieveFromCache) throws SystemException {
642         Object[] finderArgs = new Object[] { new Long(groupId), articleId };
643 
644         Object result = null;
645 
646         if (retrieveFromCache) {
647             result = FinderCacheUtil.getResult(FINDER_PATH_FETCH_BY_G_A,
648                     finderArgs, this);
649         }
650 
651         if (result == null) {
652             Session session = null;
653 
654             try {
655                 session = openSession();
656 
657                 StringBuilder query = new StringBuilder();
658 
659                 query.append(
660                     "FROM com.liferay.portlet.journal.model.JournalArticleResource WHERE ");
661 
662                 query.append("groupId = ?");
663 
664                 query.append(" AND ");
665 
666                 if (articleId == null) {
667                     query.append("articleId IS NULL");
668                 }
669                 else {
670                     query.append("articleId = ?");
671                 }
672 
673                 query.append(" ");
674 
675                 Query q = session.createQuery(query.toString());
676 
677                 QueryPos qPos = QueryPos.getInstance(q);
678 
679                 qPos.add(groupId);
680 
681                 if (articleId != null) {
682                     qPos.add(articleId);
683                 }
684 
685                 List<JournalArticleResource> list = q.list();
686 
687                 result = list;
688 
689                 JournalArticleResource journalArticleResource = null;
690 
691                 if (list.isEmpty()) {
692                     FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_G_A,
693                         finderArgs, list);
694                 }
695                 else {
696                     journalArticleResource = list.get(0);
697 
698                     cacheResult(journalArticleResource);
699 
700                     if ((journalArticleResource.getGroupId() != groupId) ||
701                             (journalArticleResource.getArticleId() == null) ||
702                             !journalArticleResource.getArticleId()
703                                                        .equals(articleId)) {
704                         FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_G_A,
705                             finderArgs, journalArticleResource);
706                     }
707                 }
708 
709                 return journalArticleResource;
710             }
711             catch (Exception e) {
712                 throw processException(e);
713             }
714             finally {
715                 if (result == null) {
716                     FinderCacheUtil.putResult(FINDER_PATH_FETCH_BY_G_A,
717                         finderArgs, new ArrayList<JournalArticleResource>());
718                 }
719 
720                 closeSession(session);
721             }
722         }
723         else {
724             if (result instanceof List) {
725                 return null;
726             }
727             else {
728                 return (JournalArticleResource)result;
729             }
730         }
731     }
732 
733     public List<Object> findWithDynamicQuery(DynamicQuery dynamicQuery)
734         throws SystemException {
735         Session session = null;
736 
737         try {
738             session = openSession();
739 
740             dynamicQuery.compile(session);
741 
742             return dynamicQuery.list();
743         }
744         catch (Exception e) {
745             throw processException(e);
746         }
747         finally {
748             closeSession(session);
749         }
750     }
751 
752     public List<Object> findWithDynamicQuery(DynamicQuery dynamicQuery,
753         int start, int end) throws SystemException {
754         Session session = null;
755 
756         try {
757             session = openSession();
758 
759             dynamicQuery.setLimit(start, end);
760 
761             dynamicQuery.compile(session);
762 
763             return dynamicQuery.list();
764         }
765         catch (Exception e) {
766             throw processException(e);
767         }
768         finally {
769             closeSession(session);
770         }
771     }
772 
773     public List<JournalArticleResource> findAll() throws SystemException {
774         return findAll(QueryUtil.ALL_POS, QueryUtil.ALL_POS, null);
775     }
776 
777     public List<JournalArticleResource> findAll(int start, int end)
778         throws SystemException {
779         return findAll(start, end, null);
780     }
781 
782     public List<JournalArticleResource> findAll(int start, int end,
783         OrderByComparator obc) throws SystemException {
784         Object[] finderArgs = new Object[] {
785                 String.valueOf(start), String.valueOf(end), String.valueOf(obc)
786             };
787 
788         List<JournalArticleResource> list = (List<JournalArticleResource>)FinderCacheUtil.getResult(FINDER_PATH_FIND_ALL,
789                 finderArgs, this);
790 
791         if (list == null) {
792             Session session = null;
793 
794             try {
795                 session = openSession();
796 
797                 StringBuilder query = new StringBuilder();
798 
799                 query.append(
800                     "FROM com.liferay.portlet.journal.model.JournalArticleResource ");
801 
802                 if (obc != null) {
803                     query.append("ORDER BY ");
804                     query.append(obc.getOrderBy());
805                 }
806 
807                 Query q = session.createQuery(query.toString());
808 
809                 if (obc == null) {
810                     list = (List<JournalArticleResource>)QueryUtil.list(q,
811                             getDialect(), start, end, false);
812 
813                     Collections.sort(list);
814                 }
815                 else {
816                     list = (List<JournalArticleResource>)QueryUtil.list(q,
817                             getDialect(), start, end);
818                 }
819             }
820             catch (Exception e) {
821                 throw processException(e);
822             }
823             finally {
824                 if (list == null) {
825                     list = new ArrayList<JournalArticleResource>();
826                 }
827 
828                 cacheResult(list);
829 
830                 FinderCacheUtil.putResult(FINDER_PATH_FIND_ALL, finderArgs, list);
831 
832                 closeSession(session);
833             }
834         }
835 
836         return list;
837     }
838 
839     public void removeByGroupId(long groupId) throws SystemException {
840         for (JournalArticleResource journalArticleResource : findByGroupId(
841                 groupId)) {
842             remove(journalArticleResource);
843         }
844     }
845 
846     public void removeByG_A(long groupId, String articleId)
847         throws NoSuchArticleResourceException, SystemException {
848         JournalArticleResource journalArticleResource = findByG_A(groupId,
849                 articleId);
850 
851         remove(journalArticleResource);
852     }
853 
854     public void removeAll() throws SystemException {
855         for (JournalArticleResource journalArticleResource : findAll()) {
856             remove(journalArticleResource);
857         }
858     }
859 
860     public int countByGroupId(long groupId) throws SystemException {
861         Object[] finderArgs = new Object[] { new Long(groupId) };
862 
863         Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_BY_GROUPID,
864                 finderArgs, this);
865 
866         if (count == null) {
867             Session session = null;
868 
869             try {
870                 session = openSession();
871 
872                 StringBuilder query = new StringBuilder();
873 
874                 query.append("SELECT COUNT(*) ");
875                 query.append(
876                     "FROM com.liferay.portlet.journal.model.JournalArticleResource WHERE ");
877 
878                 query.append("groupId = ?");
879 
880                 query.append(" ");
881 
882                 Query q = session.createQuery(query.toString());
883 
884                 QueryPos qPos = QueryPos.getInstance(q);
885 
886                 qPos.add(groupId);
887 
888                 count = (Long)q.uniqueResult();
889             }
890             catch (Exception e) {
891                 throw processException(e);
892             }
893             finally {
894                 if (count == null) {
895                     count = Long.valueOf(0);
896                 }
897 
898                 FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_GROUPID,
899                     finderArgs, count);
900 
901                 closeSession(session);
902             }
903         }
904 
905         return count.intValue();
906     }
907 
908     public int countByG_A(long groupId, String articleId)
909         throws SystemException {
910         Object[] finderArgs = new Object[] { new Long(groupId), articleId };
911 
912         Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_BY_G_A,
913                 finderArgs, this);
914 
915         if (count == null) {
916             Session session = null;
917 
918             try {
919                 session = openSession();
920 
921                 StringBuilder query = new StringBuilder();
922 
923                 query.append("SELECT COUNT(*) ");
924                 query.append(
925                     "FROM com.liferay.portlet.journal.model.JournalArticleResource WHERE ");
926 
927                 query.append("groupId = ?");
928 
929                 query.append(" AND ");
930 
931                 if (articleId == null) {
932                     query.append("articleId IS NULL");
933                 }
934                 else {
935                     query.append("articleId = ?");
936                 }
937 
938                 query.append(" ");
939 
940                 Query q = session.createQuery(query.toString());
941 
942                 QueryPos qPos = QueryPos.getInstance(q);
943 
944                 qPos.add(groupId);
945 
946                 if (articleId != null) {
947                     qPos.add(articleId);
948                 }
949 
950                 count = (Long)q.uniqueResult();
951             }
952             catch (Exception e) {
953                 throw processException(e);
954             }
955             finally {
956                 if (count == null) {
957                     count = Long.valueOf(0);
958                 }
959 
960                 FinderCacheUtil.putResult(FINDER_PATH_COUNT_BY_G_A, finderArgs,
961                     count);
962 
963                 closeSession(session);
964             }
965         }
966 
967         return count.intValue();
968     }
969 
970     public int countAll() throws SystemException {
971         Object[] finderArgs = new Object[0];
972 
973         Long count = (Long)FinderCacheUtil.getResult(FINDER_PATH_COUNT_ALL,
974                 finderArgs, this);
975 
976         if (count == null) {
977             Session session = null;
978 
979             try {
980                 session = openSession();
981 
982                 Query q = session.createQuery(
983                         "SELECT COUNT(*) FROM com.liferay.portlet.journal.model.JournalArticleResource");
984 
985                 count = (Long)q.uniqueResult();
986             }
987             catch (Exception e) {
988                 throw processException(e);
989             }
990             finally {
991                 if (count == null) {
992                     count = Long.valueOf(0);
993                 }
994 
995                 FinderCacheUtil.putResult(FINDER_PATH_COUNT_ALL, finderArgs,
996                     count);
997 
998                 closeSession(session);
999             }
1000        }
1001
1002        return count.intValue();
1003    }
1004
1005    public void afterPropertiesSet() {
1006        String[] listenerClassNames = StringUtil.split(GetterUtil.getString(
1007                    com.liferay.portal.util.PropsUtil.get(
1008                        "value.object.listener.com.liferay.portlet.journal.model.JournalArticleResource")));
1009
1010        if (listenerClassNames.length > 0) {
1011            try {
1012                List<ModelListener<JournalArticleResource>> listenersList = new ArrayList<ModelListener<JournalArticleResource>>();
1013
1014                for (String listenerClassName : listenerClassNames) {
1015                    listenersList.add((ModelListener<JournalArticleResource>)Class.forName(
1016                            listenerClassName).newInstance());
1017                }
1018
1019                listeners = listenersList.toArray(new ModelListener[listenersList.size()]);
1020            }
1021            catch (Exception e) {
1022                _log.error(e);
1023            }
1024        }
1025    }
1026
1027    @BeanReference(name = "com.liferay.portlet.journal.service.persistence.JournalArticlePersistence.impl")
1028    protected com.liferay.portlet.journal.service.persistence.JournalArticlePersistence journalArticlePersistence;
1029    @BeanReference(name = "com.liferay.portlet.journal.service.persistence.JournalArticleImagePersistence.impl")
1030    protected com.liferay.portlet.journal.service.persistence.JournalArticleImagePersistence journalArticleImagePersistence;
1031    @BeanReference(name = "com.liferay.portlet.journal.service.persistence.JournalArticleResourcePersistence.impl")
1032    protected com.liferay.portlet.journal.service.persistence.JournalArticleResourcePersistence journalArticleResourcePersistence;
1033    @BeanReference(name = "com.liferay.portlet.journal.service.persistence.JournalContentSearchPersistence.impl")
1034    protected com.liferay.portlet.journal.service.persistence.JournalContentSearchPersistence journalContentSearchPersistence;
1035    @BeanReference(name = "com.liferay.portlet.journal.service.persistence.JournalFeedPersistence.impl")
1036    protected com.liferay.portlet.journal.service.persistence.JournalFeedPersistence journalFeedPersistence;
1037    @BeanReference(name = "com.liferay.portlet.journal.service.persistence.JournalStructurePersistence.impl")
1038    protected com.liferay.portlet.journal.service.persistence.JournalStructurePersistence journalStructurePersistence;
1039    @BeanReference(name = "com.liferay.portlet.journal.service.persistence.JournalTemplatePersistence.impl")
1040    protected com.liferay.portlet.journal.service.persistence.JournalTemplatePersistence journalTemplatePersistence;
1041    private static Log _log = LogFactoryUtil.getLog(JournalArticleResourcePersistenceImpl.class);
1042}