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