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.getCompanyGroupId(),
305 portletDataContext.getScopeGroupId()
306 }));
307 }
308
309 @Override
310 protected void performAction(Object object) throws PortalException {
311 DLFileEntryType dlFileEntryType = (DLFileEntryType)object;
312
313 if (dlFileEntryType.isExportable()) {
314 StagedModelDataHandlerUtil.exportStagedModel(
315 portletDataContext, dlFileEntryType);
316 }
317 }
318
319 };
320 }
321
322 protected ActionableDynamicQuery getDLFileShortcutActionableDynamicQuery(
323 final PortletDataContext portletDataContext)
324 throws Exception {
325
326 return new DLFileShortcutExportActionableDynamicQuery(
327 portletDataContext) {
328
329 @Override
330 protected void addCriteria(DynamicQuery dynamicQuery) {
331 super.addCriteria(dynamicQuery);
332
333 Property property = PropertyFactoryUtil.forName("active");
334
335 dynamicQuery.add(property.eq(Boolean.TRUE));
336 }
337
338 };
339 }
340
341 protected ActionableDynamicQuery getFileEntryActionableDynamicQuery(
342 final PortletDataContext portletDataContext)
343 throws Exception {
344
345 return new DLFileEntryExportActionableDynamicQuery(portletDataContext) {
346
347 @Override
348 protected void addCriteria(DynamicQuery dynamicQuery) {
349 super.addCriteria(dynamicQuery);
350
351 Property property = PropertyFactoryUtil.forName("repositoryId");
352
353 dynamicQuery.add(
354 property.eq(portletDataContext.getScopeGroupId()));
355 }
356
357 @Override
358 protected StagedModelType getStagedModelType() {
359 return new StagedModelType(FileEntry.class);
360 }
361
362 @Override
363 protected void performAction(Object object)
364 throws PortalException, SystemException {
365
366 DLFileEntry dlFileEntry = (DLFileEntry)object;
367
368 DLFileVersion dlFileVersion = dlFileEntry.getFileVersion();
369
370 if (dlFileVersion.isInTrash() ||
371 dlFileEntry.isInTrashContainer()) {
372
373 return;
374 }
375
376 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
377 dlFileEntry.getFileEntryId());
378
379 StagedModelDataHandlerUtil.exportStagedModel(
380 portletDataContext, fileEntry);
381 }
382
383 };
384 }
385
386 protected ActionableDynamicQuery getFolderActionableDynamicQuery(
387 final PortletDataContext portletDataContext)
388 throws Exception {
389
390 return new DLFolderExportActionableDynamicQuery(portletDataContext) {
391
392 @Override
393 protected void addCriteria(DynamicQuery dynamicQuery) {
394 super.addCriteria(dynamicQuery);
395
396 Property property = PropertyFactoryUtil.forName("repositoryId");
397
398 dynamicQuery.add(
399 property.eq(portletDataContext.getScopeGroupId()));
400 }
401
402 @Override
403 protected StagedModelType getStagedModelType() {
404 return new StagedModelType(Folder.class);
405 }
406
407 @Override
408 protected void performAction(Object object)
409 throws PortalException, SystemException {
410
411 DLFolder dlFolder = (DLFolder)object;
412
413 if (dlFolder.isInTrash() || dlFolder.isInTrashContainer()) {
414 return;
415 }
416
417 Folder folder = DLAppLocalServiceUtil.getFolder(
418 dlFolder.getFolderId());
419
420 StagedModelDataHandlerUtil.exportStagedModel(
421 portletDataContext, folder);
422 }
423
424 };
425 }
426
427 }