001    /**
002     * Copyright (c) 2000-2012 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.util;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.exception.SystemException;
019    import com.liferay.portal.kernel.repository.model.FileVersion;
020    import com.liferay.portal.kernel.util.ArrayUtil;
021    import com.liferay.portal.kernel.util.ContentTypes;
022    import com.liferay.portal.kernel.util.FileUtil;
023    import com.liferay.portal.kernel.util.GetterUtil;
024    import com.liferay.portal.kernel.util.MimeTypesUtil;
025    import com.liferay.portal.kernel.util.Validator;
026    import com.liferay.portal.security.permission.ActionKeys;
027    import com.liferay.portal.security.permission.PermissionChecker;
028    import com.liferay.portlet.documentlibrary.service.permission.DLFolderPermission;
029    
030    import java.io.File;
031    import java.io.InputStream;
032    
033    import java.util.ArrayList;
034    import java.util.List;
035    
036    /**
037     * @author Alexander Chow
038     */
039    public class DLAppUtil {
040    
041            public static long[] filterFolderIds(
042                            PermissionChecker permissionChecker, long groupId, long[] folderIds)
043                    throws PortalException, SystemException {
044    
045                    List<Long> viewableFolderIds = new ArrayList<Long>(folderIds.length);
046    
047                    for (long folderId : folderIds) {
048                            if (DLFolderPermission.contains(
049                                            permissionChecker, groupId, folderId, ActionKeys.VIEW)) {
050    
051                                    viewableFolderIds.add(folderId);
052                            }
053                    }
054    
055                    return ArrayUtil.toArray(
056                            viewableFolderIds.toArray(new Long[viewableFolderIds.size()]));
057            }
058    
059            public static String getExtension(String title, String sourceFileName) {
060                    String extension = FileUtil.getExtension(sourceFileName);
061    
062                    if (Validator.isNull(extension)) {
063                            extension = FileUtil.getExtension(title);
064                    }
065    
066                    return extension;
067            }
068    
069            public static String getMimeType(
070                    String sourceFileName, String mimeType, String title, File file,
071                    InputStream is) {
072    
073                    if (Validator.isNull(mimeType) ||
074                            !mimeType.equals(ContentTypes.APPLICATION_OCTET_STREAM)) {
075    
076                            return mimeType;
077                    }
078    
079                    if (Validator.isNull(title)) {
080                            title = sourceFileName;
081                    }
082    
083                    String extension = getExtension(title, sourceFileName);
084    
085                    String titleWithExtension = DLUtil.getTitleWithExtension(
086                            title, extension);
087    
088                    if (file != null) {
089                            mimeType = MimeTypesUtil.getContentType(file, titleWithExtension);
090                    }
091                    else {
092                            mimeType = MimeTypesUtil.getContentType(is, titleWithExtension);
093                    }
094    
095                    return mimeType;
096            }
097    
098            public static boolean isMajorVersion(
099                    FileVersion previousFileVersion, FileVersion currentFileVersion) {
100    
101                    long currentVersion = GetterUtil.getLong(
102                            currentFileVersion.getVersion());
103                    long previousVersion = GetterUtil.getLong(
104                            previousFileVersion.getVersion());
105    
106                    return (currentVersion - previousVersion) >= 1;
107            }
108    
109    }