001    /**
002     * Copyright (c) 2000-2013 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.model.impl;
016    
017    import com.liferay.portal.kernel.dao.orm.QueryUtil;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.exception.SystemException;
020    import com.liferay.portal.kernel.log.Log;
021    import com.liferay.portal.kernel.log.LogFactoryUtil;
022    import com.liferay.portal.kernel.repository.model.FileEntry;
023    import com.liferay.portal.kernel.repository.model.Folder;
024    import com.liferay.portal.kernel.util.Validator;
025    import com.liferay.portal.kernel.workflow.WorkflowConstants;
026    import com.liferay.portal.model.Repository;
027    import com.liferay.portal.portletfilerepository.PortletFileRepositoryUtil;
028    import com.liferay.portal.service.ServiceContext;
029    import com.liferay.portal.util.PortletKeys;
030    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
031    import com.liferay.portlet.wiki.model.WikiNode;
032    import com.liferay.portlet.wiki.model.WikiPage;
033    import com.liferay.portlet.wiki.service.WikiNodeLocalServiceUtil;
034    import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
035    import com.liferay.portlet.wiki.service.WikiPageServiceUtil;
036    
037    import java.util.ArrayList;
038    import java.util.Collections;
039    import java.util.List;
040    
041    /**
042     * @author Brian Wing Shun Chan
043     * @author Jorge Ferrer
044     */
045    public class WikiPageImpl extends WikiPageBaseImpl {
046    
047            public WikiPageImpl() {
048            }
049    
050            @Override
051            public Folder addAttachmentsFolder()
052                    throws PortalException, SystemException {
053    
054                    if (_attachmentsFolderId !=
055                                    DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
056    
057                            return PortletFileRepositoryUtil.getPortletFolder(
058                                    _attachmentsFolderId);
059                    }
060    
061                    ServiceContext serviceContext = new ServiceContext();
062    
063                    serviceContext.setAddGroupPermissions(true);
064                    serviceContext.setAddGuestPermissions(true);
065    
066                    Repository repository = PortletFileRepositoryUtil.addPortletRepository(
067                            getGroupId(), PortletKeys.WIKI, serviceContext);
068    
069                    WikiNode node = getNode();
070    
071                    Folder nodeFolder = node.addAttachmentsFolder();
072    
073                    Folder folder = PortletFileRepositoryUtil.addPortletFolder(
074                            getUserId(), repository.getRepositoryId(), nodeFolder.getFolderId(),
075                            String.valueOf(getResourcePrimKey()), serviceContext);
076    
077                    _attachmentsFolderId = folder.getFolderId();
078    
079                    return folder;
080            }
081    
082            @Override
083            public List<FileEntry> getAttachmentsFileEntries() throws SystemException {
084                    return getAttachmentsFileEntries(QueryUtil.ALL_POS, QueryUtil.ALL_POS);
085            }
086    
087            @Override
088            public List<FileEntry> getAttachmentsFileEntries(int start, int end)
089                    throws SystemException {
090    
091                    List<FileEntry> fileEntries = new ArrayList<FileEntry>();
092    
093                    long attachmentsFolderId = getAttachmentsFolderId();
094    
095                    if (attachmentsFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
096                            fileEntries = PortletFileRepositoryUtil.getPortletFileEntries(
097                                    getGroupId(), attachmentsFolderId,
098                                    WorkflowConstants.STATUS_APPROVED, start, end, null);
099                    }
100    
101                    return fileEntries;
102            }
103    
104            @Override
105            public int getAttachmentsFileEntriesCount() throws SystemException {
106                    int attachmentsFileEntriesCount = 0;
107    
108                    long attachmentsFolderId = getAttachmentsFolderId();
109    
110                    if (attachmentsFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
111                            attachmentsFileEntriesCount =
112                                    PortletFileRepositoryUtil.getPortletFileEntriesCount(
113                                            getGroupId(), attachmentsFolderId,
114                                            WorkflowConstants.STATUS_APPROVED);
115                    }
116    
117                    return attachmentsFileEntriesCount;
118            }
119    
120            @Override
121            public long getAttachmentsFolderId() throws SystemException {
122                    if (_attachmentsFolderId !=
123                                    DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
124    
125                            return _attachmentsFolderId;
126                    }
127    
128                    ServiceContext serviceContext = new ServiceContext();
129    
130                    serviceContext.setAddGroupPermissions(true);
131                    serviceContext.setAddGuestPermissions(true);
132    
133                    Repository repository =
134                            PortletFileRepositoryUtil.fetchPortletRepository(
135                                    getGroupId(), PortletKeys.WIKI);
136    
137                    long nodeAttachmentsFolderId = getNodeAttachmentsFolderId();
138    
139                    if ((repository == null) ||
140                            (nodeAttachmentsFolderId ==
141                                    DLFolderConstants.DEFAULT_PARENT_FOLDER_ID)) {
142    
143                            return DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
144                    }
145    
146                    try {
147                            Folder folder = PortletFileRepositoryUtil.getPortletFolder(
148                                    getUserId(), repository.getRepositoryId(),
149                                    nodeAttachmentsFolderId, String.valueOf(getResourcePrimKey()),
150                                    serviceContext);
151    
152                            _attachmentsFolderId = folder.getFolderId();
153                    }
154                    catch (Exception e) {
155                    }
156    
157                    return _attachmentsFolderId;
158            }
159    
160            @Override
161            public List<WikiPage> getChildPages() {
162                    try {
163                            return WikiPageLocalServiceUtil.getChildren(
164                                    getNodeId(), true, getTitle());
165                    }
166                    catch (Exception e) {
167                            _log.error(e, e);
168    
169                            return Collections.emptyList();
170                    }
171            }
172    
173            @Override
174            public List<FileEntry> getDeletedAttachmentsFileEntries()
175                    throws SystemException {
176    
177                    return getDeletedAttachmentsFileEntries(
178                            QueryUtil.ALL_POS, QueryUtil.ALL_POS);
179            }
180    
181            @Override
182            public List<FileEntry> getDeletedAttachmentsFileEntries(int start, int end)
183                    throws SystemException {
184    
185                    List<FileEntry> fileEntries = new ArrayList<FileEntry>();
186    
187                    long attachmentsFolderId = getAttachmentsFolderId();
188    
189                    if (attachmentsFolderId != 0) {
190                            fileEntries = PortletFileRepositoryUtil.getPortletFileEntries(
191                                    getGroupId(), attachmentsFolderId,
192                                    WorkflowConstants.STATUS_IN_TRASH, start, end, null);
193                    }
194    
195                    return fileEntries;
196            }
197    
198            @Override
199            public int getDeletedAttachmentsFileEntriesCount() throws SystemException {
200                    int deletedAttachmentsFileEntriesCount = 0;
201    
202                    long attachmentsFolderId = getAttachmentsFolderId();
203    
204                    if (attachmentsFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
205                            return PortletFileRepositoryUtil.getPortletFileEntriesCount(
206                                    getGroupId(), attachmentsFolderId,
207                                    WorkflowConstants.STATUS_IN_TRASH);
208                    }
209    
210                    return deletedAttachmentsFileEntriesCount;
211            }
212    
213            @Override
214            public WikiNode getNode() {
215                    try {
216                            return WikiNodeLocalServiceUtil.getNode(getNodeId());
217                    }
218                    catch (Exception e) {
219                            _log.error(e, e);
220    
221                            return new WikiNodeImpl();
222                    }
223            }
224    
225            @Override
226            public long getNodeAttachmentsFolderId() throws SystemException {
227                    WikiNode node = getNode();
228    
229                    return node.getAttachmentsFolderId();
230            }
231    
232            @Override
233            public WikiPage getParentPage() {
234                    if (Validator.isNull(getParentTitle())) {
235                            return null;
236                    }
237    
238                    try {
239                            return WikiPageLocalServiceUtil.getPage(
240                                    getNodeId(), getParentTitle());
241                    }
242                    catch (Exception e) {
243                            _log.error(e, e);
244    
245                            return null;
246                    }
247            }
248    
249            @Override
250            public List<WikiPage> getParentPages() {
251                    List<WikiPage> parentPages = new ArrayList<WikiPage>();
252    
253                    WikiPage parentPage = getParentPage();
254    
255                    if (parentPage != null) {
256                            parentPages.addAll(parentPage.getParentPages());
257                            parentPages.add(parentPage);
258                    }
259    
260                    return parentPages;
261            }
262    
263            @Override
264            public WikiPage getRedirectPage() {
265                    if (Validator.isNull(getRedirectTitle())) {
266                            return null;
267                    }
268    
269                    try {
270                            return WikiPageLocalServiceUtil.getPage(
271                                    getNodeId(), getRedirectTitle());
272                    }
273                    catch (Exception e) {
274                            _log.error(e, e);
275    
276                            return null;
277                    }
278            }
279    
280            @Override
281            public long getTrashEntryClassPK() {
282                    return getResourcePrimKey();
283            }
284    
285            @Override
286            public List<WikiPage> getViewableChildPages() {
287                    try {
288                            return WikiPageServiceUtil.getChildren(
289                                    getGroupId(), getNodeId(), true, getTitle());
290                    }
291                    catch (Exception e) {
292                            _log.error(e, e);
293    
294                            return Collections.emptyList();
295                    }
296            }
297    
298            @Override
299            public WikiPage getViewableParentPage() {
300                    if (Validator.isNull(getParentTitle())) {
301                            return null;
302                    }
303    
304                    try {
305                            return WikiPageServiceUtil.getPage(
306                                    getGroupId(), getNodeId(), getParentTitle());
307                    }
308                    catch (Exception e) {
309                            _log.error(e, e);
310    
311                            return null;
312                    }
313            }
314    
315            @Override
316            public List<WikiPage> getViewableParentPages() {
317                    List<WikiPage> pages = new ArrayList<WikiPage>();
318    
319                    WikiPage page = getViewableParentPage();
320    
321                    if (page != null) {
322                            pages.addAll(page.getViewableParentPages());
323                            pages.add(page);
324                    }
325    
326                    return pages;
327            }
328    
329            @Override
330            public boolean isResourceMain() {
331                    return isHead();
332            }
333    
334            @Override
335            public void setAttachmentsFolderId(long attachmentsFolderId) {
336                    _attachmentsFolderId = attachmentsFolderId;
337            }
338    
339            private static Log _log = LogFactoryUtil.getLog(WikiPageImpl.class);
340    
341            private long _attachmentsFolderId;
342    
343    }