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