com.liferay.document.library.web.internal.lar.DLPortletDataHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.document.library.web.internal.lar.DLPortletDataHandler.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.document.library.web.internal.lar;

import com.liferay.document.library.constants.DLPortletKeys;
import com.liferay.document.library.kernel.model.DLFileEntry;
import com.liferay.document.library.kernel.model.DLFileEntryConstants;
import com.liferay.document.library.kernel.model.DLFileEntryType;
import com.liferay.document.library.kernel.model.DLFileShortcut;
import com.liferay.document.library.kernel.model.DLFileShortcutConstants;
import com.liferay.document.library.kernel.model.DLFileVersion;
import com.liferay.document.library.kernel.model.DLFolder;
import com.liferay.document.library.kernel.model.DLFolderConstants;
import com.liferay.document.library.kernel.service.DLAppLocalService;
import com.liferay.document.library.kernel.service.DLFileEntryLocalService;
import com.liferay.document.library.kernel.service.DLFileEntryTypeLocalService;
import com.liferay.document.library.kernel.service.DLFileShortcutLocalService;
import com.liferay.document.library.kernel.service.DLFolderLocalService;
import com.liferay.exportimport.kernel.lar.BasePortletDataHandler;
import com.liferay.exportimport.kernel.lar.PortletDataContext;
import com.liferay.exportimport.kernel.lar.PortletDataHandler;
import com.liferay.exportimport.kernel.lar.PortletDataHandlerBoolean;
import com.liferay.exportimport.kernel.lar.PortletDataHandlerControl;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandler;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerRegistryUtil;
import com.liferay.exportimport.kernel.lar.StagedModelDataHandlerUtil;
import com.liferay.exportimport.kernel.lar.StagedModelType;
import com.liferay.petra.string.StringPool;
import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.Conjunction;
import com.liferay.portal.kernel.dao.orm.Criterion;
import com.liferay.portal.kernel.dao.orm.Disjunction;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil;
import com.liferay.portal.kernel.dao.orm.ExportActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Property;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.dao.orm.RestrictionsFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.Repository;
import com.liferay.portal.kernel.repository.model.FileEntry;
import com.liferay.portal.kernel.repository.model.FileShortcut;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.service.RepositoryLocalService;
import com.liferay.portal.kernel.util.Portal;
import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
import com.liferay.portal.kernel.xml.Element;
import com.liferay.portal.repository.liferayrepository.LiferayRepositoryDefiner;
import com.liferay.portal.repository.temporaryrepository.TemporaryFileEntryRepositoryDefiner;
import com.liferay.portal.util.PropsValues;
import com.liferay.portlet.documentlibrary.constants.DLConstants;
import com.liferay.portlet.documentlibrary.service.permission.DLPermission;

import java.util.List;

import javax.portlet.PortletPreferences;

import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

/**
 * @author Bruno Farache
 * @author Raymond Aug
 * @author Sampsa Sohlman
 * @author Mate Thurzo
 * @author Zsolt Berentey
 */
@Component(property = { "javax.portlet.name=" + DLPortletKeys.DOCUMENT_LIBRARY,
        "javax.portlet.name=" + DLPortletKeys.DOCUMENT_LIBRARY_ADMIN }, service = PortletDataHandler.class)
public class DLPortletDataHandler extends BasePortletDataHandler {

    public static final String NAMESPACE = "document_library";

    public static final String SCHEMA_VERSION = "1.0.0";

    @Override
    public String getSchemaVersion() {
        return SCHEMA_VERSION;
    }

    @Override
    public String getServiceName() {
        return DLConstants.SERVICE_NAME;
    }

