001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.wiki.service.persistence.impl;
016    
017    import com.liferay.portal.kernel.dao.orm.QueryPos;
018    import com.liferay.portal.kernel.dao.orm.QueryUtil;
019    import com.liferay.portal.kernel.dao.orm.SQLQuery;
020    import com.liferay.portal.kernel.dao.orm.Session;
021    import com.liferay.portal.kernel.dao.orm.Type;
022    import com.liferay.portal.kernel.exception.SystemException;
023    import com.liferay.portal.kernel.util.StringBundler;
024    import com.liferay.portal.kernel.util.StringPool;
025    import com.liferay.portal.kernel.util.StringUtil;
026    import com.liferay.portal.kernel.workflow.WorkflowConstants;
027    import com.liferay.portal.security.permission.InlineSQLHelperUtil;
028    import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
029    import com.liferay.portlet.wiki.NoSuchPageException;
030    import com.liferay.portlet.wiki.model.WikiPage;
031    import com.liferay.portlet.wiki.model.impl.WikiPageImpl;
032    import com.liferay.portlet.wiki.service.persistence.WikiPageFinder;
033    import com.liferay.util.dao.orm.CustomSQLUtil;
034    
035    import java.sql.Timestamp;
036    
037    import java.util.Date;
038    import java.util.Iterator;
039    import java.util.List;
040    
041    /**
042     * @author Brian Wing Shun Chan
043     */
044    public class WikiPageFinderImpl
045            extends BasePersistenceImpl<WikiPage> implements WikiPageFinder {
046    
047            public static final String COUNT_BY_CREATE_DATE =
048                    WikiPageFinder.class.getName() + ".countByCreateDate";
049    
050            public static final String FIND_BY_RESOURCE_PRIM_KEY =
051                    WikiPageFinder.class.getName() + ".findByResourcePrimKey";
052    
053            public static final String FIND_BY_CREATE_DATE =
054                    WikiPageFinder.class.getName() + ".findByCreateDate";
055    
056            public static final String FIND_BY_NO_ASSETS =
057                    WikiPageFinder.class.getName() + ".findByNoAssets";
058    
059            @Override
060            public int countByCreateDate(
061                    long groupId, long nodeId, Date createDate, boolean before) {
062    
063                    return countByCreateDate(
064                            groupId, nodeId, new Timestamp(createDate.getTime()), before);
065            }
066    
067            @Override
068            public int countByCreateDate(
069                    long groupId, long nodeId, Timestamp createDate, boolean before) {
070    
071                    return doCountByCreateDate(groupId, nodeId, createDate, before, false);
072            }
073    
074            @Override
075            public int filterCountByCreateDate(
076                    long groupId, long nodeId, Date createDate, boolean before) {
077    
078                    return doCountByCreateDate(
079                            groupId, nodeId, new Timestamp(createDate.getTime()), before, true);
080            }
081    
082            @Override
083            public int filterCountByCreateDate(
084                    long groupId, long nodeId, Timestamp createDate, boolean before) {
085    
086                    return doCountByCreateDate(groupId, nodeId, createDate, before, true);
087            }
088    
089            @Override
090            public List<WikiPage> filterFindByCreateDate(
091                    long groupId, long nodeId, Date createDate, boolean before, int start,
092                    int end) {
093    
094                    return doFindByCreateDate(
095                            groupId, nodeId, new Timestamp(createDate.getTime()), before, start,
096                            end, true);
097            }
098    
099            @Override
100            public List<WikiPage> filterFindByCreateDate(
101                    long groupId, long nodeId, Timestamp createDate, boolean before,
102                    int start, int end) {
103    
104                    return doFindByCreateDate(
105                            groupId, nodeId, createDate, before, start, end, true);
106            }
107    
108            @Override
109            public WikiPage findByResourcePrimKey(long resourcePrimKey)
110                    throws NoSuchPageException {
111    
112                    Session session = null;
113    
114                    try {
115                            session = openSession();
116    
117                            String sql = CustomSQLUtil.get(FIND_BY_RESOURCE_PRIM_KEY);
118    
119                            SQLQuery q = session.createSynchronizedSQLQuery(sql);
120    
121                            q.addEntity("WikiPage", WikiPageImpl.class);
122    
123                            QueryPos qPos = QueryPos.getInstance(q);
124    
125                            qPos.add(resourcePrimKey);
126    
127                            List<WikiPage> pages = q.list();
128    
129                            if (!pages.isEmpty()) {
130                                    return pages.get(0);
131                            }
132                    }
133                    catch (Exception e) {
134                            throw new SystemException(e);
135                    }
136                    finally {
137                            closeSession(session);
138                    }
139    
140                    StringBundler sb = new StringBundler(3);
141    
142                    sb.append("No WikiPage exists with the key {resourcePrimKey");
143                    sb.append(resourcePrimKey);
144                    sb.append("}");
145    
146                    throw new NoSuchPageException(sb.toString());
147            }
148    
149            @Override
150            public List<WikiPage> findByCreateDate(
151                    long groupId, long nodeId, Date createDate, boolean before, int start,
152                    int end) {
153    
154                    return doFindByCreateDate(
155                            groupId, nodeId, new Timestamp(createDate.getTime()), before, start,
156                            end, false);
157            }
158    
159            @Override
160            public List<WikiPage> findByCreateDate(
161                    long groupId, long nodeId, Timestamp createDate, boolean before,
162                    int start, int end) {
163    
164                    return doFindByCreateDate(
165                            groupId, nodeId, createDate, before, start, end, false);
166            }
167    
168            @Override
169            public List<WikiPage> findByNoAssets() {
170                    Session session = null;
171    
172                    try {
173                            session = openSession();
174    
175                            String sql = CustomSQLUtil.get(FIND_BY_NO_ASSETS);
176    
177                            SQLQuery q = session.createSynchronizedSQLQuery(sql);
178    
179                            q.addEntity("WikiPage", WikiPageImpl.class);
180    
181                            return q.list(true);
182                    }
183                    catch (Exception e) {
184                            throw new SystemException(e);
185                    }
186                    finally {
187                            closeSession(session);
188                    }
189            }
190    
191            protected int doCountByCreateDate(
192                    long groupId, long nodeId, Timestamp createDate, boolean before,
193                    boolean inlineSQLHelper) {
194    
195                    Session session = null;
196    
197                    try {
198                            session = openSession();
199    
200                            String sql = CustomSQLUtil.get(COUNT_BY_CREATE_DATE);
201    
202                            String createDateComparator = StringPool.GREATER_THAN;
203    
204                            if (before) {
205                                    createDateComparator = StringPool.LESS_THAN;
206                            }
207    
208                            sql = StringUtil.replace(
209                                    sql, "[$CREATE_DATE_COMPARATOR$]", createDateComparator);
210    
211                            if (inlineSQLHelper) {
212                                    sql = InlineSQLHelperUtil.replacePermissionCheck(
213                                            sql, WikiPage.class.getName(), "WikiPage.resourcePrimKey",
214                                            groupId);
215                            }
216    
217                            SQLQuery q = session.createSynchronizedSQLQuery(sql);
218    
219                            q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
220    
221                            QueryPos qPos = QueryPos.getInstance(q);
222    
223                            qPos.add(groupId);
224                            qPos.add(nodeId);
225                            qPos.add(createDate);
226                            qPos.add(true);
227                            qPos.add(WorkflowConstants.STATUS_APPROVED);
228    
229                            Iterator<Long> itr = q.iterate();
230    
231                            if (itr.hasNext()) {
232                                    Long count = itr.next();
233    
234                                    if (count != null) {
235                                            return count.intValue();
236                                    }
237                            }
238    
239                            return 0;
240                    }
241                    catch (Exception e) {
242                            throw new SystemException(e);
243                    }
244                    finally {
245                            closeSession(session);
246                    }
247            }
248    
249            protected List<WikiPage> doFindByCreateDate(
250                    long groupId, long nodeId, Timestamp createDate, boolean before,
251                    int start, int end, boolean inlineSQLHelper) {
252    
253                    Session session = null;
254    
255                    try {
256                            session = openSession();
257    
258                            String sql = CustomSQLUtil.get(FIND_BY_CREATE_DATE);
259    
260                            String createDateComparator = StringPool.GREATER_THAN;
261    
262                            if (before) {
263                                    createDateComparator = StringPool.LESS_THAN;
264                            }
265    
266                            sql = StringUtil.replace(
267                                    sql, "[$CREATE_DATE_COMPARATOR$]", createDateComparator);
268    
269                            if (inlineSQLHelper) {
270                                    sql = InlineSQLHelperUtil.replacePermissionCheck(
271                                            sql, WikiPage.class.getName(), "WikiPage.resourcePrimKey",
272                                            groupId);
273                            }
274    
275                            SQLQuery q = session.createSynchronizedSQLQuery(sql);
276    
277                            q.addEntity("WikiPage", WikiPageImpl.class);
278    
279                            QueryPos qPos = QueryPos.getInstance(q);
280    
281                            qPos.add(groupId);
282                            qPos.add(nodeId);
283                            qPos.add(createDate);
284                            qPos.add(true);
285                            qPos.add(WorkflowConstants.STATUS_APPROVED);
286    
287                            return (List<WikiPage>)QueryUtil.list(q, getDialect(), start, end);
288                    }
289                    catch (Exception e) {
290                            throw new SystemException(e);
291                    }
292                    finally {
293                            closeSession(session);
294                    }
295            }
296    
297    }