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