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.dao.orm.QueryDefinition;
022 import com.liferay.portal.kernel.exception.PortalException;
023 import com.liferay.portal.kernel.exception.SystemException;
024 import com.liferay.portal.kernel.lar.BasePortletDataHandler;
025 import com.liferay.portal.kernel.lar.ExportImportHelperUtil;
026 import com.liferay.portal.kernel.lar.ManifestSummary;
027 import com.liferay.portal.kernel.lar.PortletDataContext;
028 import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
029 import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
030 import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
031 import com.liferay.portal.kernel.lar.StagedModelType;
032 import com.liferay.portal.kernel.repository.model.FileEntry;
033 import com.liferay.portal.kernel.repository.model.Folder;
034 import com.liferay.portal.kernel.util.GetterUtil;
035 import com.liferay.portal.kernel.util.MapUtil;
036 import com.liferay.portal.kernel.workflow.WorkflowConstants;
037 import com.liferay.portal.kernel.xml.Element;
038 import com.liferay.portal.util.PropsValues;
039 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
040 import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
041 import com.liferay.portlet.documentlibrary.model.DLFileRank;
042 import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
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.DLFileEntryLocalServiceUtil;
047 import com.liferay.portlet.documentlibrary.service.permission.DLPermission;
048 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryExportActionableDynamicQuery;
049 import com.liferay.portlet.documentlibrary.service.persistence.DLFileEntryTypeExportActionableDynamicQuery;
050 import com.liferay.portlet.documentlibrary.service.persistence.DLFileShortcutExportActionableDynamicQuery;
051 import com.liferay.portlet.documentlibrary.service.persistence.DLFolderExportActionableDynamicQuery;
052
053 import java.util.List;
054 import java.util.Map;
055
056 import javax.portlet.PortletPreferences;
057
058
065 public class DLPortletDataHandler extends BasePortletDataHandler {
066
067 public static final String NAMESPACE = "document_library";
068
069 public DLPortletDataHandler() {
070 setDataLocalized(true);
071 setDataPortletPreferences("rootFolderId");
072 setDeletionSystemEventStagedModelTypes(
073 new StagedModelType(DLFileEntryType.class),
074 new StagedModelType(DLFileRank.class),
075 new StagedModelType(DLFileShortcut.class),
076 new StagedModelType(FileEntry.class),
077 new StagedModelType(Folder.class));
078 setExportControls(
079 new PortletDataHandlerBoolean(
080 NAMESPACE, "folders", true, false, null,
081 Folder.class.getName()),
082 new PortletDataHandlerBoolean(
083 NAMESPACE, "documents", true, false,
084 new PortletDataHandlerControl[] {
085 new PortletDataHandlerBoolean(
086 NAMESPACE, "previews-and-thumbnails")
087 },
088 FileEntry.class.getName()),
089 new PortletDataHandlerBoolean(
090 NAMESPACE, "shortcuts", true, false, null,
091 DLFileShortcut.class.getName()));
092 setPublishToLiveByDefault(PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT);
093 }
094
095 @Override
096 protected PortletPreferences doDeleteData(
097 PortletDataContext portletDataContext, String portletId,
098 PortletPreferences portletPreferences)
099 throws Exception {
100
101 if (portletDataContext.addPrimaryKey(
102 DLPortletDataHandler.class, "deleteData")) {
103
104 return portletPreferences;
105 }
106
107 DLAppLocalServiceUtil.deleteAll(portletDataContext.getScopeGroupId());
108
109 return portletPreferences;
110 }
111
112 @Override
113 protected String doExportData(
114 final PortletDataContext portletDataContext, String portletId,
115 PortletPreferences portletPreferences)
116 throws Exception {
117
118 portletDataContext.addPortletPermissions(DLPermission.RESOURCE_NAME);
119
120 Element rootElement = addExportDataRootElement(portletDataContext);
121
122 rootElement.addAttribute(
123 "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
124
125 if (portletDataContext.getBooleanParameter(NAMESPACE, "folders")) {
126 ActionableDynamicQuery folderActionableDynamicQuery =
127 getFolderActionableDynamicQuery(portletDataContext);
128
129 folderActionableDynamicQuery.performActions();
130 }
131
132 if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
133 ActionableDynamicQuery fileEntryTypeActionableDynamicQuery =
134 getDLFileEntryTypeActionableDynamicQuery(portletDataContext);
135
136 fileEntryTypeActionableDynamicQuery.performActions();
137
138 ActionableDynamicQuery fileEntryActionableDynamicQuery =
139 getFileEntryActionableDynamicQuery(portletDataContext);
140
141 fileEntryActionableDynamicQuery.performActions();
142 }
143
144 if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
145 ActionableDynamicQuery fileShortcutActionableDynamicQuery =
146 getDLFileShortcutActionableDynamicQuery(portletDataContext);
147
148 fileShortcutActionableDynamicQuery.performActions();
149 }
150
151 return getExportDataRootElementString(rootElement);
152 }
153
154 @Override
155 protected PortletPreferences doImportData(
156 PortletDataContext portletDataContext, String portletId,
157 PortletPreferences portletPreferences, String data)
158 throws Exception {
159
160 portletDataContext.importPortletPermissions(DLPermission.RESOURCE_NAME);
161
162 Element fileEntryTypesElement =
163 portletDataContext.getImportDataGroupElement(DLFileEntryType.class);
164
165 List<Element> fileEntryTypeElements = fileEntryTypesElement.elements();
166
167 for (Element fileEntryTypeElement : fileEntryTypeElements) {
168 StagedModelDataHandlerUtil.importStagedModel(
169 portletDataContext, fileEntryTypeElement);
170 }
171
172 if (portletDataContext.getBooleanParameter(NAMESPACE, "folders")) {
173 Element foldersElement =
174 portletDataContext.getImportDataGroupElement(Folder.class);
175
176 List<Element> folderElements = foldersElement.elements();
177
178 for (Element folderElement : folderElements) {
179 StagedModelDataHandlerUtil.importStagedModel(
180 portletDataContext, folderElement);
181 }
182 }
183
184 if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
185 Element fileEntriesElement =
186 portletDataContext.getImportDataGroupElement(FileEntry.class);
187
188 List<Element> fileEntryElements = fileEntriesElement.elements();
189
190 for (Element fileEntryElement : fileEntryElements) {
191 StagedModelDataHandlerUtil.importStagedModel(
192 portletDataContext, fileEntryElement);
193 }
194 }
195
196 if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
197 Element fileShortcutsElement =
198 portletDataContext.getImportDataGroupElement(
199 DLFileShortcut.class);
200
201 List<Element> fileShortcutElements =
202 fileShortcutsElement.elements();
203
204 for (Element fileShortcutElement : fileShortcutElements) {
205 StagedModelDataHandlerUtil.importStagedModel(
206 portletDataContext, fileShortcutElement);
207 }
208 }
209
210 return portletPreferences;
211 }
212
213 @Override
214 protected void doPrepareManifestSummary(
215 final PortletDataContext portletDataContext,
216 PortletPreferences portletPreferences)
217 throws Exception {
218
219 ActionableDynamicQuery dlFileShortcutActionableDynamicQuery =
220 getDLFileShortcutActionableDynamicQuery(portletDataContext);
221
222 dlFileShortcutActionableDynamicQuery.performCount();
223
224 ActionableDynamicQuery fileEntryActionableDynamicQuery =
225 getFileEntryActionableDynamicQuery(portletDataContext);
226
227 fileEntryActionableDynamicQuery.performCount();
228
229 ActionableDynamicQuery folderActionableDynamicQuery =
230 getFolderActionableDynamicQuery(portletDataContext);
231
232 folderActionableDynamicQuery.performCount();
233 }
234
235 @Override
236 protected PortletPreferences doProcessExportPortletPreferences(
237 PortletDataContext portletDataContext, String portletId,
238 PortletPreferences portletPreferences)
239 throws Exception {
240
241 long rootFolderId = GetterUtil.getLong(
242 portletPreferences.getValue("rootFolderId", null));
243
244 if (rootFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
245 Folder folder = DLAppLocalServiceUtil.getFolder(rootFolderId);
246
247 StagedModelDataHandlerUtil.exportReferenceStagedModel(
248 portletDataContext, portletId, folder);
249 }
250
251 return portletPreferences;
252 }
253
254 @Override
255 protected PortletPreferences doProcessImportPortletPreferences(
256 PortletDataContext portletDataContext, String portletId,
257 PortletPreferences portletPreferences)
258 throws Exception {
259
260 long rootFolderId = GetterUtil.getLong(
261 portletPreferences.getValue("rootFolderId", null));
262
263 if (rootFolderId > 0) {
264 Element foldersElement =
265 portletDataContext.getImportDataGroupElement(Folder.class);
266
267 List<Element> folderElements = foldersElement.elements();
268
269 if (!folderElements.isEmpty()) {
270 StagedModelDataHandlerUtil.importStagedModel(
271 portletDataContext, folderElements.get(0));
272
273 Map<Long, Long> folderIds =
274 (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
275 Folder.class);
276
277 rootFolderId = MapUtil.getLong(
278 folderIds, rootFolderId, rootFolderId);
279
280 portletPreferences.setValue(
281 "rootFolderId", String.valueOf(rootFolderId));
282 }
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 if (dlFileEntry.isInTrash() ||
368 dlFileEntry.isInTrashContainer()) {
369
370 return;
371 }
372
373 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
374 dlFileEntry.getFileEntryId());
375
376 StagedModelDataHandlerUtil.exportStagedModel(
377 portletDataContext, fileEntry);
378 }
379
380 @Override
381 public long performCount() throws PortalException, SystemException {
382 ManifestSummary manifestSummary =
383 portletDataContext.getManifestSummary();
384
385 long modelAdditionCount =
386 DLFileEntryLocalServiceUtil.getFileEntriesCount(
387 portletDataContext.getScopeGroupId(),
388 portletDataContext.getDateRange(),
389 portletDataContext.getScopeGroupId(),
390 new QueryDefinition(WorkflowConstants.STATUS_APPROVED));
391
392 StagedModelType stagedModelType = getStagedModelType();
393
394 manifestSummary.addModelAdditionCount(
395 stagedModelType.toString(), modelAdditionCount);
396
397 long modelDeletionCount =
398 ExportImportHelperUtil.getModelDeletionCount(
399 portletDataContext, stagedModelType);
400
401 manifestSummary.addModelDeletionCount(
402 stagedModelType.toString(), modelDeletionCount);
403
404 return modelAdditionCount;
405 }
406
407 };
408 }
409
410 protected ActionableDynamicQuery getFolderActionableDynamicQuery(
411 final PortletDataContext portletDataContext)
412 throws Exception {
413
414 return new DLFolderExportActionableDynamicQuery(portletDataContext) {
415
416 @Override
417 protected void addCriteria(DynamicQuery dynamicQuery) {
418 super.addCriteria(dynamicQuery);
419
420 Property property = PropertyFactoryUtil.forName("repositoryId");
421
422 dynamicQuery.add(
423 property.eq(portletDataContext.getScopeGroupId()));
424 }
425
426 @Override
427 protected StagedModelType getStagedModelType() {
428 return new StagedModelType(Folder.class);
429 }
430
431 @Override
432 protected void performAction(Object object)
433 throws PortalException, SystemException {
434
435 DLFolder dlFolder = (DLFolder)object;
436
437 if (dlFolder.isInTrash() || dlFolder.isInTrashContainer()) {
438 return;
439 }
440
441 Folder folder = DLAppLocalServiceUtil.getFolder(
442 dlFolder.getFolderId());
443
444 StagedModelDataHandlerUtil.exportStagedModel(
445 portletDataContext, folder);
446 }
447
448 };
449 }
450
451 }