001
014
015 package com.liferay.portlet.journal.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.security.permission.InlineSQLHelperUtil;
028 import com.liferay.portal.service.persistence.impl.BasePersistenceImpl;
029 import com.liferay.portlet.journal.model.JournalArticle;
030 import com.liferay.portlet.journal.model.JournalFolder;
031 import com.liferay.portlet.journal.model.impl.JournalArticleImpl;
032 import com.liferay.portlet.journal.model.impl.JournalFolderImpl;
033 import com.liferay.portlet.journal.service.persistence.JournalArticleUtil;
034 import com.liferay.portlet.journal.service.persistence.JournalFolderFinder;
035 import com.liferay.portlet.journal.service.persistence.JournalFolderUtil;
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 JournalFolderFinderImpl extends BasePersistenceImpl<JournalFolder>
047 implements JournalFolderFinder {
048
049 public static final String COUNT_A_BY_G_F =
050 JournalFolderFinder.class.getName() + ".countA_ByG_F";
051
052 public static final String COUNT_F_BY_G_F =
053 JournalFolderFinder.class.getName() + ".countF_ByG_F";
054
055 public static final String FIND_A_BY_G_F =
056 JournalFolderFinder.class.getName() + ".findA_ByG_F";
057
058 public static final String FIND_F_BY_NO_ASSETS =
059 JournalFolderFinder.class.getName() + ".findByF_ByNoAssets";
060
061 public static final String FIND_F_BY_G_F =
062 JournalFolderFinder.class.getName() + ".findF_ByG_F";
063
064 @Override
065 public int countF_A_ByG_F(
066 long groupId, long folderId, QueryDefinition<?> queryDefinition) {
067
068 return doCountF_A_ByG_F(groupId, folderId, queryDefinition, false);
069 }
070
071 @Override
072 public int filterCountF_A_ByG_F(
073 long groupId, long folderId, QueryDefinition<?> queryDefinition) {
074
075 return doCountF_A_ByG_F(groupId, folderId, queryDefinition, true);
076 }
077
078 @Override
079 public List<Object> filterFindF_A_ByG_F(
080 long groupId, long folderId, QueryDefinition<?> queryDefinition) {
081
082 return doFindF_A_ByG_F(groupId, folderId, queryDefinition, true);
083 }
084
085 @Override
086 public List<JournalFolder> findF_ByNoAssets() {
087 Session session = null;
088
089 try {
090 session = openSession();
091
092 String sql = CustomSQLUtil.get(FIND_F_BY_NO_ASSETS);
093
094 SQLQuery q = session.createSynchronizedSQLQuery(sql);
095
096 q.addEntity(JournalFolderImpl.TABLE_NAME, JournalFolderImpl.class);
097
098 return q.list(true);
099 }
100 catch (Exception e) {
101 throw new SystemException(e);
102 }
103 finally {
104 closeSession(session);
105 }
106 }
107
108 @Override
109 public List<Object> findF_A_ByG_F(
110 long groupId, long folderId, QueryDefinition<?> queryDefinition) {
111
112 return doFindF_A_ByG_F(groupId, folderId, queryDefinition, false);
113 }
114
115 protected int doCountF_A_ByG_F(
116 long groupId, long folderId, QueryDefinition<?> queryDefinition,
117 boolean inlineSQLHelper) {
118
119 Session session = null;
120
121 try {
122 session = openSession();
123
124 StringBundler sb = new StringBundler(5);
125
126 sb.append(StringPool.OPEN_PARENTHESIS);
127 sb.append(
128 getFoldersSQL(
129 COUNT_F_BY_G_F, groupId, queryDefinition, inlineSQLHelper));
130 sb.append(") UNION ALL (");
131 sb.append(
132 getArticlesSQL(
133 COUNT_A_BY_G_F, groupId, queryDefinition, inlineSQLHelper));
134 sb.append(StringPool.CLOSE_PARENTHESIS);
135
136 String sql = updateSQL(sb.toString(), folderId);
137
138 SQLQuery q = session.createSynchronizedSQLQuery(sql);
139
140 q.addScalar(COUNT_COLUMN_NAME, Type.LONG);
141
142 QueryPos qPos = QueryPos.getInstance(q);
143
144 qPos.add(groupId);
145 qPos.add(queryDefinition.getStatus());
146
147 if (folderId >= 0) {
148 qPos.add(folderId);
149 }
150
151 qPos.add(groupId);
152 qPos.add(queryDefinition.getStatus());
153
154 if (folderId >= 0) {
155 qPos.add(folderId);
156 }
157
158 int count = 0;
159
160 Iterator<Long> itr = q.iterate();
161
162 while (itr.hasNext()) {
163 Long l = itr.next();
164
165 if (l != null) {
166 count += l.intValue();
167 }
168 }
169
170 return count;
171 }
172 catch (Exception e) {
173 throw new SystemException(e);
174 }
175 finally {
176 closeSession(session);
177 }
178 }
179
180 protected List<Object> doFindF_A_ByG_F(
181 long groupId, long folderId, QueryDefinition<?> queryDefinition,
182 boolean inlineSQLHelper) {
183
184 Session session = null;
185
186 try {
187 session = openSession();
188
189 StringBundler sb = new StringBundler(5);
190
191 sb.append(StringPool.OPEN_PARENTHESIS);
192 sb.append(
193 getFoldersSQL(
194 FIND_F_BY_G_F, groupId, queryDefinition, inlineSQLHelper));
195 sb.append(") UNION ALL (");
196 sb.append(
197 getArticlesSQL(
198 FIND_A_BY_G_F, groupId, queryDefinition, inlineSQLHelper));
199 sb.append(StringPool.CLOSE_PARENTHESIS);
200
201 String sql = updateSQL(sb.toString(), folderId);
202
203 sql = CustomSQLUtil.replaceOrderBy(
204 sql, queryDefinition.getOrderByComparator());
205
206 SQLQuery q = session.createSynchronizedSQLQuery(sql);
207
208 q.addScalar("modelFolderId", Type.LONG);
209 q.addScalar("modelFolder", Type.LONG);
210 q.addScalar("articleId", Type.STRING);
211 q.addScalar("version", Type.DOUBLE);
212
213 QueryPos qPos = QueryPos.getInstance(q);
214
215 qPos.add(groupId);
216 qPos.add(queryDefinition.getStatus());
217
218 if (folderId >= 0) {
219 qPos.add(folderId);
220 }
221
222 qPos.add(groupId);
223 qPos.add(queryDefinition.getStatus());
224
225 if (folderId >= 0) {
226 qPos.add(folderId);
227 }
228
229 List<Object> models = new ArrayList<>();
230
231 Iterator<Object[]> itr = (Iterator<Object[]>)QueryUtil.iterate(
232 q, getDialect(), queryDefinition.getStart(),
233 queryDefinition.getEnd());
234
235 while (itr.hasNext()) {
236 Object[] array = itr.next();
237
238 long curFolderId = (Long)array[0];
239 long modelFolder = (Long)array[1];
240
241 Object obj = null;
242
243 if (modelFolder == 1) {
244 obj = JournalFolderUtil.findByPrimaryKey(curFolderId);
245 }
246 else {
247 String articleId = (String)array[2];
248 double version = (Double)array[3];
249
250 obj = JournalArticleUtil.findByG_A_V(
251 groupId, articleId, version);
252 }
253
254 models.add(obj);
255 }
256
257 return models;
258 }
259 catch (Exception e) {
260 throw new SystemException(e);
261 }
262 finally {
263 closeSession(session);
264 }
265 }
266
267 protected String getArticlesSQL(
268 String id, long groupId, QueryDefinition<?> queryDefinition,
269 boolean inlineSQLHelper) {
270
271 String sql = CustomSQLUtil.get(
272 id, queryDefinition, JournalArticleImpl.TABLE_NAME);
273
274 if (inlineSQLHelper) {
275 sql = InlineSQLHelperUtil.replacePermissionCheck(
276 sql, JournalArticle.class.getName(),
277 "JournalArticle.resourcePrimKey", groupId);
278 }
279
280 return sql;
281 }
282
283 protected String getFolderId(long folderId, String tableName) {
284 if (folderId < 0) {
285 return StringPool.BLANK;
286 }
287
288 StringBundler sb = new StringBundler(5);
289
290 sb.append(" AND ");
291 sb.append(tableName);
292 sb.append(".");
293
294 if (tableName.equals(JournalFolderImpl.TABLE_NAME)) {
295 sb.append("parentFolderId");
296 }
297 else {
298 sb.append("folderId");
299 }
300
301 sb.append(" = ? ");
302
303 return sb.toString();
304 }
305
306 protected String getFoldersSQL(
307 String id, long groupId, QueryDefinition<?> queryDefinition,
308 boolean inlineSQLHelper) {
309
310 String sql = CustomSQLUtil.get(
311 id, queryDefinition, JournalFolderImpl.TABLE_NAME);
312
313 if (inlineSQLHelper) {
314 sql = InlineSQLHelperUtil.replacePermissionCheck(
315 sql, JournalFolder.class.getName(), "JournalFolder.folderId",
316 groupId);
317 }
318
319 return sql;
320 }
321
322 protected String updateSQL(String sql, long folderId) {
323 sql = StringUtil.replace(
324 sql,
325 new String[] {
326 "[$ARTICLE_FOLDER_ID$]", "[$FOLDER_PARENT_FOLDER_ID$]"
327 },
328 new String[] {
329 getFolderId(folderId, JournalArticleImpl.TABLE_NAME),
330 getFolderId(folderId, JournalFolderImpl.TABLE_NAME)
331 });
332
333 return sql;
334 }
335
336 }