    @Activate
    protected void activate() {
        setDataLocalized(true);
        setDataPortletPreferences("rootFolderId");
        setDeletionSystemEventStagedModelTypes(new StagedModelType(DLFileEntryType.class),
                new StagedModelType(DLFileShortcut.class), new StagedModelType(DLFileEntryConstants.getClassName()),
                new StagedModelType(DLFolderConstants.getClassName()),
                new StagedModelType(Repository.class.getName(), StagedModelType.REFERRER_CLASS_NAME_ALL));
        setExportControls(
                new PortletDataHandlerBoolean(NAMESPACE, "repositories", true, false, null,
                        Repository.class.getName(), StagedModelType.REFERRER_CLASS_NAME_ALL),
                new PortletDataHandlerBoolean(NAMESPACE, "folders", true, false, null,
                        DLFolderConstants.getClassName()),
                new PortletDataHandlerBoolean(NAMESPACE, "documents", true, false,
                        new PortletDataHandlerControl[] {
                                new PortletDataHandlerBoolean(NAMESPACE, "previews-and-thumbnails") },
                        DLFileEntryConstants.getClassName()),
                new PortletDataHandlerBoolean(NAMESPACE, "document-types", true, false, null,
                        DLFileEntryType.class.getName()),
                new PortletDataHandlerBoolean(NAMESPACE, "shortcuts", true, false, null,
                        DLFileShortcutConstants.getClassName()));
        setPublishToLiveByDefault(PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT);
        setRank(90);
    }

    @Override
    protected PortletPreferences doDeleteData(PortletDataContext portletDataContext, String portletId,
            PortletPreferences portletPreferences) throws Exception {

        if (portletDataContext.addPrimaryKey(DLPortletDataHandler.class, "deleteData")) {

            return portletPreferences;
        }

        _dlAppLocalService.deleteAll(portletDataContext.getScopeGroupId());
        _dlFileEntryTypeLocalService.deleteFileEntryTypes(portletDataContext.getScopeGroupId());

        if (portletPreferences == null) {
            return portletPreferences;
        }

        portletPreferences.setValue("enable-comment-ratings", StringPool.BLANK);
        portletPreferences.setValue("fileEntriesPerPage", StringPool.BLANK);
        portletPreferences.setValue("fileEntryColumns", StringPool.BLANK);
        portletPreferences.setValue("folderColumns", StringPool.BLANK);
        portletPreferences.setValue("foldersPerPage", StringPool.BLANK);
        portletPreferences.setValue("rootFolderId", StringPool.BLANK);
        portletPreferences.setValue("showFoldersSearch", StringPool.BLANK);
        portletPreferences.setValue("showSubfolders", StringPool.BLANK);

        return portletPreferences;
    }

    @Override
    protected String doExportData(final PortletDataContext portletDataContext, String portletId,
            PortletPreferences portletPreferences) throws Exception {

        portletDataContext.addPortletPermissions(DLPermission.RESOURCE_NAME);

        Element rootElement = addExportDataRootElement(portletDataContext);

        rootElement.addAttribute("group-id", String.valueOf(portletDataContext.getScopeGroupId()));

        if (portletDataContext.getBooleanParameter(NAMESPACE, "folders")) {
            ActionableDynamicQuery folderActionableDynamicQuery = getFolderActionableDynamicQuery(
                    portletDataContext);

            folderActionableDynamicQuery.performActions();
        }

        if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
            ActionableDynamicQuery fileEntryActionableDynamicQuery = getFileEntryActionableDynamicQuery(
                    portletDataContext);

            fileEntryActionableDynamicQuery.performActions();
        }

        if (portletDataContext.getBooleanParameter(NAMESPACE, "document-types")) {

            ActionableDynamicQuery fileEntryTypeActionableDynamicQuery = getDLFileEntryTypeActionableDynamicQuery(
                    portletDataContext);

            fileEntryTypeActionableDynamicQuery.performActions();
        }

        if (portletDataContext.getBooleanParameter(NAMESPACE, "repositories")) {
            ActionableDynamicQuery repositoryActionableDynamicQuery = getRepositoryActionableDynamicQuery(
                    portletDataContext);

            repositoryActionableDynamicQuery.performActions();
        }

