au.com.permeance.liferay.portlet.documentlibrary.action.FolderInfoAction.java Source code

Java tutorial

Introduction

Here is the source code for au.com.permeance.liferay.portlet.documentlibrary.action.FolderInfoAction.java

Source

/**
 * Copyright (C) 2013 Permeance Technologies
 * 
 * This program is free software: you can redistribute it and/or modify it under the terms of the
 * GNU General Public License as published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program 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
 * General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with this program. If
 * not, see <http://www.gnu.org/licenses/>.
 */

package au.com.permeance.liferay.portlet.documentlibrary.action;

import au.com.permeance.liferay.portlet.documentlibrary.model.DLFolderInfo;
import au.com.permeance.liferay.portlet.documentlibrary.model.DLFolderUsage;
import au.com.permeance.liferay.portlet.documentlibrary.service.DLFolderUsageServiceUtil;

import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.repository.model.Folder;
import com.liferay.portal.kernel.struts.BaseStrutsPortletAction;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.StringPool;
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Repository;
import com.liferay.portal.model.User;
import com.liferay.portal.security.auth.PrincipalException;
import com.liferay.portal.security.permission.ActionKeys;
import com.liferay.portal.security.permission.PermissionChecker;
import com.liferay.portal.security.permission.PermissionThreadLocal;
import com.liferay.portal.service.RepositoryServiceUtil;
import com.liferay.portal.service.ServiceContext;
import com.liferay.portal.service.ServiceContextFactory;
import com.liferay.portal.service.UserServiceUtil;
import com.liferay.portal.theme.ThemeDisplay;
import com.liferay.portlet.documentlibrary.service.DLAppServiceUtil;

import java.util.HashMap;
import java.util.Map;

import javax.portlet.PortletConfig;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

/**
 * Folder Usage Action.
 * 
 * This action calculates the usage of a folder (including sub-folders and files).
 * 
 * @author Tim Telcik <tim.telcik@permeance.com.au>
 */
public class FolderInfoAction extends BaseStrutsPortletAction {

    private static final Log s_log = LogFactoryUtil.getLog(FolderInfoAction.class);

    @Override
    public String render(PortletConfig portletConfig, RenderRequest renderRequest, RenderResponse renderResponse)
            throws Exception {

        final String FOLDER_INFO_PAGE_PATH = "/portlet/document_library/view_folder_info.jsp";

        DLFolderInfo folderInfo = buildFolderInfo(renderRequest, renderResponse);

        if (s_log.isDebugEnabled()) {
            s_log.debug("folderInfo: " + folderInfo);
        }

        Map<String, Object> folderInfoMap = buildFolderInfoMap(folderInfo);

        if (s_log.isDebugEnabled()) {
            s_log.debug("folderInfoMap: " + folderInfoMap);
        }

        renderRequest.setAttribute("folderInfoMap", folderInfoMap);

        return FOLDER_INFO_PAGE_PATH;
    }

    protected DLFolderInfo buildFolderInfo(RenderRequest renderRequest, RenderResponse renderResponse)
            throws Exception {

        ThemeDisplay themeDisplay = (ThemeDisplay) renderRequest.getAttribute(WebKeys.THEME_DISPLAY);
        long groupId = ParamUtil.getLong(renderRequest, "groupId");
        long scopeGroupId = themeDisplay.getScopeGroupId();
        String scopeGroupName = themeDisplay.getScopeGroupName();
        long repositoryId = ParamUtil.getLong(renderRequest, "repositoryId");
        long folderId = ParamUtil.getLong(renderRequest, "folderId");
        Folder folder = DLAppServiceUtil.getFolder(folderId);
        ServiceContext serviceContext = ServiceContextFactory.getInstance(Folder.class.getName(), renderRequest);

        if (s_log.isDebugEnabled()) {
            s_log.debug("building folder info ...");
            ParamUtil.print(renderRequest);
            s_log.debug("groupId: " + groupId);
            s_log.debug("scopeGroupId: " + scopeGroupId);
            s_log.debug("scopeGroupName: " + scopeGroupName);
            s_log.debug("repositoryId: " + repositoryId);
            s_log.debug("folderId: " + folderId);
        }

        PermissionChecker permissionChecker = PermissionThreadLocal.getPermissionChecker();

        if (!folder.containsPermission(permissionChecker, ActionKeys.VIEW)) {
            throw new PrincipalException();
        }

        DLFolderInfo folderInfo = new DLFolderInfo();

        try {

            User user = UserServiceUtil.getUserById(folder.getUserId());

            DLFolderUsage folderUsage = DLFolderUsageServiceUtil.calculateFolderUsage(repositoryId, folderId,
                    serviceContext);

            folderInfo.setFolderId(folderId);
            folderInfo.setFolderName(folder.getName());
            folderInfo.setFolderCreateDate(folder.getCreateDate());
            folderInfo.setFolderDescription(folder.getDescription());
            folderInfo.setFolderPath(buildPath(folder));
            folderInfo.setFolderUsage(folderUsage);
            folderInfo.setFolderUserId(folder.getUserId());

            if (user != null) {
                folderInfo.setFolderUserFullName(user.getFullName());
            }

            folderInfo.setRepositoryId(repositoryId);

            Repository repository = null;
            if (repositoryId != scopeGroupId) {
                repository = RepositoryServiceUtil.getRepository(repositoryId);
                if (repository != null) {
                    folderInfo.setRepositoryName(repository.getName());
                    folderInfo.setRepositoryClassName(repository.getClassName());
                    folderInfo.setRepositoryDescription(repository.getDescription());
                }
            }

        } catch (Exception e) {

            String msg = "Error building information for folder " + folderId + " in repository " + repositoryId
                    + " : " + e.getMessage();

            s_log.error(msg, e);

            throw new PortalException(msg, e);

        } finally {

            // placeholder

        }

        return folderInfo;
    }

    protected Map<String, Object> buildFolderInfoMap(DLFolderInfo folderInfo) {

        Map<String, Object> map = new HashMap<String, Object>();

        map.put("folderCreateDate", folderInfo.getFolderCreateDate());
        map.put("folderDescription", folderInfo.getFolderDescription());
        map.put("folderId", folderInfo.getFolderId());
        map.put("folderName", folderInfo.getFolderName());
        map.put("folderPath", folderInfo.getFolderPath());
        map.put("folderUsageFileCount", folderInfo.getFolderUsage().getFileCount());
        map.put("folderUsageFolderCount", folderInfo.getFolderUsage().getFolderCount());
        map.put("folderUsageFolderSize", folderInfo.getFolderUsage().getFolderSize());
        map.put("folderUserId", folderInfo.getFolderUserId());
        map.put("folderUserFullName", folderInfo.getFolderUserFullName());
        map.put("repositoryId", folderInfo.getRepositoryId());
        map.put("repositoryName", folderInfo.getRepositoryName());
        map.put("repositoryClassName", folderInfo.getRepositoryClassName());
        map.put("repositoryDescription", folderInfo.getRepositoryDescription());

        return map;
    }

    public String buildPath(Folder folder) throws PortalException, SystemException {

        StringBuilder sb = new StringBuilder();

        Folder curFolder = folder;

        while (curFolder != null) {
            sb.insert(0, curFolder.getName());
            sb.insert(0, StringPool.SLASH);

            curFolder = curFolder.getParentFolder();
        }

        return sb.toString();
    }

}