001
014
015 package com.liferay.portlet.bookmarks.service.persistence.impl;
016
017 import com.liferay.portal.kernel.dao.orm.QueryDefinition;
018 import com.liferay.portal.kernel.dao.orm.QueryPos;
019 import com.liferay.portal.kernel.dao.orm.QueryUtil;
020 import com.liferay.portal.kernel.dao.orm.SQLQuery;
021 import com.liferay.portal.kernel.dao.orm.Session;
022 import com.liferay.portal.kernel.dao.orm.Type;
023 import com.liferay.portal.kernel.exception.SystemException;
024 import com.liferay.portal.kernel.util.StringBundler;
025 import com.liferay.portal.kernel.util.StringPool;
026 import com.liferay.portal.kernel.util.StringUtil;
027 import com.liferay.portal.kernel.workflow.WorkflowConstants;
028 import com.liferay.portal.security.permission.InlineSQLHelperUtil;
029 import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
030 import com.liferay.portlet.bookmarks.model.BookmarksEntry;
031 import com.liferay.portlet.bookmarks.model.BookmarksFolder;
032 import com.liferay.portlet.bookmarks.model.impl.BookmarksFolderImpl;
033 import com.liferay.portlet.bookmarks.service.persistence.BookmarksEntryUtil;
034 import com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderFinder;
035 import com.liferay.portlet.bookmarks.service.persistence.BookmarksFolderUtil;
036 import com.liferay.util.dao.orm.CustomSQLUtil;
037
038 import java.util.ArrayList;
039 import java.util.Iterator;
040 import java.util.List;
041
042
046 public class BookmarksFolderFinderImpl
047 extends BasePersistenceImpl<BookmarksFolder>
048 implements BookmarksFolderFinder {
049
050 public static final String COUNT_F_BY_G_P =
051 BookmarksFolderFinder.class.getName() + ".countF_ByG_P";
052
053 public static final String COUNT_F_BY_G_P_S =
054 BookmarksFolderFinder.class.getName() + ".countF_ByG_P_S";
055
056 public static final String COUNT_E_BY_G_F =
057 BookmarksFolderFinder.class.getName() + ".countE_ByG_F";
058
059 public static final String COUNT_E_BY_G_F_S =
060 BookmarksFolderFinder.class.getName() + ".countE_ByG_F_S";
061
062 public static final String FIND_BY_NO_ASSETS =
063 BookmarksFolderFinder.class.getName() + ".findByNoAssets";
064
065 public static final String FIND_F_BY_G_P =
066 BookmarksFolderFinder.class.getName() + ".findF_ByG_P";
067
068 public static final String FIND_F_BY_G_P_S =
069 BookmarksFolderFinder.class.getName() + ".findF_ByG_P_S";
070
071 public static final String FIND_E_BY_G_F =
072 BookmarksFolderFinder.class.getName() + ".findE_ByG_F";
073
074 public static final String FIND_E_BY_G_F_S =
075 BookmarksFolderFinder.class.getName() + ".findE_ByG_F_S";
076
077 @Override
078 public int countF_E_ByG_F(
079 long groupId, long folderId, QueryDefinition<?> queryDefinition) {
080
081 return doCountF_E_ByG_F(groupId, folderId, queryDefinition, false);
082 }
083
084 @Override
085 public int filterCountF_E_ByG_F(
086 long groupId, long folderId, QueryDefinition<?> queryDefinition) {
087
088 return doCountF_E_ByG_F(groupId, folderId, queryDefinition, true);
089 }
090
091 @Override
092 public List<Object> filterFindBF_E_ByG_F(
093 long groupId, long folderId, QueryDefinition<?> queryDefinition) {
094
095 return doFindF_E_ByG_F(groupId, folderId, queryDefinition, true);
096 }
097
098 @Override
099 public List<BookmarksFolder> findByNoAssets() {
100 Session session = null;
101
102 try {
103 session = openSession();
104
105 String sql = CustomSQLUtil.get(FIND_BY_NO_ASSETS);
106
107 SQLQuery q = session.createSynchronizedSQLQuery(sql);
108
109 q.addEntity("BookmarksFolder", BookmarksFolderImpl.class);
110
111 return q.list(true);
112 }
113 catch (Exception e) {
114 throw new SystemException(e);
115 }
116 finally {
117 closeSession(session);
118 }
119 }
120
121 @Override
122 public List<Object> findF_E_ByG_F(
123 long groupId, long folderId, QueryDefinition<?> queryDefinition) {
124
125 return doFindF_E_ByG_F(groupId, folderId, queryDefinition, false);
126 }
127
128 protected int doCountF_E_ByG_F(
129 long groupId, long folderId, QueryDefinition<?> queryDefinition,
130 boolean inlineSQLHelper) {
131
132 Session session = null;
133
134 try {
135 session = openSession();
136
137 StringBundler sb = new StringBundler(5);
138
139 sb.append(StringPool.OPEN_PARENTHESIS);
140
141 String sql = null;
142
143 if (queryDefinition.getStatus() == WorkflowConstants.STATUS_ANY) {
144 sql = CustomSQLUtil.get(COUNT_F_BY_G_P);
145 }
146 else {
147 sql = CustomSQLUtil.get(COUNT_F_BY_G_P_S);
148
149 sql = replaceExcludeStatus(sql, queryDefinition);
150 }
151
152 if (inlineSQLHelper) {
153 sql = InlineSQLHelperUtil.replacePermissionCheck(
154 sql, BookmarksFolder.class.getName(),
155 "BookmarksFolder.folderId", groupId);
156 }
157
158 sb.append(sql);
159 sb.append(") UNION ALL (");
160
161 if (queryDefinition.getStatus() == WorkflowConstants.STATUS_ANY) {
162 sql = CustomSQLUtil.get(COUNT_E_BY_G_F);
163 }
164 else {
165 sql = CustomSQLUtil.get(COUNT_E_BY_G_F_S);
166
167 sql = replaceExcludeStatus(sql, queryDefinition);
168 }
169
170 if (inlineSQLHelper) {
171 sql = InlineSQLHelperUtil.replacePermissionCheck(
172 sql, BookmarksEntry.class.getName(),
173 "BookmarksEntry.fileEntryId", groupId);
174 }
175
176 sb.append(sql);
177 sb.append(StringPool.CLOSE_PARENTHESIS);
178
179 sql = sb.toString();
180
181 SQLQuery q = session.createSynchronizedSQLQuery(sql);
182
183 q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
184
185 QueryPos qPos = QueryPos.getInstance(q);
186
187 qPos.add(groupId);
188 qPos.add(folderId);
189
190 if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
191 qPos.add(queryDefinition.getStatus());
192 }
193
194 qPos.add(groupId);
195 qPos.add(folderId);
196
197 if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
198 qPos.add(queryDefinition.getStatus());
199 }
200
201 int count = 0;
202
203 Iterator<Long> itr = q.iterate();
204
205 while (itr.hasNext()) {
206 Long l = itr.next();
207
208 if (l != null) {
209 count += l.intValue();
210 }
211 }
212
213 return count;
214 }
215 catch (Exception e) {
216 throw new SystemException(e);
217 }
218 finally {
219 closeSession(session);
220 }
221 }
222
223 protected List<Object> doFindF_E_ByG_F(
224 long groupId, long folderId, QueryDefinition<?> queryDefinition,
225 boolean inlineSQLHelper) {
226
227 Session session = null;
228
229 try {
230 session = openSession();
231
232 StringBundler sb = new StringBundler(5);
233
234 sb.append("SELECT * FROM (");
235
236 String sql = null;
237
238 if (queryDefinition.getStatus() == WorkflowConstants.STATUS_ANY) {
239 sql = CustomSQLUtil.get(FIND_F_BY_G_P);
240 }
241 else {
242 sql = CustomSQLUtil.get(FIND_F_BY_G_P_S);
243
244 sql = replaceExcludeStatus(sql, queryDefinition);
245 }
246
247 if (inlineSQLHelper) {
248 sql = InlineSQLHelperUtil.replacePermissionCheck(
249 sql, BookmarksFolder.class.getName(),
250 "BookmarksFolder.folderId", groupId);
251 }
252
253 sb.append(sql);
254 sb.append(" UNION ALL ");
255
256 if (queryDefinition.getStatus() == WorkflowConstants.STATUS_ANY) {
257 sql = CustomSQLUtil.get(FIND_E_BY_G_F);
258 }
259 else {
260 sql = CustomSQLUtil.get(FIND_E_BY_G_F_S);
261
262 sql = replaceExcludeStatus(sql, queryDefinition);
263 }
264
265 if (inlineSQLHelper) {
266 sql = InlineSQLHelperUtil.replacePermissionCheck(
267 sql, BookmarksEntry.class.getName(),
268 "BookmarksEntry.fileEntryId", groupId);
269 }
270
271 sb.append(sql);
272 sb.append(") TEMP_TABLE ORDER BY modelName ASC");
273
274 sql = sb.toString();
275
276 SQLQuery q = session.createSynchronizedSQLQuery(sql);
277
278 q.addScalar("modelId", Type.LONG);
279 q.addScalar("modelName", Type.STRING);
280 q.addScalar("modelFolder", Type.LONG);
281
282 QueryPos qPos = QueryPos.getInstance(q);
283
284 qPos.add(groupId);
285 qPos.add(folderId);
286
287 if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
288 qPos.add(queryDefinition.getStatus());
289 }
290
291 qPos.add(groupId);
292 qPos.add(folderId);
293
294 if (queryDefinition.getStatus() != WorkflowConstants.STATUS_ANY) {
295 qPos.add(queryDefinition.getStatus());
296 }
297
298 List<Object> models = new ArrayList<Object>();
299
300 Iterator<Object[]> itr = (Iterator<Object[]>)QueryUtil.iterate(
301 q, getDialect(), queryDefinition.getStart(),
302 queryDefinition.getEnd());
303
304 while (itr.hasNext()) {
305 Object[] array = itr.next();
306
307 long modelId = (Long)array[0];
308
309 long modelFolder = (Long)array[2];
310
311 Object obj = null;
312
313 if (modelFolder == 0) {
314 obj = BookmarksFolderUtil.findByPrimaryKey(modelId);
315 }
316 else {
317 obj = BookmarksEntryUtil.findByPrimaryKey(modelId);
318 }
319
320 models.add(obj);
321 }
322
323 return models;
324 }
325 catch (Exception e) {
326 throw new SystemException(e);
327 }
328 finally {
329 closeSession(session);
330 }
331 }
332
333 protected String replaceExcludeStatus(
334 String sql, QueryDefinition<?> queryDefinition) {
335
336 if (queryDefinition.isExcludeStatus()) {
337 sql = StringUtil.replace(sql, ".status = ?)", ".status != ?)");
338 }
339
340 return sql;
341 }
342
343 }