001    /**
002     * Copyright (c) 2000-2012 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.journal.trash;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.trash.BaseTrashHandler;
020    import com.liferay.portal.kernel.trash.TrashRenderer;
021    import com.liferay.portal.security.permission.PermissionChecker;
022    import com.liferay.portlet.journal.asset.JournalArticleAssetRenderer;
023    import com.liferay.portlet.journal.model.JournalArticle;
024    import com.liferay.portlet.journal.model.JournalArticleResource;
025    import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
026    import com.liferay.portlet.journal.service.JournalArticleResourceLocalServiceUtil;
027    import com.liferay.portlet.journal.service.JournalArticleServiceUtil;
028    import com.liferay.portlet.journal.service.permission.JournalArticlePermission;
029    import com.liferay.portlet.journal.util.JournalUtil;
030    import com.liferay.portlet.trash.DuplicateEntryException;
031    import com.liferay.portlet.trash.model.TrashEntry;
032    
033    import javax.portlet.PortletRequest;
034    
035    /**
036     * Implements trash handling for the journal article entity.
037     *
038     * @author Levente Hudák
039     * @author Sergio González
040     */
041    public class JournalArticleTrashHandler extends BaseTrashHandler {
042    
043            public static final String CLASS_NAME = JournalArticle.class.getName();
044    
045            @Override
046            public void checkDuplicateTrashEntry(
047                            TrashEntry trashEntry, long containerModelId, String newName)
048                    throws PortalException, SystemException {
049    
050                    JournalArticle article =
051                            JournalArticleLocalServiceUtil.getLatestArticle(
052                                    trashEntry.getClassPK());
053    
054                    String originalTitle = trashEntry.getTypeSettingsProperty("title");
055    
056                    JournalArticleResource articleResource =
057                            JournalArticleResourceLocalServiceUtil.fetchArticleResource(
058                                    article.getGroupId(), originalTitle);
059    
060                    if (articleResource != null) {
061                            DuplicateEntryException dee = new DuplicateEntryException();
062    
063                            JournalArticle duplicateArticle =
064                                    JournalArticleLocalServiceUtil.getArticle(
065                                            articleResource.getGroupId(), originalTitle);
066    
067                            dee.setDuplicateEntryId(duplicateArticle.getResourcePrimKey());
068                            dee.setOldName(duplicateArticle.getArticleId());
069                            dee.setTrashEntryId(trashEntry.getEntryId());
070    
071                            throw dee;
072                    }
073            }
074    
075            public void deleteTrashEntries(long[] classPKs, boolean checkPermission)
076                    throws PortalException, SystemException {
077    
078                    for (long classPK : classPKs) {
079                            JournalArticle article =
080                                    JournalArticleLocalServiceUtil.getLatestArticle(classPK);
081    
082                            if (checkPermission) {
083                                    JournalArticleServiceUtil.deleteArticle(
084                                            article.getGroupId(), article.getArticleId(), null, null);
085                            }
086                            else {
087                                    JournalArticleLocalServiceUtil.deleteArticle(
088                                            article.getGroupId(), article.getArticleId(), null);
089                            }
090                    }
091            }
092    
093            public String getClassName() {
094                    return CLASS_NAME;
095            }
096    
097            @Override
098            public String getRestoreLink(PortletRequest portletRequest, long classPK)
099                    throws PortalException, SystemException {
100    
101                    JournalArticle article =
102                            JournalArticleLocalServiceUtil.getLatestArticle(classPK);
103    
104                    return JournalUtil.getJournalControlPanelLink(
105                            portletRequest, article.getFolderId());
106            }
107    
108            @Override
109            public String getRestoreMessage(PortletRequest portletRequest, long classPK)
110                    throws PortalException, SystemException {
111    
112                    JournalArticle article =
113                            JournalArticleLocalServiceUtil.getLatestArticle(classPK);
114    
115                    return JournalUtil.getAbsolutePath(
116                            portletRequest, article.getFolderId());
117            }
118    
119            @Override
120            public TrashRenderer getTrashRenderer(long classPK)
121                    throws PortalException, SystemException {
122    
123                    JournalArticle article =
124                            JournalArticleLocalServiceUtil.getLatestArticle(classPK);
125    
126                    return new JournalArticleAssetRenderer(article);
127            }
128    
129            public boolean isInTrash(long classPK)
130                    throws PortalException, SystemException {
131    
132                    JournalArticle article =
133                            JournalArticleLocalServiceUtil.getLatestArticle(classPK);
134    
135                    return article.isInTrash();
136            }
137    
138            public void restoreTrashEntries(long[] classPKs)
139                    throws PortalException, SystemException {
140    
141                    for (long classPK : classPKs) {
142                            JournalArticleServiceUtil.restoreArticleFromTrash(classPK);
143                    }
144            }
145    
146            @Override
147            public void updateTitle(long classPK, String name)
148                    throws PortalException, SystemException {
149    
150                    JournalArticle article =
151                            JournalArticleLocalServiceUtil.getLatestArticle(classPK);
152    
153                    article.setArticleId(name);
154    
155                    JournalArticleLocalServiceUtil.updateJournalArticle(article);
156    
157                    JournalArticleResource articleResource =
158                            JournalArticleResourceLocalServiceUtil.getArticleResource(
159                                    article.getResourcePrimKey());
160    
161                    articleResource.setArticleId(name);
162    
163                    JournalArticleResourceLocalServiceUtil.updateJournalArticleResource(
164                            articleResource);
165            }
166    
167            @Override
168            protected boolean hasPermission(
169                            PermissionChecker permissionChecker, long classPK, String actionId)
170                    throws PortalException, SystemException {
171    
172                    return JournalArticlePermission.contains(
173                            permissionChecker, classPK, actionId);
174            }
175    
176    }