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.Disjunction;
019 import com.liferay.portal.kernel.dao.orm.DynamicQuery;
020 import com.liferay.portal.kernel.dao.orm.Property;
021 import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
022 import com.liferay.portal.kernel.dao.orm.QueryDefinition;
023 import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
024 import com.liferay.portal.kernel.exception.PortalException;
025 import com.liferay.portal.kernel.exception.SystemException;
026 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
027 import com.liferay.portal.kernel.lar.ExportImportHelperUtil;
028 import com.liferay.portal.kernel.lar.ManifestSummary;
029 import com.liferay.portal.kernel.lar.PortletDataContext;
030 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
031 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
032 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
033 import com.liferay.portal.kernel.lar.StagedModelType;
034 import com.liferay.portal.kernel.repository.model.FileEntry;
035 import com.liferay.portal.kernel.repository.model.Folder;
036 import com.liferay.portal.kernel.util.GetterUtil;
037 import com.liferay.portal.kernel.util.MapUtil;
038 import com.liferay.portal.kernel.util.StringPool;
039 import com.liferay.portal.kernel.workflow.WorkflowConstants;
040 import com.liferay.portal.kernel.xml.Element;
041 import com.liferay.portal.model.Repository;
042 import com.liferay.portal.repository.liferayrepository.LiferayRepository;
043 import com.liferay.portal.service.persistence.RepositoryExportActionableDynamicQuery;
044 import com.liferay.portal.util.PortalUtil;
045 import com.liferay.portal.util.PropsValues;
046 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
047 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
048 import com.liferay.portlet.documentlibrary.model.DLFileRank;
049 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
050 import com.liferay.portlet.documentlibrary.model.DLFolder;
051 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
052 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
053 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
054 import com.liferay.portlet.documentlibrary.service.permission.DLPermission;
055 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryExportActionableDynamicQuery;
056 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryTypeExportActionableDynamicQuery;
057 import com.liferay.portlet.documentlibrary.service.persistence.DLFileShortcutExportActionableDynamicQuery;
058 import com.liferay.portlet.documentlibrary.service.persistence.DLFolderExportActionableDynamicQuery;
059
060 import java.util.List;
061 import java.util.Map;
062
063 import javax.portlet.PortletPreferences;
064
065
072 public class DLPortletDataHandler extends BasePortletDataHandler {
073
074 public static final String NAMESPACE = "document_library";
075
076 public DLPortletDataHandler() {
077 setDataLocalized(true);
078 setDataPortletPreferences("rootFolderId");
079 setDeletionSystemEventStagedModelTypes(
080 new StagedModelType(DLFileEntryType.class),
081 new StagedModelType(DLFileRank.class),
082 new StagedModelType(DLFileShortcut.class),
083 new StagedModelType(FileEntry.class),
084 new StagedModelType(Folder.class),
085 new StagedModelType(Repository.class));
086 setExportControls(
087 new PortletDataHandlerBoolean(
088 NAMESPACE, "repositories", false, false, null,
089 Repository.class.getName()),
090 new PortletDataHandlerBoolean(
091 NAMESPACE, "folders", true, false, null,
092 Folder.class.getName()),
093 new PortletDataHandlerBoolean(
094 NAMESPACE, "documents", true, false,
095 new PortletDataHandlerControl[] {
096 new PortletDataHandlerBoolean(
097 NAMESPACE, "previews-and-thumbnails")
098 },
099 FileEntry.class.getName()),
100 new PortletDataHandlerBoolean(
101 NAMESPACE, "shortcuts", true, false, null,
102 DLFileShortcut.class.getName()));
103 setPublishToLiveByDefault(PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT);
104 }
105
106 @Override
107 protected PortletPreferences doDeleteData(
108 PortletDataContext portletDataContext, String portletId,
109 PortletPreferences portletPreferences)
110 throws Exception {
111
112 if (portletDataContext.addPrimaryKey(
113 DLPortletDataHandler.class, "deleteData")) {
114
115 return portletPreferences;
116 }
117
118 DLAppLocalServiceUtil.deleteAll(portletDataContext.getScopeGroupId());
119
120 return portletPreferences;
121 }
122
123 @Override
124 protected String doExportData(
125 final PortletDataContext portletDataContext, String portletId,
126 PortletPreferences portletPreferences)
127 throws Exception {
128
129 portletDataContext.addPortletPermissions(DLPermission.RESOURCE_NAME);
130
131 Element rootElement = addExportDataRootElement(portletDataContext);
132
133 rootElement.addAttribute(
134 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
135
136 if (portletDataContext.getBooleanParameter(NAMESPACE, "folders")) {
137 ActionableDynamicQuery folderActionableDynamicQuery =
138 getFolderActionableDynamicQuery(portletDataContext);
139
140 folderActionableDynamicQuery.performActions();
141 }
142
143 if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
144 ActionableDynamicQuery fileEntryTypeActionableDynamicQuery =
145 getDLFileEntryTypeActionableDynamicQuery(portletDataContext);
146
147 fileEntryTypeActionableDynamicQuery.performActions();
148
149 ActionableDynamicQuery fileEntryActionableDynamicQuery =
150 getFileEntryActionableDynamicQuery(portletDataContext);
151
152 fileEntryActionableDynamicQuery.performActions();
153 }
154
155 if (portletDataContext.getBooleanParameter(NAMESPACE, "repositories")) {
156 ActionableDynamicQuery repositoryActionableDynamicQuery =
157 getRepositoryActionableDynamicQuery(portletDataContext);
158
159 repositoryActionableDynamicQuery.performActions();
160 }
161
162 if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
163 ActionableDynamicQuery fileShortcutActionableDynamicQuery =
164 getDLFileShortcutActionableDynamicQuery(portletDataContext);
165
166 fileShortcutActionableDynamicQuery.performActions();
167 }
168
169 return getExportDataRootElementString(rootElement);
170 }
171
172 @Override
173 protected PortletPreferences doImportData(
174 PortletDataContext portletDataContext, String portletId,
175 PortletPreferences portletPreferences, String data)
176 throws Exception {
177
178 portletDataContext.importPortletPermissions(DLPermission.RESOURCE_NAME);
179
180 Element fileEntryTypesElement =
181 portletDataContext.getImportDataGroupElement(DLFileEntryType.class);
182
183 List<Element> fileEntryTypeElements = fileEntryTypesElement.elements();
184
185 for (Element fileEntryTypeElement : fileEntryTypeElements) {
186 StagedModelDataHandlerUtil.importStagedModel(
187 portletDataContext, fileEntryTypeElement);
188 }
189
190 if (portletDataContext.getBooleanParameter(NAMESPACE, "folders")) {
191 Element foldersElement =
192 portletDataContext.getImportDataGroupElement(Folder.class);
193
194 List<Element> folderElements = foldersElement.elements();
195
196 for (Element folderElement : folderElements) {
197 StagedModelDataHandlerUtil.importStagedModel(
198 portletDataContext, folderElement);
199 }
200 }
201
202 if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
203 Element fileEntriesElement =
204 portletDataContext.getImportDataGroupElement(FileEntry.class);
205
206 List<Element> fileEntryElements = fileEntriesElement.elements();
207
208 for (Element fileEntryElement : fileEntryElements) {
209 StagedModelDataHandlerUtil.importStagedModel(
210 portletDataContext, fileEntryElement);
211 }
212 }
213
214 if (portletDataContext.getBooleanParameter(NAMESPACE, "repositories")) {
215 Element repositoriesElement =
216 portletDataContext.getImportDataGroupElement(Repository.class);
217
218 List<Element> repositoryElements = repositoriesElement.elements();
219
220 for (Element repositoryElement : repositoryElements) {
221 StagedModelDataHandlerUtil.importStagedModel(
222 portletDataContext, repositoryElement);
223 }
224 }
225
226 if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
227 Element fileShortcutsElement =
228 portletDataContext.getImportDataGroupElement(
229 DLFileShortcut.class);
230
231 List<Element> fileShortcutElements =
232 fileShortcutsElement.elements();
233
234 for (Element fileShortcutElement : fileShortcutElements) {
235 StagedModelDataHandlerUtil.importStagedModel(
236 portletDataContext, fileShortcutElement);
237 }
238 }
239
240 return portletPreferences;
241 }
242
243 @Override
244 protected void doPrepareManifestSummary(
245 final PortletDataContext portletDataContext,
246 PortletPreferences portletPreferences)
247 throws Exception {
248
249 ActionableDynamicQuery dlFileShortcutActionableDynamicQuery =
250 getDLFileShortcutActionableDynamicQuery(portletDataContext);
251
252 dlFileShortcutActionableDynamicQuery.performCount();
253
254 ActionableDynamicQuery fileEntryActionableDynamicQuery =
255 getFileEntryActionableDynamicQuery(portletDataContext);
256
257 fileEntryActionableDynamicQuery.performCount();
258
259 ActionableDynamicQuery folderActionableDynamicQuery =
260 getFolderActionableDynamicQuery(portletDataContext);
261
262 folderActionableDynamicQuery.performCount();
263
264 ActionableDynamicQuery repositoryActionableDynamicQuery =
265 getRepositoryActionableDynamicQuery(portletDataContext);
266
267 repositoryActionableDynamicQuery.performCount();
268 }
269
270 @Override
271 protected PortletPreferences doProcessExportPortletPreferences(
272 PortletDataContext portletDataContext, String portletId,
273 PortletPreferences portletPreferences)
274 throws Exception {
275
276 long rootFolderId = GetterUtil.getLong(
277 portletPreferences.getValue("rootFolderId", null));
278
279 if (rootFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
280 Folder folder = DLAppLocalServiceUtil.getFolder(rootFolderId);
281
282 StagedModelDataHandlerUtil.exportReferenceStagedModel(
283 portletDataContext, portletId, folder);
284 }
285
286 return portletPreferences;
287 }
288
289 @Override
290 protected PortletPreferences doProcessImportPortletPreferences(
291 PortletDataContext portletDataContext, String portletId,
292 PortletPreferences portletPreferences)
293 throws Exception {
294
295 long rootFolderId = GetterUtil.getLong(
296 portletPreferences.getValue("rootFolderId", null));
297
298 if (rootFolderId > 0) {
299 Element foldersElement =
300 portletDataContext.getImportDataGroupElement(Folder.class);
301
302 List<Element> folderElements = foldersElement.elements();
303
304 if (!folderElements.isEmpty()) {
305 StagedModelDataHandlerUtil.importStagedModel(
306 portletDataContext, folderElements.get(0));
307
308 Map<Long, Long> folderIds =
309 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
310 Folder.class);
311
312 rootFolderId = MapUtil.getLong(
313 folderIds, rootFolderId, rootFolderId);
314
315 portletPreferences.setValue(
316 "rootFolderId", String.valueOf(rootFolderId));
317 }
318 }
319
320 return portletPreferences;
321 }
322
323 protected ActionableDynamicQuery getDLFileEntryTypeActionableDynamicQuery(
324 final PortletDataContext portletDataContext)
325 throws Exception {
326
327 return new DLFileEntryTypeExportActionableDynamicQuery(
328 portletDataContext) {
329
330 @Override
331 protected void addCriteria(DynamicQuery dynamicQuery) {
332 super.addCriteria(dynamicQuery);
333
334 Property property = PropertyFactoryUtil.forName("groupId");
335
336 dynamicQuery.add(
337 property.in(
338 new Long[] {
339 portletDataContext.getScopeGroupId()
340 }));
341 }
342
343 @Override
344 protected void performAction(Object object) throws PortalException {
345 DLFileEntryType dlFileEntryType = (DLFileEntryType)object;
346
347 if (dlFileEntryType.isExportable()) {
348 StagedModelDataHandlerUtil.exportStagedModel(
349 portletDataContext, dlFileEntryType);
350 }
351 }
352
353 };
354 }
355
356 protected ActionableDynamicQuery getDLFileShortcutActionableDynamicQuery(
357 final PortletDataContext portletDataContext)
358 throws Exception {
359
360 return new DLFileShortcutExportActionableDynamicQuery(
361 portletDataContext) {
362
363 @Override
364 protected void addCriteria(DynamicQuery dynamicQuery) {
365 super.addCriteria(dynamicQuery);
366
367 Property property = PropertyFactoryUtil.forName("active");
368
369 dynamicQuery.add(property.eq(Boolean.TRUE));
370 }
371
372 };
373 }
374
375 protected ActionableDynamicQuery getFileEntryActionableDynamicQuery(
376 final PortletDataContext portletDataContext)
377 throws Exception {
378
379 return new DLFileEntryExportActionableDynamicQuery(portletDataContext) {
380
381 @Override
382 protected void addCriteria(DynamicQuery dynamicQuery) {
383 super.addCriteria(dynamicQuery);
384
385 Property property = PropertyFactoryUtil.forName("repositoryId");
386
387 dynamicQuery.add(
388 property.eq(portletDataContext.getScopeGroupId()));
389 }
390
391 @Override
392 protected StagedModelType getStagedModelType() {
393 return new StagedModelType(FileEntry.class);
394 }
395
396 @Override
397 protected void performAction(Object object)
398 throws PortalException, SystemException {
399
400 DLFileEntry dlFileEntry = (DLFileEntry)object;
401
402 if (dlFileEntry.isInTrash() ||
403 dlFileEntry.isInTrashContainer()) {
404
405 return;
406 }
407
408 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
409 dlFileEntry.getFileEntryId());
410
411 StagedModelDataHandlerUtil.exportStagedModel(
412 portletDataContext, fileEntry);
413 }
414
415 @Override
416 public long performCount() throws PortalException, SystemException {
417 ManifestSummary manifestSummary =
418 portletDataContext.getManifestSummary();
419
420 long modelAdditionCount =
421 DLFileEntryLocalServiceUtil.getFileEntriesCount(
422 portletDataContext.getScopeGroupId(),
423 portletDataContext.getDateRange(),
424 portletDataContext.getScopeGroupId(),
425 new QueryDefinition(WorkflowConstants.STATUS_APPROVED));
426
427 StagedModelType stagedModelType = getStagedModelType();
428
429 manifestSummary.addModelAdditionCount(
430 stagedModelType.toString(), modelAdditionCount);
431
432 long modelDeletionCount =
433 ExportImportHelperUtil.getModelDeletionCount(
434 portletDataContext, stagedModelType);
435
436 manifestSummary.addModelDeletionCount(
437 stagedModelType.toString(), modelDeletionCount);
438
439 return modelAdditionCount;
440 }
441
442 };
443 }
444
445 protected ActionableDynamicQuery getFolderActionableDynamicQuery(
446 final PortletDataContext portletDataContext)
447 throws Exception {
448
449 return new DLFolderExportActionableDynamicQuery(portletDataContext) {
450
451 @Override
452 protected void addCriteria(DynamicQuery dynamicQuery) {
453 super.addCriteria(dynamicQuery);
454
455 Property property = PropertyFactoryUtil.forName("repositoryId");
456
457 dynamicQuery.add(
458 property.eq(portletDataContext.getScopeGroupId()));
459 }
460
461 @Override
462 protected StagedModelType getStagedModelType() {
463 return new StagedModelType(Folder.class);
464 }
465
466 @Override
467 protected void performAction(Object object)
468 throws PortalException, SystemException {
469
470 DLFolder dlFolder = (DLFolder)object;
471
472 if (dlFolder.isInTrash() || dlFolder.isInTrashContainer()) {
473 return;
474 }
475
476 Folder folder = DLAppLocalServiceUtil.getFolder(
477 dlFolder.getFolderId());
478
479 StagedModelDataHandlerUtil.exportStagedModel(
480 portletDataContext, folder);
481 }
482
483 };
484 }
485
486 protected ActionableDynamicQuery getRepositoryActionableDynamicQuery(
487 final PortletDataContext portletDataContext)
488 throws Exception {
489
490 return new RepositoryExportActionableDynamicQuery(portletDataContext) {
491
492 @Override
493 protected void addCriteria(DynamicQuery dynamicQuery) {
494 super.addCriteria(dynamicQuery);
495
496 Property classNameIdProperty = PropertyFactoryUtil.forName(
497 "classNameId");
498
499 long liferayRepositoryClassNameId = PortalUtil.getClassNameId(
500 LiferayRepository.class);
501
502 dynamicQuery.add(
503 classNameIdProperty.ne(liferayRepositoryClassNameId));
504
505 Disjunction disjunction = RestrictionsFactoryUtil.disjunction();
506
507 Property portletIdProperty = PropertyFactoryUtil.forName(
508 "portletId");
509
510 disjunction.add(portletIdProperty.isNull());
511 disjunction.add(portletIdProperty.eq(StringPool.BLANK));
512
513 dynamicQuery.add(disjunction);
514 }
515
516 @Override
517 protected StagedModelType getStagedModelType() {
518 return new StagedModelType(
519 PortalUtil.getClassNameId(Repository.class.getName()),
520 StagedModelType.REFERRER_CLASS_NAME_ID_ALL);
521 }
522
523 };
524 }
525
526 }