001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
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.DynamicQueryFactoryUtil;
021    import com.liferay.portal.kernel.dao.orm.ExportActionableDynamicQuery;
022    import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
023    import com.liferay.portal.kernel.dao.orm.Property;
024    import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
025    import com.liferay.portal.kernel.dao.orm.QueryDefinition;
026    import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
027    import com.liferay.portal.kernel.exception.PortalException;
028    import com.liferay.portal.kernel.lar.BasePortletDataHandler;
029    import com.liferay.portal.kernel.lar.ExportImportHelperUtil;
030    import com.liferay.portal.kernel.lar.ManifestSummary;
031    import com.liferay.portal.kernel.lar.PortletDataContext;
032    import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
033    import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
034    import com.liferay.portal.kernel.lar.StagedModelDataHandler;
035    import com.liferay.portal.kernel.lar.StagedModelDataHandlerRegistryUtil;
036    import com.liferay.portal.kernel.lar.StagedModelDataHandlerUtil;
037    import com.liferay.portal.kernel.lar.StagedModelType;
038    import com.liferay.portal.kernel.lar.xstream.XStreamAliasRegistryUtil;
039    import com.liferay.portal.kernel.lar.xstream.XStreamConverterRegistryUtil;
040    import com.liferay.portal.kernel.log.Log;
041    import com.liferay.portal.kernel.log.LogFactoryUtil;
042    import com.liferay.portal.kernel.repository.model.FileEntry;
043    import com.liferay.portal.kernel.repository.model.Folder;
044    import com.liferay.portal.kernel.util.GetterUtil;
045    import com.liferay.portal.kernel.util.MapUtil;
046    import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
047    import com.liferay.portal.kernel.util.StringPool;
048    import com.liferay.portal.kernel.workflow.WorkflowConstants;
049    import com.liferay.portal.kernel.xml.Element;
050    import com.liferay.portal.model.Repository;
051    import com.liferay.portal.model.impl.RepositoryEntryImpl;
052    import com.liferay.portal.model.impl.RepositoryImpl;
053    import com.liferay.portal.repository.liferayrepository.LiferayRepository;
054    import com.liferay.portal.service.RepositoryLocalServiceUtil;
055    import com.liferay.portal.util.PortalUtil;
056    import com.liferay.portal.util.PropsValues;
057    import com.liferay.portlet.documentlibrary.lar.xstream.FileEntryConverter;
058    import com.liferay.portlet.documentlibrary.lar.xstream.FileVersionConverter;
059    import com.liferay.portlet.documentlibrary.lar.xstream.FolderConverter;
060    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
061    import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
062    import com.liferay.portlet.documentlibrary.model.DLFileEntryType;
063    import com.liferay.portlet.documentlibrary.model.DLFileRank;
064    import com.liferay.portlet.documentlibrary.model.DLFileShortcut;
065    import com.liferay.portlet.documentlibrary.model.DLFileVersion;
066    import com.liferay.portlet.documentlibrary.model.DLFolder;
067    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
068    import com.liferay.portlet.documentlibrary.model.impl.DLFileEntryImpl;
069    import com.liferay.portlet.documentlibrary.model.impl.DLFileEntryTypeImpl;
070    import com.liferay.portlet.documentlibrary.model.impl.DLFileShortcutImpl;
071    import com.liferay.portlet.documentlibrary.model.impl.DLFolderImpl;
072    import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
073    import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
074    import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalServiceUtil;
075    import com.liferay.portlet.documentlibrary.service.DLFileShortcutLocalServiceUtil;
076    import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
077    import com.liferay.portlet.documentlibrary.service.permission.DLPermission;
078    import com.liferay.portlet.documentlibrary.util.DLConstants;
079    
080    import java.util.List;
081    import java.util.Map;
082    
083    import javax.portlet.PortletPreferences;
084    
085    /**
086     * @author Bruno Farache
087     * @author Raymond Aug??
088     * @author Sampsa Sohlman
089     * @author Mate Thurzo
090     * @author Zsolt Berentey
091     */
092    public class DLPortletDataHandler extends BasePortletDataHandler {
093    
094            public static final String NAMESPACE = "document_library";
095    
096            public DLPortletDataHandler() {
097                    setDataLocalized(true);
098                    setDataPortletPreferences("rootFolderId");
099                    setDeletionSystemEventStagedModelTypes(
100                            new StagedModelType(DLFileEntryType.class),
101                            new StagedModelType(DLFileRank.class),
102                            new StagedModelType(DLFileShortcut.class),
103                            new StagedModelType(DLFileEntryConstants.getClassName()),
104                            new StagedModelType(DLFolderConstants.getClassName()),
105                            new StagedModelType(Repository.class));
106                    setExportControls(
107                            new PortletDataHandlerBoolean(
108                                    NAMESPACE, "repositories", true, false, null,
109                                    Repository.class.getName()),
110                            new PortletDataHandlerBoolean(
111                                    NAMESPACE, "folders", true, false, null,
112                                    DLFolderConstants.getClassName()),
113                            new PortletDataHandlerBoolean(
114                                    NAMESPACE, "documents", true, false,
115                                    new PortletDataHandlerControl[] {
116                                            new PortletDataHandlerBoolean(
117                                                    NAMESPACE, "previews-and-thumbnails")
118                                    },
119                                    DLFileEntryConstants.getClassName()),
120                            new PortletDataHandlerBoolean(
121                                    NAMESPACE, "document-types", true, false, null,
122                                    DLFileEntryType.class.getName()),
123                            new PortletDataHandlerBoolean(
124                                    NAMESPACE, "shortcuts", true, false, null,
125                                    DLFileShortcut.class.getName()));
126                    setPublishToLiveByDefault(PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT);
127    
128                    XStreamAliasRegistryUtil.register(DLFileEntryImpl.class, "DLFileEntry");
129                    XStreamAliasRegistryUtil.register(
130                            DLFileEntryTypeImpl.class, "DLFileEntryType");
131                    XStreamAliasRegistryUtil.register(
132                            DLFileShortcutImpl.class, "DLFileShortcut");
133                    XStreamAliasRegistryUtil.register(DLFolderImpl.class, "DLFolder");
134                    XStreamAliasRegistryUtil.register(RepositoryImpl.class, "Repository");
135                    XStreamAliasRegistryUtil.register(
136                            RepositoryEntryImpl.class, "RepositoryEntry");
137    
138                    XStreamConverterRegistryUtil.register(new FileEntryConverter());
139                    XStreamConverterRegistryUtil.register(new FileVersionConverter());
140                    XStreamConverterRegistryUtil.register(new FolderConverter());
141            }
142    
143            @Override
144            public String getServiceName() {
145                    return DLConstants.SERVICE_NAME;
146            }
147    
148            @Override
149            protected PortletPreferences doDeleteData(
150                            PortletDataContext portletDataContext, String portletId,
151                            PortletPreferences portletPreferences)
152                    throws Exception {
153    
154                    if (portletDataContext.addPrimaryKey(
155                                    DLPortletDataHandler.class, "deleteData")) {
156    
157                            return portletPreferences;
158                    }
159    
160                    DLAppLocalServiceUtil.deleteAll(portletDataContext.getScopeGroupId());
161    
162                    return portletPreferences;
163            }
164    
165            @Override
166            protected String doExportData(
167                            final PortletDataContext portletDataContext, String portletId,
168                            PortletPreferences portletPreferences)
169                    throws Exception {
170    
171                    portletDataContext.addPortletPermissions(DLPermission.RESOURCE_NAME);
172    
173                    Element rootElement = addExportDataRootElement(portletDataContext);
174    
175                    rootElement.addAttribute(
176                            "group-id", String.valueOf(portletDataContext.getScopeGroupId()));
177    
178                    if (portletDataContext.getBooleanParameter(NAMESPACE, "folders")) {
179                            ActionableDynamicQuery folderActionableDynamicQuery =
180                                    getFolderActionableDynamicQuery(portletDataContext);
181    
182                            folderActionableDynamicQuery.performActions();
183                    }
184    
185                    if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
186                            ActionableDynamicQuery fileEntryActionableDynamicQuery =
187                                    getFileEntryActionableDynamicQuery(portletDataContext);
188    
189                            fileEntryActionableDynamicQuery.performActions();
190                    }
191    
192                    if (portletDataContext.getBooleanParameter(
193                                    NAMESPACE, "document-types")) {
194    
195                            ActionableDynamicQuery fileEntryTypeActionableDynamicQuery =
196                                    getDLFileEntryTypeActionableDynamicQuery(portletDataContext);
197    
198                            fileEntryTypeActionableDynamicQuery.performActions();
199                    }
200    
201                    if (portletDataContext.getBooleanParameter(NAMESPACE, "repositories")) {
202                            ActionableDynamicQuery repositoryActionableDynamicQuery =
203                                    getRepositoryActionableDynamicQuery(portletDataContext);
204    
205                            repositoryActionableDynamicQuery.performActions();
206                    }
207    
208                    if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
209                            ActionableDynamicQuery fileShortcutActionableDynamicQuery =
210                                    getDLFileShortcutActionableDynamicQuery(portletDataContext);
211    
212                            fileShortcutActionableDynamicQuery.performActions();
213                    }
214    
215                    return getExportDataRootElementString(rootElement);
216            }
217    
218            @Override
219            protected PortletPreferences doImportData(
220                            PortletDataContext portletDataContext, String portletId,
221                            PortletPreferences portletPreferences, String data)
222                    throws Exception {
223    
224                    portletDataContext.importPortletPermissions(DLPermission.RESOURCE_NAME);
225    
226                    if (portletDataContext.getBooleanParameter(NAMESPACE, "folders")) {
227                            Element foldersElement =
228                                    portletDataContext.getImportDataGroupElement(DLFolder.class);
229    
230                            List<Element> folderElements = foldersElement.elements();
231    
232                            for (Element folderElement : folderElements) {
233                                    StagedModelDataHandlerUtil.importStagedModel(
234                                            portletDataContext, folderElement);
235                            }
236                    }
237    
238                    if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
239                            Element fileEntriesElement =
240                                    portletDataContext.getImportDataGroupElement(DLFileEntry.class);
241    
242                            List<Element> fileEntryElements = fileEntriesElement.elements();
243    
244                            for (Element fileEntryElement : fileEntryElements) {
245                                    StagedModelDataHandlerUtil.importStagedModel(
246                                            portletDataContext, fileEntryElement);
247                            }
248                    }
249    
250                    if (portletDataContext.getBooleanParameter(
251                                    NAMESPACE, "document-types")) {
252    
253                            Element fileEntryTypesElement =
254                                    portletDataContext.getImportDataGroupElement(
255                                            DLFileEntryType.class);
256    
257                            List<Element> fileEntryTypeElements =
258                                    fileEntryTypesElement.elements();
259    
260                            for (Element fileEntryTypeElement : fileEntryTypeElements) {
261                                    StagedModelDataHandlerUtil.importStagedModel(
262                                            portletDataContext, fileEntryTypeElement);
263                            }
264                    }
265    
266                    if (portletDataContext.getBooleanParameter(NAMESPACE, "repositories")) {
267                            Element repositoriesElement =
268                                    portletDataContext.getImportDataGroupElement(Repository.class);
269    
270                            List<Element> repositoryElements = repositoriesElement.elements();
271    
272                            for (Element repositoryElement : repositoryElements) {
273                                    StagedModelDataHandlerUtil.importStagedModel(
274                                            portletDataContext, repositoryElement);
275                            }
276                    }
277    
278                    if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
279                            Element fileShortcutsElement =
280                                    portletDataContext.getImportDataGroupElement(
281                                            DLFileShortcut.class);
282    
283                            List<Element> fileShortcutElements =
284                                    fileShortcutsElement.elements();
285    
286                            for (Element fileShortcutElement : fileShortcutElements) {
287                                    StagedModelDataHandlerUtil.importStagedModel(
288                                            portletDataContext, fileShortcutElement);
289                            }
290                    }
291    
292                    return portletPreferences;
293            }
294    
295            @Override
296            protected void doPrepareManifestSummary(
297                            final PortletDataContext portletDataContext,
298                            PortletPreferences portletPreferences)
299                    throws Exception {
300    
301                    ActionableDynamicQuery dlFileShortcutActionableDynamicQuery =
302                            getDLFileShortcutActionableDynamicQuery(portletDataContext);
303    
304                    dlFileShortcutActionableDynamicQuery.performCount();
305    
306                    ActionableDynamicQuery fileEntryActionableDynamicQuery =
307                            getFileEntryActionableDynamicQuery(portletDataContext);
308    
309                    fileEntryActionableDynamicQuery.performCount();
310    
311                    ActionableDynamicQuery fileEntryTypeActionableDynamicQuery =
312                            getDLFileEntryTypeActionableDynamicQuery(portletDataContext);
313    
314                    fileEntryTypeActionableDynamicQuery.performCount();
315    
316                    ActionableDynamicQuery folderActionableDynamicQuery =
317                            getFolderActionableDynamicQuery(portletDataContext);
318    
319                    folderActionableDynamicQuery.performCount();
320    
321                    ActionableDynamicQuery repositoryActionableDynamicQuery =
322                            getRepositoryActionableDynamicQuery(portletDataContext);
323    
324                    repositoryActionableDynamicQuery.performCount();
325            }
326    
327            @Override
328            protected PortletPreferences doProcessExportPortletPreferences(
329                            PortletDataContext portletDataContext, String portletId,
330                            PortletPreferences portletPreferences)
331                    throws Exception {
332    
333                    long rootFolderId = GetterUtil.getLong(
334                            portletPreferences.getValue("rootFolderId", null));
335    
336                    if (rootFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
337                            Folder folder = null;
338    
339                            try {
340                                    folder = DLAppLocalServiceUtil.getFolder(rootFolderId);
341                            }
342                            catch (PortalException e) {
343                                    if (_log.isErrorEnabled()) {
344                                            _log.error(
345                                                    "Portlet " + portletId +
346                                                            " refers to an invalid root folder ID " +
347                                                                    rootFolderId);
348                                    }
349    
350                                    throw e;
351                            }
352    
353                            StagedModelDataHandlerUtil.exportReferenceStagedModel(
354                                    portletDataContext, portletId, folder);
355                    }
356    
357                    return portletPreferences;
358            }
359    
360            @Override
361            protected PortletPreferences doProcessImportPortletPreferences(
362                            PortletDataContext portletDataContext, String portletId,
363                            PortletPreferences portletPreferences)
364                    throws Exception {
365    
366                    long rootFolderId = GetterUtil.getLong(
367                            portletPreferences.getValue("rootFolderId", null));
368    
369                    if (rootFolderId > 0) {
370                            Element foldersElement =
371                                    portletDataContext.getImportDataGroupElement(DLFolder.class);
372    
373                            List<Element> folderElements = foldersElement.elements();
374    
375                            if (!folderElements.isEmpty()) {
376                                    StagedModelDataHandlerUtil.importStagedModel(
377                                            portletDataContext, folderElements.get(0));
378    
379                                    Map<Long, Long> folderIds =
380                                            (Map<Long, Long>)portletDataContext.getNewPrimaryKeysMap(
381                                                    Folder.class + ".folderIdsAndRepositoryEntryIds");
382    
383                                    rootFolderId = MapUtil.getLong(
384                                            folderIds, rootFolderId, rootFolderId);
385    
386                                    portletPreferences.setValue(
387                                            "rootFolderId", String.valueOf(rootFolderId));
388                            }
389                    }
390    
391                    return portletPreferences;
392            }
393    
394            protected ActionableDynamicQuery getDLFileEntryTypeActionableDynamicQuery(
395                            final PortletDataContext portletDataContext)
396                    throws Exception {
397    
398                    ActionableDynamicQuery actionableDynamicQuery =
399                            DLFileEntryTypeLocalServiceUtil.getExportActionableDynamicQuery(
400                                    portletDataContext);
401    
402                    final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod =
403                            actionableDynamicQuery.getAddCriteriaMethod();
404    
405                    actionableDynamicQuery.setAddCriteriaMethod(
406                            new ActionableDynamicQuery.AddCriteriaMethod() {
407    
408                                    @Override
409                                    public void addCriteria(DynamicQuery dynamicQuery) {
410                                            addCriteriaMethod.addCriteria(dynamicQuery);
411    
412                                            Property property = PropertyFactoryUtil.forName("groupId");
413    
414                                            dynamicQuery.add(
415                                                    property.in(
416                                                            new Long[] {
417                                                                    portletDataContext.getScopeGroupId()
418                                                            }));
419                                    }
420    
421                            });
422                    actionableDynamicQuery.setPerformActionMethod(
423                            new ActionableDynamicQuery.PerformActionMethod() {
424    
425                                    @Override
426                                    public void performAction(Object object)
427                                            throws PortalException {
428    
429                                            DLFileEntryType dlFileEntryType = (DLFileEntryType)object;
430    
431                                            if (dlFileEntryType.isExportable()) {
432                                                    StagedModelDataHandlerUtil.exportStagedModel(
433                                                            portletDataContext, dlFileEntryType);
434                                            }
435                                    }
436    
437                            });
438    
439                    return actionableDynamicQuery;
440            }
441    
442            protected ActionableDynamicQuery getDLFileShortcutActionableDynamicQuery(
443                            final PortletDataContext portletDataContext)
444                    throws Exception {
445    
446                    ActionableDynamicQuery actionableDynamicQuery =
447                            DLFileShortcutLocalServiceUtil.getExportActionableDynamicQuery(
448                                    portletDataContext);
449    
450                    final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod =
451                            actionableDynamicQuery.getAddCriteriaMethod();
452    
453                    actionableDynamicQuery.setAddCriteriaMethod(
454                            new ActionableDynamicQuery.AddCriteriaMethod() {
455    
456                                    @Override
457                                    public void addCriteria(DynamicQuery dynamicQuery) {
458                                            addCriteriaMethod.addCriteria(dynamicQuery);
459    
460                                            Property property = PropertyFactoryUtil.forName("active");
461    
462                                            dynamicQuery.add(property.eq(Boolean.TRUE));
463                                    }
464    
465                            });
466    
467                    return actionableDynamicQuery;
468            }
469    
470            protected ActionableDynamicQuery getFileEntryActionableDynamicQuery(
471                            final PortletDataContext portletDataContext)
472                    throws Exception {
473    
474                    final ExportActionableDynamicQuery exportActionableDynamicQuery =
475                            DLFileEntryLocalServiceUtil.getExportActionableDynamicQuery(
476                                    portletDataContext);
477    
478                    final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod =
479                            exportActionableDynamicQuery.getAddCriteriaMethod();
480    
481                    exportActionableDynamicQuery.setAddCriteriaMethod(
482                            new ActionableDynamicQuery.AddCriteriaMethod() {
483    
484                                    @Override
485                                    public void addCriteria(DynamicQuery dynamicQuery) {
486                                            addCriteriaMethod.addCriteria(dynamicQuery);
487    
488                                            DynamicQuery fileVersionDynamicQuery =
489                                                    DynamicQueryFactoryUtil.forClass(
490                                                            DLFileVersion.class, "dlFileVersion",
491                                                            PortalClassLoaderUtil.getClassLoader());
492    
493                                            fileVersionDynamicQuery.setProjection(
494                                                    ProjectionFactoryUtil.property("fileEntryId"));
495    
496                                            fileVersionDynamicQuery.add(
497                                                    RestrictionsFactoryUtil.eqProperty(
498                                                            "dlFileVersion.fileEntryId", "fileEntryId"));
499                                            fileVersionDynamicQuery.add(
500                                                    RestrictionsFactoryUtil.eqProperty(
501                                                            "dlFileVersion.version", "version"));
502    
503                                            Property statusProperty = PropertyFactoryUtil.forName(
504                                                    "status");
505    
506                                            StagedModelDataHandler<?> stagedModelDataHandler =
507                                                    StagedModelDataHandlerRegistryUtil.
508                                                            getStagedModelDataHandler(
509                                                                    DLFileEntry.class.getName());
510    
511                                            fileVersionDynamicQuery.add(
512                                                    statusProperty.in(
513                                                            stagedModelDataHandler.getExportableStatuses()));
514    
515                                            Property fileEntryIdProperty = PropertyFactoryUtil.forName(
516                                                    "fileEntryId");
517    
518                                            dynamicQuery.add(
519                                                    fileEntryIdProperty.in(fileVersionDynamicQuery));
520    
521                                            Property repositoryIdProperty = PropertyFactoryUtil.forName(
522                                                    "repositoryId");
523    
524                                            dynamicQuery.add(
525                                                    repositoryIdProperty.eq(
526                                                            portletDataContext.getScopeGroupId()));
527                                    }
528    
529                            });
530                    exportActionableDynamicQuery.setPerformActionMethod(
531                            new ActionableDynamicQuery.PerformActionMethod() {
532    
533                                    @Override
534                                    public void performAction(Object object)
535                                            throws PortalException {
536    
537                                            DLFileEntry dlFileEntry = (DLFileEntry)object;
538    
539                                            if (dlFileEntry.isInTrash()) {
540                                                    return;
541                                            }
542    
543                                            FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(
544                                                    dlFileEntry.getFileEntryId());
545    
546                                            StagedModelDataHandlerUtil.exportStagedModel(
547                                                    portletDataContext, fileEntry);
548                                    }
549                            });
550                    exportActionableDynamicQuery.setPerformCountMethod(
551                            new ActionableDynamicQuery.PerformCountMethod() {
552    
553                                    @Override
554                                    public long performCount() throws PortalException {
555                                            ManifestSummary manifestSummary =
556                                                    portletDataContext.getManifestSummary();
557    
558                                            long modelAdditionCount =
559                                                    DLFileEntryLocalServiceUtil.getFileEntriesCount(
560                                                            portletDataContext.getScopeGroupId(),
561                                                            portletDataContext.getDateRange(),
562                                                            portletDataContext.getScopeGroupId(),
563                                                            new QueryDefinition<DLFileEntry>(
564                                                                    WorkflowConstants.STATUS_APPROVED));
565    
566                                            StagedModelType stagedModelType =
567                                                    exportActionableDynamicQuery.getStagedModelType();
568    
569                                            manifestSummary.addModelAdditionCount(
570                                                    stagedModelType.toString(), modelAdditionCount);
571    
572                                            long modelDeletionCount =
573                                                    ExportImportHelperUtil.getModelDeletionCount(
574                                                            portletDataContext, stagedModelType);
575    
576                                            manifestSummary.addModelDeletionCount(
577                                                    stagedModelType.toString(), modelDeletionCount);
578    
579                                            return modelAdditionCount;
580                                    }
581    
582                            });
583                    exportActionableDynamicQuery.setStagedModelType(
584                            new StagedModelType(DLFileEntryConstants.getClassName()));
585    
586                    return exportActionableDynamicQuery;
587            }
588    
589            protected ActionableDynamicQuery getFolderActionableDynamicQuery(
590                            final PortletDataContext portletDataContext)
591                    throws Exception {
592    
593                    ExportActionableDynamicQuery exportActionableDynamicQuery =
594                            DLFolderLocalServiceUtil.getExportActionableDynamicQuery(
595                                    portletDataContext);
596    
597                    final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod =
598                            exportActionableDynamicQuery.getAddCriteriaMethod();
599    
600                    exportActionableDynamicQuery.setAddCriteriaMethod(
601                            new ActionableDynamicQuery.AddCriteriaMethod() {
602    
603                                    @Override
604                                    public void addCriteria(DynamicQuery dynamicQuery) {
605                                            addCriteriaMethod.addCriteria(dynamicQuery);
606    
607                                            Property property = PropertyFactoryUtil.forName(
608                                                    "repositoryId");
609    
610                                            dynamicQuery.add(
611                                                    property.eq(portletDataContext.getScopeGroupId()));
612                                    }
613    
614                            });
615                    exportActionableDynamicQuery.setPerformActionMethod(
616                            new ActionableDynamicQuery.PerformActionMethod() {
617    
618                                    @Override
619                                    public void performAction(Object object)
620                                            throws PortalException {
621    
622                                            DLFolder dlFolder = (DLFolder)object;
623    
624                                            if (dlFolder.isInTrash()) {
625                                                    return;
626                                            }
627    
628                                            Folder folder = DLAppLocalServiceUtil.getFolder(
629                                                    dlFolder.getFolderId());
630    
631                                            StagedModelDataHandlerUtil.exportStagedModel(
632                                                    portletDataContext, folder);
633                                    }
634    
635                            });
636                    exportActionableDynamicQuery.setStagedModelType(
637                            new StagedModelType(DLFolderConstants.getClassName()));
638    
639                    return exportActionableDynamicQuery;
640            }
641    
642            protected ActionableDynamicQuery getRepositoryActionableDynamicQuery(
643                            final PortletDataContext portletDataContext)
644                    throws Exception {
645    
646                    ExportActionableDynamicQuery exportActionableDynamicQuery =
647                            RepositoryLocalServiceUtil.getExportActionableDynamicQuery(
648                                    portletDataContext);
649    
650                    final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod =
651                            exportActionableDynamicQuery.getAddCriteriaMethod();
652    
653                    exportActionableDynamicQuery.setAddCriteriaMethod(
654                            new ActionableDynamicQuery.AddCriteriaMethod() {
655    
656                                    @Override
657                                    public void addCriteria(DynamicQuery dynamicQuery) {
658                                            addCriteriaMethod.addCriteria(dynamicQuery);
659    
660                                            Property classNameIdProperty = PropertyFactoryUtil.forName(
661                                                    "classNameId");
662    
663                                            long liferayRepositoryClassNameId =
664                                                    PortalUtil.getClassNameId(LiferayRepository.class);
665    
666                                            dynamicQuery.add(
667                                                    classNameIdProperty.ne(liferayRepositoryClassNameId));
668    
669                                            Disjunction disjunction =
670                                                    RestrictionsFactoryUtil.disjunction();
671    
672                                            Property portletIdProperty = PropertyFactoryUtil.forName(
673                                                    "portletId");
674    
675                                            disjunction.add(portletIdProperty.isNull());
676                                            disjunction.add(portletIdProperty.eq(StringPool.BLANK));
677    
678                                            dynamicQuery.add(disjunction);
679                                    }
680    
681                            });
682                    exportActionableDynamicQuery.setStagedModelType(
683                            new StagedModelType(
684                                    PortalUtil.getClassNameId(Repository.class.getName()),
685                                    StagedModelType.REFERRER_CLASS_NAME_ID_ALL));
686    
687                    return exportActionableDynamicQuery;
688            }
689    
690            private static final Log _log = LogFactoryUtil.getLog(
691                    DLPortletDataHandler.class);
692    
693    }