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