001
014
015 package com.liferay.portlet.wiki.trash;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.trash.TrashHandler;
019 import com.liferay.portal.kernel.trash.TrashHandlerRegistryUtil;
020 import com.liferay.portal.kernel.trash.TrashRenderer;
021 import com.liferay.portal.kernel.util.Validator;
022 import com.liferay.portal.kernel.util.WebKeys;
023 import com.liferay.portal.kernel.workflow.WorkflowConstants;
024 import com.liferay.portal.model.LayoutConstants;
025 import com.liferay.portal.security.permission.PermissionChecker;
026 import com.liferay.portal.theme.ThemeDisplay;
027 import com.liferay.portal.util.PortalUtil;
028 import com.liferay.portal.util.PortletKeys;
029 import com.liferay.portlet.PortletURLFactoryUtil;
030 import com.liferay.portlet.trash.RestoreEntryException;
031 import com.liferay.portlet.trash.model.TrashEntry;
032 import com.liferay.portlet.wiki.asset.WikiNodeTrashRenderer;
033 import com.liferay.portlet.wiki.model.WikiNode;
034 import com.liferay.portlet.wiki.model.WikiPage;
035 import com.liferay.portlet.wiki.service.WikiNodeLocalServiceUtil;
036 import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
037 import com.liferay.portlet.wiki.service.permission.WikiNodePermission;
038
039 import java.util.ArrayList;
040 import java.util.List;
041
042 import javax.portlet.PortletRequest;
043 import javax.portlet.PortletURL;
044
045
051 public class WikiNodeTrashHandler extends BaseWikiTrashHandler {
052
053 @Override
054 public void checkRestorableEntry(
055 TrashEntry trashEntry, long containerModelId, String newName)
056 throws PortalException {
057
058 WikiNode node = WikiNodeLocalServiceUtil.getNode(
059 trashEntry.getClassPK());
060
061 String originalTitle = trashEntry.getTypeSettingsProperty("title");
062
063 if (Validator.isNotNull(newName)) {
064 originalTitle = newName;
065 }
066
067 WikiNode duplicateNode = WikiNodeLocalServiceUtil.fetchNode(
068 node.getGroupId(), originalTitle);
069
070 if (duplicateNode != null) {
071 RestoreEntryException ree = new RestoreEntryException(
072 RestoreEntryException.DUPLICATE);
073
074 ree.setDuplicateEntryId(duplicateNode.getNodeId());
075 ree.setOldName(duplicateNode.getName());
076 ree.setTrashEntryId(trashEntry.getEntryId());
077
078 throw ree;
079 }
080 }
081
082 @Override
083 public void deleteTrashEntry(long classPK) throws PortalException {
084 WikiNodeLocalServiceUtil.deleteNode(classPK);
085 }
086
087 @Override
088 public String getClassName() {
089 return WikiNode.class.getName();
090 }
091
092 @Override
093 public String getRestoreContainedModelLink(
094 PortletRequest portletRequest, long classPK)
095 throws PortalException {
096
097 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
098
099 PortletURL portletURL = getRestoreURL(portletRequest, classPK, false);
100
101 portletURL.setParameter("nodeId", String.valueOf(node.getNodeId()));
102
103 return portletURL.toString();
104 }
105
106 @Override
107 public String getRestoreContainerModelLink(
108 PortletRequest portletRequest, long classPK)
109 throws PortalException {
110
111 PortletURL portletURL = getRestoreURL(portletRequest, classPK, true);
112
113 return portletURL.toString();
114 }
115
116 @Override
117 public String getRestoreMessage(
118 PortletRequest portletRequest, long classPK) {
119
120 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
121 WebKeys.THEME_DISPLAY);
122
123 return themeDisplay.translate("wiki");
124 }
125
126 @Override
127 public String getTrashContainedModelName() {
128 return "wiki-pages";
129 }
130
131 @Override
132 public int getTrashContainedModelsCount(long classPK) {
133 return WikiPageLocalServiceUtil.getPagesCount(
134 classPK, true, WorkflowConstants.STATUS_IN_TRASH);
135 }
136
137 @Override
138 public List<TrashRenderer> getTrashContainedModelTrashRenderers(
139 long classPK, int start, int end)
140 throws PortalException {
141
142 List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
143
144 List<WikiPage> pages = WikiPageLocalServiceUtil.getPages(
145 classPK, true, WorkflowConstants.STATUS_IN_TRASH, start, end);
146
147 for (WikiPage page : pages) {
148 WikiPage redirectPage = page.getRedirectPage();
149
150 if ((redirectPage != null) && redirectPage.isInTrash()) {
151 continue;
152 }
153
154 TrashHandler trashHandler =
155 TrashHandlerRegistryUtil.getTrashHandler(
156 WikiPage.class.getName());
157
158 TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
159 page.getResourcePrimKey());
160
161 trashRenderers.add(trashRenderer);
162 }
163
164 return trashRenderers;
165 }
166
167 @Override
168 public TrashEntry getTrashEntry(long classPK) throws PortalException {
169 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
170
171 return node.getTrashEntry();
172 }
173
174 @Override
175 public TrashRenderer getTrashRenderer(long classPK) throws PortalException {
176 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
177
178 return new WikiNodeTrashRenderer(node);
179 }
180
181 @Override
182 public boolean isContainerModel() {
183 return true;
184 }
185
186 @Override
187 public boolean isInTrash(long classPK) throws PortalException {
188 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
189
190 return node.isInTrash();
191 }
192
193 @Override
194 public void restoreTrashEntry(long userId, long classPK)
195 throws PortalException {
196
197 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
198
199 WikiNodeLocalServiceUtil.restoreNodeFromTrash(userId, node);
200 }
201
202 @Override
203 public void updateTitle(long classPK, String name) throws PortalException {
204 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
205
206 node.setName(name);
207
208 WikiNodeLocalServiceUtil.updateWikiNode(node);
209 }
210
211 protected PortletURL getRestoreURL(
212 PortletRequest portletRequest, long classPK,
213 boolean isContainerModel)
214 throws PortalException {
215
216 String portletId = PortletKeys.WIKI;
217
218 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
219
220 long plid = PortalUtil.getPlidFromPortletId(
221 node.getGroupId(), PortletKeys.WIKI);
222
223 if (plid == LayoutConstants.DEFAULT_PLID) {
224 portletId = PortletKeys.WIKI_ADMIN;
225
226 plid = PortalUtil.getControlPanelPlid(portletRequest);
227 }
228
229 PortletURL portletURL = PortletURLFactoryUtil.create(
230 portletRequest, portletId, plid, PortletRequest.RENDER_PHASE);
231
232 if (!isContainerModel) {
233 if (portletId.equals(PortletKeys.WIKI)) {
234 portletURL.setParameter(
235 "struts_action", "/wiki/view_all_pages");
236 }
237 else {
238 portletURL.setParameter(
239 "struts_action", "/wiki_admin/view_all_pages");
240 }
241 }
242
243 return portletURL;
244 }
245
246 @Override
247 protected boolean hasPermission(
248 PermissionChecker permissionChecker, long classPK, String actionId)
249 throws PortalException {
250
251 return WikiNodePermission.contains(
252 permissionChecker, classPK, actionId);
253 }
254
255 }