001
014
015 package com.liferay.portlet.documentlibrary.trash;
016
017 import com.liferay.portal.InvalidRepositoryException;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.repository.Repository;
020 import com.liferay.portal.kernel.repository.RepositoryProviderUtil;
021 import com.liferay.portal.kernel.repository.capabilities.TrashCapability;
022 import com.liferay.portal.kernel.repository.model.FileShortcut;
023 import com.liferay.portal.kernel.repository.model.Folder;
024 import com.liferay.portal.kernel.trash.TrashActionKeys;
025 import com.liferay.portal.model.ContainerModel;
026 import com.liferay.portal.model.TrashedModel;
027 import com.liferay.portal.security.permission.ActionKeys;
028 import com.liferay.portal.security.permission.PermissionChecker;
029 import com.liferay.portal.service.ServiceContext;
030 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
031 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
032 import com.liferay.portlet.documentlibrary.model.DLFileShortcutConstants;
033 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
034 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
035 import com.liferay.portlet.documentlibrary.service.permission.DLFileShortcutPermission;
036 import com.liferay.portlet.documentlibrary.service.permission.DLFolderPermission;
037 import com.liferay.portlet.documentlibrary.util.DLUtil;
038 import com.liferay.portlet.trash.model.TrashEntry;
039
040 import javax.portlet.PortletRequest;
041
042
047 public class DLFileShortcutTrashHandler extends DLBaseTrashHandler {
048
049 @Override
050 public void deleteTrashEntry(long classPK) throws PortalException {
051 DLAppLocalServiceUtil.deleteFileShortcut(classPK);
052 }
053
054 @Override
055 public String getClassName() {
056 return DLFileShortcutConstants.getClassName();
057 }
058
059 @Override
060 public ContainerModel getParentContainerModel(long classPK)
061 throws PortalException {
062
063 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
064
065 long parentFolderId = dlFileShortcut.getFolderId();
066
067 if (parentFolderId <= 0) {
068 return null;
069 }
070
071 return getContainerModel(parentFolderId);
072 }
073
074 @Override
075 public ContainerModel getParentContainerModel(TrashedModel trashedModel)
076 throws PortalException {
077
078 DLFileShortcut dlFileShortcut = (DLFileShortcut)trashedModel;
079
080 return getContainerModel(dlFileShortcut.getFolderId());
081 }
082
083 @Override
084 public String getRestoreContainedModelLink(
085 PortletRequest portletRequest, long classPK)
086 throws PortalException {
087
088 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
089
090 return DLUtil.getDLFileEntryControlPanelLink(
091 portletRequest, dlFileShortcut.getToFileEntryId());
092 }
093
094 @Override
095 public String getRestoreContainerModelLink(
096 PortletRequest portletRequest, long classPK)
097 throws PortalException {
098
099 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
100
101 return DLUtil.getDLFolderControlPanelLink(
102 portletRequest, dlFileShortcut.getFolderId());
103 }
104
105 @Override
106 public String getRestoreMessage(PortletRequest portletRequest, long classPK)
107 throws PortalException {
108
109 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
110
111 return DLUtil.getAbsolutePath(
112 portletRequest, dlFileShortcut.getFolderId());
113 }
114
115 @Override
116 public TrashEntry getTrashEntry(long classPK) throws PortalException {
117 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
118
119 return dlFileShortcut.getTrashEntry();
120 }
121
122 @Override
123 public boolean hasTrashPermission(
124 PermissionChecker permissionChecker, long groupId, long classPK,
125 String trashActionId)
126 throws PortalException {
127
128 if (trashActionId.equals(TrashActionKeys.MOVE)) {
129 return DLFolderPermission.contains(
130 permissionChecker, groupId, classPK, ActionKeys.ADD_SHORTCUT);
131 }
132
133 return super.hasTrashPermission(
134 permissionChecker, groupId, classPK, trashActionId);
135 }
136
137 @Override
138 public boolean isInTrash(long classPK) throws PortalException {
139 try {
140 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
141
142 return dlFileShortcut.isInTrash();
143 }
144 catch (InvalidRepositoryException ire) {
145 return false;
146 }
147 }
148
149 @Override
150 public boolean isInTrashContainer(long classPK) throws PortalException {
151 try {
152 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
153
154 return dlFileShortcut.isInTrashContainer();
155 }
156 catch (InvalidRepositoryException ire) {
157 return false;
158 }
159 }
160
161 @Override
162 public boolean isRestorable(long classPK) throws PortalException {
163 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
164
165 try {
166 dlFileShortcut.getFolder();
167 }
168 catch (NoSuchFolderException nsfe) {
169 return false;
170 }
171
172 return !dlFileShortcut.isInTrashContainer();
173 }
174
175 @Override
176 public void moveEntry(
177 long userId, long classPK, long containerModelId,
178 ServiceContext serviceContext)
179 throws PortalException {
180
181 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
182
183 DLAppLocalServiceUtil.updateFileShortcut(
184 userId, classPK, containerModelId,
185 dlFileShortcut.getToFileEntryId(), serviceContext);
186 }
187
188 @Override
189 public void moveTrashEntry(
190 long userId, long classPK, long containerModelId,
191 ServiceContext serviceContext)
192 throws PortalException {
193
194 Repository repository = getRepository(classPK);
195
196 TrashCapability trashCapability = repository.getCapability(
197 TrashCapability.class);
198
199 Folder newFolder = null;
200
201 if (containerModelId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
202 newFolder = repository.getFolder(containerModelId);
203 }
204
205 FileShortcut fileShortcut = repository.getFileShortcut(classPK);
206
207 trashCapability.moveFileShortcutFromTrash(
208 userId, fileShortcut, newFolder, serviceContext);
209 }
210
211 @Override
212 public void restoreTrashEntry(long userId, long classPK)
213 throws PortalException {
214
215 Repository repository = getRepository(classPK);
216
217 TrashCapability trashCapability = repository.getCapability(
218 TrashCapability.class);
219
220 FileShortcut fileShortcut = repository.getFileShortcut(classPK);
221
222 trashCapability.restoreFileShortcutFromTrash(userId, fileShortcut);
223 }
224
225 protected DLFileShortcut getDLFileShortcut(long classPK)
226 throws PortalException {
227
228 Repository repository =
229 RepositoryProviderUtil.getFileShortcutRepository(classPK);
230
231 if (!repository.isCapabilityProvided(TrashCapability.class)) {
232 throw new InvalidRepositoryException(
233 "Repository " + repository.getRepositoryId() +
234 " does not support trash operations");
235 }
236
237 FileShortcut fileShortcut = repository.getFileShortcut(classPK);
238
239 return (DLFileShortcut)fileShortcut.getModel();
240 }
241
242 @Override
243 protected Repository getRepository(long classPK) throws PortalException {
244 Repository repository =
245 RepositoryProviderUtil.getFileShortcutRepository(classPK);
246
247 if (!repository.isCapabilityProvided(TrashCapability.class)) {
248 throw new InvalidRepositoryException(
249 "Repository " + repository.getRepositoryId() +
250 " does not support trash operations");
251 }
252
253 return repository;
254 }
255
256 @Override
257 protected boolean hasPermission(
258 PermissionChecker permissionChecker, long classPK, String actionId)
259 throws PortalException {
260
261 DLFileShortcut dlFileShortcut = getDLFileShortcut(classPK);
262
263 if (dlFileShortcut.isInHiddenFolder() &&
264 actionId.equals(ActionKeys.VIEW)) {
265
266 return false;
267 }
268
269 return DLFileShortcutPermission.contains(
270 permissionChecker, classPK, actionId);
271 }
272
273 }