001
014
015 package com.liferay.portlet.documentlibrary.lar;
016
017 import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
019 import com.liferay.portal.kernel.dao.orm.Property;
020 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
021 import com.liferay.portal.kernel.exception.PortalException;
022 import com.liferay.portal.kernel.exception.SystemException;
023 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
024 import com.liferay.portal.kernel.lar.ExportImportPathUtil;
025 import com.liferay.portal.kernel.lar.PortletDataContext;
026 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
027 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
028 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
029 import com.liferay.portal.kernel.lar.StagedModelType;
030 import com.liferay.portal.kernel.repository.model.FileEntry;
031 import com.liferay.portal.kernel.repository.model.Folder;
032 import com.liferay.portal.kernel.util.GetterUtil;
033 import com.liferay.portal.kernel.util.MapUtil;
034 import com.liferay.portal.kernel.xml.Element;
035 import com.liferay.portal.model.Portlet;
036 import com.liferay.portal.service.PortletLocalServiceUtil;
037 import com.liferay.portal.util.PropsValues;
038 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
039 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
040 import com.liferay.portlet.documentlibrary.model.DLFileRank;
041 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
042 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
043 import com.liferay.portlet.documentlibrary.model.DLFolder;
044 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
045 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
046 import com.liferay.portlet.documentlibrary.service.permission.DLPermission;
047 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryExportActionableDynamicQuery;
048 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryTypeExportActionableDynamicQuery;
049 import com.liferay.portlet.documentlibrary.service.persistence.DLFileShortcutExportActionableDynamicQuery;
050 import com.liferay.portlet.documentlibrary.service.persistence.DLFolderExportActionableDynamicQuery;
051
052 import java.util.List;
053 import java.util.Map;
054
055 import javax.portlet.PortletPreferences;
056
057
064 public class DLPortletDataHandler extends BasePortletDataHandler {
065
066 public static final String NAMESPACE = "document_library";
067
068 public DLPortletDataHandler() {
069 setDataLocalized(true);
070 setDataPortletPreferences("rootFolderId");
071 setDeletionSystemEventStagedModelTypes(
072 new StagedModelType(DLFileEntryType.class),
073 new StagedModelType(DLFileRank.class),
074 new StagedModelType(DLFileShortcut.class),
075 new StagedModelType(FileEntry.class),
076 new StagedModelType(Folder.class));
077 setExportControls(
078 new PortletDataHandlerBoolean(
079 NAMESPACE, "documents", true, false,
080 new PortletDataHandlerControl[] {
081 new PortletDataHandlerBoolean(
082 NAMESPACE, "previews-and-thumbnails")
083 },
084 FileEntry.class.getName()),
085 new PortletDataHandlerBoolean(
086 NAMESPACE, "shortcuts", true, false, null,
087 DLFileShortcut.class.getName()));
088 setPublishToLiveByDefault(PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT);
089 }
090
091 @Override
092 protected PortletPreferences doDeleteData(
093 PortletDataContext portletDataContext, String portletId,
094 PortletPreferences portletPreferences)
095 throws Exception {
096
097 if (portletDataContext.addPrimaryKey(
098 DLPortletDataHandler.class, "deleteData")) {
099
100 return portletPreferences;
101 }
102
103 DLAppLocalServiceUtil.deleteAll(portletDataContext.getScopeGroupId());
104
105 return portletPreferences;
106 }
107
108 @Override
109 protected String doExportData(
110 final PortletDataContext portletDataContext, String portletId,
111 PortletPreferences portletPreferences)
112 throws Exception {
113
114 portletDataContext.addPermissions(
115 DLPermission.RESOURCE_NAME, portletDataContext.getScopeGroupId());
116
117 Element rootElement = addExportDataRootElement(portletDataContext);
118
119 rootElement.addAttribute(
120 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
121
122 if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
123 ActionableDynamicQuery fileEntryTypeActionableDynamicQuery =
124 getDLFileEntryTypeActionableDynamicQuery(portletDataContext);
125
126 fileEntryTypeActionableDynamicQuery.performActions();
127
128 ActionableDynamicQuery folderActionableDynamicQuery =
129 getFolderActionableDynamicQuery(portletDataContext);
130
131 folderActionableDynamicQuery.performActions();
132
133 ActionableDynamicQuery fileEntryActionableDynamicQuery =
134 getFileEntryActionableDynamicQuery(portletDataContext);
135
136 fileEntryActionableDynamicQuery.performActions();
137 }
138
139 if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
140 ActionableDynamicQuery fileShortcutActionableDynamicQuery =
141 getDLFileShortcutActionableDynamicQuery(portletDataContext);
142
143 fileShortcutActionableDynamicQuery.performActions();
144 }
145
146 return getExportDataRootElementString(rootElement);
147 }
148
149 @Override
150 protected PortletPreferences doImportData(
151 PortletDataContext portletDataContext, String portletId,
152 PortletPreferences portletPreferences, String data)
153 throws Exception {
154
155 portletDataContext.importPermissions(
156 DLPermission.RESOURCE_NAME, portletDataContext.getSourceGroupId(),
157 portletDataContext.getScopeGroupId());
158
159 Element fileEntryTypesElement =
160 portletDataContext.getImportDataGroupElement(DLFileEntryType.class);
161
162 List<Element> fileEntryTypeElements = fileEntryTypesElement.elements();
163
164 for (Element fileEntryTypeElement : fileEntryTypeElements) {
165 StagedModelDataHandlerUtil.importStagedModel(
166 portletDataContext, fileEntryTypeElement);
167 }
168
169 if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
170 Element foldersElement =
171 portletDataContext.getImportDataGroupElement(Folder.class);
172
173 List<Element> folderElements = foldersElement.elements();
174
175 for (Element folderElement : folderElements) {
176 StagedModelDataHandlerUtil.importStagedModel(
177 portletDataContext, folderElement);
178 }
179
180 Element fileEntriesElement =
181 portletDataContext.getImportDataGroupElement(FileEntry.class);
182
183 List<Element> fileEntryElements = fileEntriesElement.elements();
184
185 for (Element fileEntryElement : fileEntryElements) {
186 StagedModelDataHandlerUtil.importStagedModel(
187 portletDataContext, fileEntryElement);
188 }
189 }
190
191 if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
192 Element fileShortcutsElement =
193 portletDataContext.getImportDataGroupElement(
194 DLFileShortcut.class);
195
196 List<Element> fileShortcutElements =
197 fileShortcutsElement.elements();
198
199 for (Element fileShortcutElement : fileShortcutElements) {
200 StagedModelDataHandlerUtil.importStagedModel(
201 portletDataContext, fileShortcutElement);
202 }
203 }
204
205 return portletPreferences;
206 }
207
208 @Override
209 protected void doPrepareManifestSummary(
210 final PortletDataContext portletDataContext,
211 PortletPreferences portletPreferences)
212 throws Exception {
213
214 ActionableDynamicQuery dlFileShortcutActionableDynamicQuery =
215 getDLFileShortcutActionableDynamicQuery(portletDataContext);
216
217 dlFileShortcutActionableDynamicQuery.performCount();
218
219 ActionableDynamicQuery fileEntryActionableDynamicQuery =
220 getFileEntryActionableDynamicQuery(portletDataContext);
221
222 fileEntryActionableDynamicQuery.performCount();
223
224 ActionableDynamicQuery folderActionableDynamicQuery =
225 getFolderActionableDynamicQuery(portletDataContext);
226
227 folderActionableDynamicQuery.performCount();
228 }
229
230 @Override
231 protected PortletPreferences doProcessExportPortletPreferences(
232 PortletDataContext portletDataContext, String portletId,
233 PortletPreferences portletPreferences, Element rootElement)
234 throws Exception {
235
236 long rootFolderId = GetterUtil.getLong(
237 portletPreferences.getValue("rootFolderId", null));
238
239 if (rootFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
240 Folder folder = DLAppLocalServiceUtil.getFolder(rootFolderId);
241
242 Portlet portlet = PortletLocalServiceUtil.getPortletById(
243 portletDataContext.getCompanyId(), portletId);
244
245 portletDataContext.addReferenceElement(
246 portlet, rootElement, folder, Folder.class,
247 PortletDataContext.REFERENCE_TYPE_DEPENDENCY,
248 !portletDataContext.getBooleanParameter(
249 NAMESPACE, "documents"));
250 }
251
252 return portletPreferences;
253 }
254
255 @Override
256 protected PortletPreferences doProcessImportPortletPreferences(
257 PortletDataContext portletDataContext, String portletId,
258 PortletPreferences portletPreferences)
259 throws Exception {
260
261 long rootFolderId = GetterUtil.getLong(
262 portletPreferences.getValue("rootFolderId", null));
263
264 if (rootFolderId > 0) {
265 String rootFolderPath = ExportImportPathUtil.getModelPath(
266 portletDataContext, Folder.class.getName(), rootFolderId);
267
268 Folder folder = (Folder)portletDataContext.getZipEntryAsObject(
269 rootFolderPath);
270
271 StagedModelDataHandlerUtil.importStagedModel(
272 portletDataContext, folder);
273
274 Map<Long, Long> folderIds =
275 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
276 Folder.class);
277
278 rootFolderId = MapUtil.getLong(
279 folderIds, rootFolderId, rootFolderId);
280
281 portletPreferences.setValue(
282 "rootFolderId", String.valueOf(rootFolderId));
283 }
284
285 return portletPreferences;
286 }
287
288 protected ActionableDynamicQuery getDLFileEntryTypeActionableDynamicQuery(
289 final PortletDataContext portletDataContext)
290 throws Exception {
291
292 return new DLFileEntryTypeExportActionableDynamicQuery(
293 portletDataContext) {
294
295 @Override
296 protected void addCriteria(DynamicQuery dynamicQuery) {
297 super.addCriteria(dynamicQuery);
298
299 Property property = PropertyFactoryUtil.forName("groupId");
300
301 dynamicQuery.add(
302 property.in(
303 new Long[] {
304 portletDataContext.getScopeGroupId()
305 }));
306 }
307
308 @Override
309 protected void performAction(Object object) throws PortalException {
310 DLFileEntryType dlFileEntryType = (DLFileEntryType)object;
311
312 if (dlFileEntryType.isExportable()) {
313 StagedModelDataHandlerUtil.exportStagedModel(
314 portletDataContext, dlFileEntryType);
315 }
316 }
317
318 };
319 }
320
321 protected ActionableDynamicQuery getDLFileShortcutActionableDynamicQuery(
322 final PortletDataContext portletDataContext)
323 throws Exception {
324
325 return new DLFileShortcutExportActionableDynamicQuery(
326 portletDataContext) {
327
328 @Override
329 protected void addCriteria(DynamicQuery dynamicQuery) {
330 super.addCriteria(dynamicQuery);
331
332 Property property = PropertyFactoryUtil.forName("active");
333
334 dynamicQuery.add(property.eq(Boolean.TRUE));
335 }
336
337 };
338 }
339
340 protected ActionableDynamicQuery getFileEntryActionableDynamicQuery(
341 final PortletDataContext portletDataContext)
342 throws Exception {
343
344 return new DLFileEntryExportActionableDynamicQuery(portletDataContext) {
345
346 @Override
347 protected void addCriteria(DynamicQuery dynamicQuery) {
348 super.addCriteria(dynamicQuery);
349
350 Property property = PropertyFactoryUtil.forName("repositoryId");
351
352 dynamicQuery.add(
353 property.eq(portletDataContext.getScopeGroupId()));
354 }
355
356 @Override
357 protected StagedModelType getStagedModelType() {
358 return new StagedModelType(FileEntry.class);
359 }
360
361 @Override
362 protected void performAction(Object object)
363 throws PortalException, SystemException {
364
365 DLFileEntry dlFileEntry = (DLFileEntry)object;
366
367 DLFileVersion dlFileVersion = dlFileEntry.getFileVersion();
368
369 if (dlFileVersion.isInTrash() ||
370 dlFileEntry.isInTrashContainer()) {
371
372 return;
373 }
374
375 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
376 dlFileEntry.getFileEntryId());
377
378 StagedModelDataHandlerUtil.exportStagedModel(
379 portletDataContext, fileEntry);
380 }
381
382 };
383 }
384
385 protected ActionableDynamicQuery getFolderActionableDynamicQuery(
386 final PortletDataContext portletDataContext)
387 throws Exception {
388
389 return new DLFolderExportActionableDynamicQuery(portletDataContext) {
390
391 @Override
392 protected void addCriteria(DynamicQuery dynamicQuery) {
393 super.addCriteria(dynamicQuery);
394
395 Property property = PropertyFactoryUtil.forName("repositoryId");
396
397 dynamicQuery.add(
398 property.eq(portletDataContext.getScopeGroupId()));
399 }
400
401 @Override
402 protected StagedModelType getStagedModelType() {
403 return new StagedModelType(Folder.class);
404 }
405
406 @Override
407 protected void performAction(Object object)
408 throws PortalException, SystemException {
409
410 DLFolder dlFolder = (DLFolder)object;
411
412 if (dlFolder.isInTrash() || dlFolder.isInTrashContainer()) {
413 return;
414 }
415
416 Folder folder = DLAppLocalServiceUtil.getFolder(
417 dlFolder.getFolderId());
418
419 StagedModelDataHandlerUtil.exportStagedModel(
420 portletDataContext, folder);
421 }
422
423 };
424 }
425
426 }