com.liferay.portlet.documentlibrary.lar.DLDisplayPortletDataHandlerImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.portlet.documentlibrary.lar.DLDisplayPortletDataHandlerImpl.java

Source

/**
 * Copyright (c) 2000-2012 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.portlet.documentlibrary.lar;

import com.liferay.portal.kernel.lar.BasePortletDataHandler;
import com.liferay.portal.kernel.lar.PortletDataContext;
import com.liferay.portal.kernel.lar.PortletDataHandlerBoolean;
import com.liferay.portal.kernel.lar.PortletDataHandlerControl;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.MapUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.xml.Document;
import com.liferay.portal.kernel.xml.Element;
import com.liferay.portal.kernel.xml.SAXReaderUtil;
import com.liferay.portal.util.PropsValues;
import com.liferay.portlet.documentlibrary.model.DLFolderConstants;

import java.util.List;
import java.util.Map;

import javax.portlet.PortletPreferences;

/**
 * @author Raymond Aug
 */
public class DLDisplayPortletDataHandlerImpl extends BasePortletDataHandler {

    @Override
    public PortletDataHandlerControl[] getExportControls() {
        return new PortletDataHandlerControl[] { _foldersAndDocuments, _shortcuts, _ranks, _comments, _ratings,
                _tags };
    }

    @Override
    public PortletDataHandlerControl[] getImportControls() {
        return new PortletDataHandlerControl[] { _foldersAndDocuments, _shortcuts, _ranks, _comments, _ratings,
                _tags };
    }

    @Override
    public boolean isPublishToLiveByDefault() {
        return PropsValues.DL_PUBLISH_TO_LIVE_BY_DEFAULT;
    }

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

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

        return portletPreferences;
    }

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

        portletDataContext.addPermissions("com.liferay.portlet.documentlibrary",
                portletDataContext.getScopeGroupId());

        long rootFolderId = GetterUtil.getLong(portletPreferences.getValue("rootFolderId", null));

        Document document = SAXReaderUtil.createDocument();

        Element rootElement = document.addElement("documentlibrary-display-data");

        Element fileEntryTypesElement = rootElement.addElement("file-entry-types");
        Element foldersElement = rootElement.addElement("folders");
        Element fileEntriesElement = rootElement.addElement("file-entries");
        Element fileShortcutsElement = rootElement.addElement("file-shortcuts");
        Element fileRanksElement = rootElement.addElement("file-ranks");

        if (rootFolderId == DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
            List<Folder> folders = FolderUtil.findByRepositoryId(portletDataContext.getScopeGroupId());

            for (Folder folder : folders) {
                DLPortletDataHandlerImpl.exportFolder(portletDataContext, fileEntryTypesElement, foldersElement,
                        fileEntriesElement, fileShortcutsElement, fileRanksElement, folder, false);
            }
        } else {
            Folder folder = FolderUtil.findByPrimaryKey(rootFolderId);

            rootElement.addAttribute("root-folder-id", String.valueOf(folder.getFolderId()));

            DLPortletDataHandlerImpl.exportFolder(portletDataContext, fileEntryTypesElement, foldersElement,
                    fileEntriesElement, fileShortcutsElement, fileRanksElement, folder, true);
        }

        return document.formattedString();
    }

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

        portletDataContext.importPermissions("com.liferay.portlet.documentlibrary",
                portletDataContext.getSourceGroupId(), portletDataContext.getScopeGroupId());

        Document document = SAXReaderUtil.read(data);

        Element rootElement = document.getRootElement();

        Element fileEntryTypesElement = rootElement.element("file-entry-types");

        List<Element> fileEntryTypeElements = fileEntryTypesElement.elements("file-entry-type");

        for (Element fileEntryTypeElement : fileEntryTypeElements) {
            DLPortletDataHandlerImpl.importFileEntryType(portletDataContext, fileEntryTypeElement);
        }

        Element foldersElement = rootElement.element("folders");

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

        for (Element folderElement : folderElements) {
            DLPortletDataHandlerImpl.importFolder(portletDataContext, folderElement);
        }

        Element fileEntriesElement = rootElement.element("file-entries");

        List<Element> fileEntryElements = fileEntriesElement.elements("file-entry");

        for (Element fileEntryElement : fileEntryElements) {
            DLPortletDataHandlerImpl.importFileEntry(portletDataContext, fileEntryElement);
        }

        if (portletDataContext.getBooleanParameter(_NAMESPACE, "shortcuts")) {
            List<Element> fileShortcutElements = rootElement.element("file-shortcuts").elements("file-shortcut");

            for (Element fileShortcutElement : fileShortcutElements) {
                DLPortletDataHandlerImpl.importFileShortcut(portletDataContext, fileShortcutElement);
            }
        }

        if (portletDataContext.getBooleanParameter(_NAMESPACE, "ranks")) {
            Element fileRanksElement = rootElement.element("file-ranks");

            List<Element> fileRankElements = fileRanksElement.elements("file-rank");

            for (Element fileRankElement : fileRankElements) {
                DLPortletDataHandlerImpl.importFileRank(portletDataContext, fileRankElement);
            }
        }

        long rootFolderId = GetterUtil.getLong(rootElement.attributeValue("root-folder-id"));

        if (rootFolderId > 0) {
            Map<Long, Long> folderPKs = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(Folder.class);

            rootFolderId = MapUtil.getLong(folderPKs, rootFolderId, rootFolderId);

            portletPreferences.setValue("rootFolderId", String.valueOf(rootFolderId));
        }

        return portletPreferences;
    }

    private static final String _NAMESPACE = "document_library";

    private static PortletDataHandlerBoolean _comments = new PortletDataHandlerBoolean(_NAMESPACE, "comments");

    private static PortletDataHandlerBoolean _foldersAndDocuments = new PortletDataHandlerBoolean(_NAMESPACE,
            "folders-and-documents", true, true);

    private static PortletDataHandlerBoolean _ranks = new PortletDataHandlerBoolean(_NAMESPACE, "ranks");

    private static PortletDataHandlerBoolean _ratings = new PortletDataHandlerBoolean(_NAMESPACE, "ratings");

    private static PortletDataHandlerBoolean _shortcuts = new PortletDataHandlerBoolean(_NAMESPACE, "shortcuts");

    private static PortletDataHandlerBoolean _tags = new PortletDataHandlerBoolean(_NAMESPACE, "tags");

}