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.fetchWikiNode(
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 public void deleteTrashEntry(long classPK)
082 throws PortalException, SystemException {
083
084 WikiNodeLocalServiceUtil.deleteNode(classPK);
085 }
086
087 public String getClassName() {
088 return WikiNode.class.getName();
089 }
090
091 @Override
092 public String getRestoreLink(PortletRequest portletRequest, long classPK)
093 throws PortalException, SystemException {
094
095 String portletId = PortletKeys.WIKI;
096
097 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
098
099 long plid = PortalUtil.getPlidFromPortletId(
100 node.getGroupId(), PortletKeys.WIKI);
101
102 if (plid == LayoutConstants.DEFAULT_PLID) {
103 portletId = PortletKeys.WIKI_ADMIN;
104
105 plid = PortalUtil.getControlPanelPlid(portletRequest);
106 }
107
108 PortletURL portletURL = PortletURLFactoryUtil.create(
109 portletRequest, portletId, plid, PortletRequest.RENDER_PHASE);
110
111 return portletURL.toString();
112 }
113
114 @Override
115 public String getRestoreMessage(
116 PortletRequest portletRequest, long classPK) {
117
118 ThemeDisplay themeDisplay = (ThemeDisplay)portletRequest.getAttribute(
119 WebKeys.THEME_DISPLAY);
120
121 return themeDisplay.translate("wiki");
122 }
123
124 @Override
125 public String getTrashContainedModelName() {
126 return "wiki-pages";
127 }
128
129 @Override
130 public int getTrashContainedModelsCount(long classPK)
131 throws SystemException {
132
133 return WikiPageLocalServiceUtil.getPagesCount(classPK);
134 }
135
136 @Override
137 public List<TrashRenderer> getTrashContainedModelTrashRenderers(
138 long classPK, int start, int end)
139 throws PortalException, SystemException {
140
141 List<TrashRenderer> trashRenderers = new ArrayList<TrashRenderer>();
142
143 List<WikiPage> pages = WikiPageLocalServiceUtil.getPages(
144 classPK, start, end);
145
146 for (WikiPage page : pages) {
147 TrashHandler trashHandler =
148 TrashHandlerRegistryUtil.getTrashHandler(
149 WikiPage.class.getName());
150
151 TrashRenderer trashRenderer = trashHandler.getTrashRenderer(
152 page.getResourcePrimKey());
153
154 trashRenderers.add(trashRenderer);
155 }
156
157 return trashRenderers;
158 }
159
160 @Override
161 public TrashRenderer getTrashRenderer(long classPK)
162 throws PortalException, SystemException {
163
164 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
165
166 return new WikiNodeTrashRenderer(node);
167 }
168
169 @Override
170 public boolean isContainerModel() {
171 return true;
172 }
173
174 public boolean isInTrash(long classPK)
175 throws PortalException, SystemException {
176
177 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
178
179 return node.isInTrash();
180 }
181
182 public void restoreTrashEntry(long userId, long classPK)
183 throws PortalException, SystemException {
184
185 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
186
187 WikiNodeLocalServiceUtil.restoreNodeFromTrash(userId, node);
188 }
189
190 @Override
191 public void updateTitle(long classPK, String name)
192 throws PortalException, SystemException {
193
194 WikiNode node = WikiNodeLocalServiceUtil.getNode(classPK);
195
196 node.setName(name);
197
198 WikiNodeLocalServiceUtil.updateWikiNode(node);
199 }
200
201 @Override
202 protected boolean hasPermission(
203 PermissionChecker permissionChecker, long classPK, String actionId)
204 throws PortalException, SystemException {
205
206 return WikiNodePermission.contains(
207 permissionChecker, classPK, actionId);
208 }
209
210 }