        if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
            ActionableDynamicQuery fileShortcutActionableDynamicQuery = getDLFileShortcutActionableDynamicQuery(
                    portletDataContext);

            fileShortcutActionableDynamicQuery.performActions();
        }

        return getExportDataRootElementString(rootElement);
    }

    @Override
    protected PortletPreferences doImportData(PortletDataContext portletDataContext, String portletId,
            PortletPreferences portletPreferences, String data) throws Exception {

        portletDataContext.importPortletPermissions(DLPermission.RESOURCE_NAME);

        if (portletDataContext.getBooleanParameter(NAMESPACE, "folders")) {
            Element foldersElement = portletDataContext.getImportDataGroupElement(DLFolder.class);

            List<Element> folderElements = foldersElement.elements();

            for (Element folderElement : folderElements) {
                StagedModelDataHandlerUtil.importStagedModel(portletDataContext, folderElement);
            }
        }

        if (portletDataContext.getBooleanParameter(NAMESPACE, "documents")) {
            Element fileEntriesElement = portletDataContext.getImportDataGroupElement(DLFileEntry.class);

            List<Element> fileEntryElements = fileEntriesElement.elements();

            for (Element fileEntryElement : fileEntryElements) {
                StagedModelDataHandlerUtil.importStagedModel(portletDataContext, fileEntryElement);
            }
        }

        if (portletDataContext.getBooleanParameter(NAMESPACE, "document-types")) {

            Element fileEntryTypesElement = portletDataContext.getImportDataGroupElement(DLFileEntryType.class);

            List<Element> fileEntryTypeElements = fileEntryTypesElement.elements();

            for (Element fileEntryTypeElement : fileEntryTypeElements) {
                StagedModelDataHandlerUtil.importStagedModel(portletDataContext, fileEntryTypeElement);
            }
        }

        if (portletDataContext.getBooleanParameter(NAMESPACE, "repositories")) {
            Element repositoriesElement = portletDataContext.getImportDataGroupElement(Repository.class);

            List<Element> repositoryElements = repositoriesElement.elements();

            for (Element repositoryElement : repositoryElements) {
                StagedModelDataHandlerUtil.importStagedModel(portletDataContext, repositoryElement);
            }
        }

        if (portletDataContext.getBooleanParameter(NAMESPACE, "shortcuts")) {
            Element fileShortcutsElement = portletDataContext.getImportDataGroupElement(DLFileShortcut.class);

            List<Element> fileShortcutElements = fileShortcutsElement.elements();

            for (Element fileShortcutElement : fileShortcutElements) {
                StagedModelDataHandlerUtil.importStagedModel(portletDataContext, fileShortcutElement);
            }
        }

        return portletPreferences;
    }

    @Override
    protected void doPrepareManifestSummary(final PortletDataContext portletDataContext,
            PortletPreferences portletPreferences) throws Exception {

        ActionableDynamicQuery dlFileShortcutActionableDynamicQuery = getDLFileShortcutActionableDynamicQuery(
                portletDataContext);

        dlFileShortcutActionableDynamicQuery.performCount();

        ActionableDynamicQuery fileEntryActionableDynamicQuery = getFileEntryActionableDynamicQuery(
                portletDataContext);

        fileEntryActionableDynamicQuery.performCount();

        ActionableDynamicQuery fileEntryTypeActionableDynamicQuery = getDLFileEntryTypeActionableDynamicQuery(
                portletDataContext);

        fileEntryTypeActionableDynamicQuery.performCount();

        ActionableDynamicQuery folderActionableDynamicQuery = getFolderActionableDynamicQuery(portletDataContext);

        folderActionableDynamicQuery.performCount();

        ActionableDynamicQuery repositoryActionableDynamicQuery = getRepositoryActionableDynamicQuery(
                portletDataContext);

        repositoryActionableDynamicQuery.performCount();
    }

    protected ActionableDynamicQuery getDLFileEntryTypeActionableDynamicQuery(
            final PortletDataContext portletDataContext) throws Exception {

        ActionableDynamicQuery actionableDynamicQuery = _dlFileEntryTypeLocalService
                .getExportActionableDynamicQuery(portletDataContext);

        final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod = actionableDynamicQuery
                .getAddCriteriaMethod();

        actionableDynamicQuery.setAddCriteriaMethod(new ActionableDynamicQuery.AddCriteriaMethod() {

            @Override
            public void addCriteria(DynamicQuery dynamicQuery) {
                addCriteriaMethod.addCriteria(dynamicQuery);

                Property property = PropertyFactoryUtil.forName("groupId");

                dynamicQuery.add(property.in(new Long[] { portletDataContext.getScopeGroupId() }));
            }

        });

        actionableDynamicQuery
                .setPerformActionMethod(new ActionableDynamicQuery.PerformActionMethod<DLFileEntryType>() {

                    @Override
                    public void performAction(DLFileEntryType dlFileEntryType) throws PortalException {

                        if (dlFileEntryType.isExportable()) {
                            StagedModelDataHandlerUtil.exportStagedModel(portletDataContext, dlFileEntryType);
                        }
                    }

                });

        return actionableDynamicQuery;
    }

    protected ActionableDynamicQuery getDLFileShortcutActionableDynamicQuery(
            final PortletDataContext portletDataContext) throws Exception {

        final ExportActionableDynamicQuery exportActionableDynamicQuery = _dlFileShortcutLocalService
                .getExportActionableDynamicQuery(portletDataContext);

        final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod = exportActionableDynamicQuery
                .getAddCriteriaMethod();

        exportActionableDynamicQuery.setAddCriteriaMethod(new ActionableDynamicQuery.AddCriteriaMethod() {

            @Override
            public void addCriteria(DynamicQuery dynamicQuery) {
                addCriteriaMethod.addCriteria(dynamicQuery);

                Property property = PropertyFactoryUtil.forName("active");

                dynamicQuery.add(property.eq(Boolean.TRUE));
            }

        });

        exportActionableDynamicQuery
                .setPerformActionMethod(new ActionableDynamicQuery.PerformActionMethod<DLFileShortcut>() {

                    @Override
                    public void performAction(DLFileShortcut dlFileShortcut) throws PortalException {

                        FileShortcut fileShortcut = _dlAppLocalService
                                .getFileShortcut(dlFileShortcut.getFileShortcutId());

                        StagedModelDataHandlerUtil.exportStagedModel(portletDataContext, fileShortcut);
                    }

                });
        exportActionableDynamicQuery
                .setStagedModelType(new StagedModelType(DLFileShortcutConstants.getClassName()));

        return exportActionableDynamicQuery;
    }

    protected ActionableDynamicQuery getFileEntryActionableDynamicQuery(final PortletDataContext portletDataContext)
            throws Exception {

        final ExportActionableDynamicQuery exportActionableDynamicQuery = _dlFileEntryLocalService
                .getExportActionableDynamicQuery(portletDataContext);

        exportActionableDynamicQuery.setAddCriteriaMethod(new ActionableDynamicQuery.AddCriteriaMethod() {

            @Override
            public void addCriteria(DynamicQuery dynamicQuery) {
                DynamicQuery fileVersionDynamicQuery = DynamicQueryFactoryUtil.forClass(DLFileVersion.class,
                        "dlFileVersion", PortalClassLoaderUtil.getClassLoader());

                fileVersionDynamicQuery.setProjection(ProjectionFactoryUtil.property("fileEntryId"));

                fileVersionDynamicQuery
                        .add(RestrictionsFactoryUtil.eqProperty("dlFileVersion.fileEntryId", "this.fileEntryId"));
                fileVersionDynamicQuery
                        .add(RestrictionsFactoryUtil.eqProperty("dlFileVersion.version", "this.version"));

                Property fileVersionStatusProperty = PropertyFactoryUtil.forName("dlFileVersion.status");

                StagedModelDataHandler<?> stagedModelDataHandler = StagedModelDataHandlerRegistryUtil
                        .getStagedModelDataHandler(DLFileEntry.class.getName());

                fileVersionDynamicQuery
                        .add(fileVersionStatusProperty.in(stagedModelDataHandler.getExportableStatuses()));

                Criterion fileVersionModifiedDateCriterion = portletDataContext
                        .getDateRangeCriteria("dlFileVersion.modifiedDate");
                Criterion fileVersionStatusDateCriterion = portletDataContext
                        .getDateRangeCriteria("dlFileVersion.statusDate");
                Criterion modifiedDateCriterion = portletDataContext.getDateRangeCriteria("this.modifiedDate");

                if ((fileVersionStatusDateCriterion != null) && (modifiedDateCriterion != null)) {

                    Disjunction disjunction = RestrictionsFactoryUtil.disjunction();

                    disjunction.add(fileVersionModifiedDateCriterion);
                    disjunction.add(fileVersionStatusDateCriterion);
                    disjunction.add(modifiedDateCriterion);

                    fileVersionDynamicQuery.add(disjunction);
                }

                Property fileEntryIdProperty = PropertyFactoryUtil.forName("fileEntryId");

                dynamicQuery.add(fileEntryIdProperty.in(fileVersionDynamicQuery));

                Property repositoryIdProperty = PropertyFactoryUtil.forName("repositoryId");

                dynamicQuery.add(repositoryIdProperty.eq(portletDataContext.getScopeGroupId()));
            }

        });
        exportActionableDynamicQuery
                .setPerformActionMethod(new ActionableDynamicQuery.PerformActionMethod<DLFileEntry>() {

                    @Override
                    public void performAction(DLFileEntry dlFileEntry) throws PortalException {

                        FileEntry fileEntry = _dlAppLocalService.getFileEntry(dlFileEntry.getFileEntryId());

                        StagedModelDataHandlerUtil.exportStagedModel(portletDataContext, fileEntry);
                    }

                });
        exportActionableDynamicQuery.setStagedModelType(new StagedModelType(DLFileEntryConstants.getClassName()));

        return exportActionableDynamicQuery;
    }

    protected ActionableDynamicQuery getFolderActionableDynamicQuery(final PortletDataContext portletDataContext)
            throws Exception {

        ExportActionableDynamicQuery exportActionableDynamicQuery = _dlFolderLocalService
                .getExportActionableDynamicQuery(portletDataContext);

        final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod = exportActionableDynamicQuery
                .getAddCriteriaMethod();

        exportActionableDynamicQuery.setAddCriteriaMethod(new ActionableDynamicQuery.AddCriteriaMethod() {

            @Override
            public void addCriteria(DynamicQuery dynamicQuery) {
                addCriteriaMethod.addCriteria(dynamicQuery);

                Property property = PropertyFactoryUtil.forName("repositoryId");

                dynamicQuery.add(property.eq(portletDataContext.getScopeGroupId()));
            }

        });

        exportActionableDynamicQuery
                .setPerformActionMethod(new ActionableDynamicQuery.PerformActionMethod<DLFolder>() {

                    @Override
                    public void performAction(DLFolder dlFolder) throws PortalException {

                        if (dlFolder.isInTrash()) {
                            return;
                        }

                        Folder folder = _dlAppLocalService.getFolder(dlFolder.getFolderId());

                        StagedModelDataHandlerUtil.exportStagedModel(portletDataContext, folder);
                    }

                });
        exportActionableDynamicQuery.setStagedModelType(new StagedModelType(DLFolderConstants.getClassName()));

        return exportActionableDynamicQuery;
    }

    protected ActionableDynamicQuery getRepositoryActionableDynamicQuery(
            final PortletDataContext portletDataContext) throws Exception {

        ExportActionableDynamicQuery exportActionableDynamicQuery = _repositoryLocalService
                .getExportActionableDynamicQuery(portletDataContext);

        final ActionableDynamicQuery.AddCriteriaMethod addCriteriaMethod = exportActionableDynamicQuery
                .getAddCriteriaMethod();

        exportActionableDynamicQuery.setAddCriteriaMethod(new ActionableDynamicQuery.AddCriteriaMethod() {

            @Override
            public void addCriteria(DynamicQuery dynamicQuery) {
                addCriteriaMethod.addCriteria(dynamicQuery);

                Conjunction conjunction = RestrictionsFactoryUtil.conjunction();

                Property classNameIdProperty = PropertyFactoryUtil.forName("classNameId");

                long liferayRepositoryClassNameId = _portal.getClassNameId(LiferayRepositoryDefiner.CLASS_NAME);

                conjunction.add(classNameIdProperty.ne(liferayRepositoryClassNameId));

                long tempFileRepositoryClassNameId = _portal
                        .getClassNameId(TemporaryFileEntryRepositoryDefiner.CLASS_NAME);

                conjunction.add(classNameIdProperty.ne(tempFileRepositoryClassNameId));

                dynamicQuery.add(conjunction);

                Disjunction disjunction = RestrictionsFactoryUtil.disjunction();

                Property portletIdProperty = PropertyFactoryUtil.forName("portletId");

                disjunction.add(portletIdProperty.isNull());
                disjunction.add(portletIdProperty.eq(StringPool.BLANK));
                disjunction.add(portletIdProperty.eq(DLPortletKeys.DOCUMENT_LIBRARY_ADMIN));
                disjunction.add(portletIdProperty.like(DLPortletKeys.DOCUMENT_LIBRARY + "%"));

                dynamicQuery.add(disjunction);
            }

        });

        exportActionableDynamicQuery.setStagedModelType(new StagedModelType(
                _portal.getClassNameId(Repository.class.getName()), StagedModelType.REFERRER_CLASS_NAME_ID_ALL));

        return exportActionableDynamicQuery;
    }

    @Reference(unbind = "-")
    protected void setDLAppLocalService(DLAppLocalService dlAppLocalService) {
        _dlAppLocalService = dlAppLocalService;
    }

    @Reference(unbind = "-")
    protected void setDLFileEntryLocalService(DLFileEntryLocalService dlFileEntryLocalService) {

        _dlFileEntryLocalService = dlFileEntryLocalService;
    }

    @Reference(unbind = "-")
    protected void setDLFileEntryTypeLocalService(DLFileEntryTypeLocalService dlFileEntryTypeLocalService) {

        _dlFileEntryTypeLocalService = dlFileEntryTypeLocalService;
    }

    @Reference(unbind = "-")
    protected void setDLFileShortcutLocalService(DLFileShortcutLocalService dlFileShortcutLocalService) {

        _dlFileShortcutLocalService = dlFileShortcutLocalService;
    }

    @Reference(unbind = "-")
    protected void setDLFolderLocalService(DLFolderLocalService dlFolderLocalService) {

        _dlFolderLocalService = dlFolderLocalService;
    }

    @Reference(unbind = "-")
    protected void setRepositoryLocalService(RepositoryLocalService repositoryLocalService) {

        _repositoryLocalService = repositoryLocalService;
    }

    private DLAppLocalService _dlAppLocalService;
    private DLFileEntryLocalService _dlFileEntryLocalService;
    private DLFileEntryTypeLocalService _dlFileEntryTypeLocalService;
    private DLFileShortcutLocalService _dlFileShortcutLocalService;
    private DLFolderLocalService _dlFolderLocalService;

    @Reference
    private Portal _portal;

    private RepositoryLocalService _repositoryLocalService;

}