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