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.portal.kernel.util;
016    
017    import com.liferay.portal.kernel.exception.PortalException;
018    import com.liferay.portal.kernel.repository.LocalRepository;
019    import com.liferay.portal.kernel.repository.RepositoryProviderUtil;
020    import com.liferay.portal.kernel.repository.capabilities.TemporaryFileEntriesCapability;
021    import com.liferay.portal.kernel.repository.capabilities.TemporaryFileEntriesScope;
022    import com.liferay.portal.kernel.repository.model.FileEntry;
023    import com.liferay.portal.kernel.repository.model.Folder;
024    import com.liferay.portal.model.Group;
025    import com.liferay.portal.model.Repository;
026    import com.liferay.portal.model.User;
027    import com.liferay.portal.service.GroupLocalServiceUtil;
028    import com.liferay.portal.service.RepositoryLocalServiceUtil;
029    import com.liferay.portal.service.ServiceContext;
030    import com.liferay.portal.service.UserLocalServiceUtil;
031    import com.liferay.portal.util.PortalUtil;
032    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
033    import com.liferay.portlet.documentlibrary.util.DLAppHelperThreadLocal;
034    
035    import java.io.File;
036    import java.io.FileInputStream;
037    import java.io.FileNotFoundException;
038    import java.io.InputStream;
039    
040    import java.util.ArrayList;
041    import java.util.List;
042    import java.util.UUID;
043    
044    /**
045     * @author Sergio Gonz??lez
046     * @author Matthew Kong
047     * @author Alexander Chow
048     * @author Iv??n Zaera
049     */
050    public class TempFileEntryUtil {
051    
052            public static FileEntry addTempFileEntry(
053                            long groupId, long userId, String folderName, String fileName,
054                            File file, String mimeType)
055                    throws PortalException {
056    
057                    InputStream inputStream = null;
058    
059                    try {
060                            inputStream = new FileInputStream(file);
061    
062                            return addTempFileEntry(
063                                    groupId, userId, folderName, fileName, inputStream, mimeType);
064                    }
065                    catch (FileNotFoundException fnfe) {
066                            throw new PortalException(fnfe);
067                    }
068                    finally {
069                            StreamUtil.cleanUp(inputStream);
070                    }
071            }
072    
073            public static FileEntry addTempFileEntry(
074                            long groupId, long userId, String folderName, String fileName,
075                            InputStream inputStream, String mimeType)
076                    throws PortalException {
077    
078                    TemporaryFileEntriesCapability temporaryFileEntriesCapability =
079                            _getTemporaryFileEntriesCapability(groupId);
080    
081                    return temporaryFileEntriesCapability.addTemporaryFileEntry(
082                            new TemporaryFileEntriesScope(_UUID, userId, folderName), fileName,
083                            mimeType, inputStream);
084            }
085    
086            public static void deleteTempFileEntry(long fileEntryId)
087                    throws PortalException {
088    
089                    LocalRepository localRepository =
090                            RepositoryProviderUtil.getFileEntryLocalRepository(fileEntryId);
091    
092                    FileEntry fileEntry = localRepository.getFileEntry(fileEntryId);
093    
094                    Folder folder = fileEntry.getFolder();
095    
096                    deleteTempFileEntry(
097                            fileEntry.getGroupId(), fileEntry.getUserId(), folder.getName(),
098                            fileEntry.getTitle());
099            }
100    
101            public static void deleteTempFileEntry(
102                            long groupId, long userId, String folderName, String fileName)
103                    throws PortalException {
104    
105                    TemporaryFileEntriesCapability temporaryFileEntriesCapability =
106                            _getTemporaryFileEntriesCapability(groupId);
107    
108                    temporaryFileEntriesCapability.deleteTemporaryFileEntry(
109                            new TemporaryFileEntriesScope(_UUID, userId, folderName), fileName);
110            }
111    
112            public static FileEntry getTempFileEntry(
113                            long groupId, long userId, String folderName, String fileName)
114                    throws PortalException {
115    
116                    TemporaryFileEntriesCapability temporaryFileEntriesCapability =
117                            _getTemporaryFileEntriesCapability(groupId);
118    
119                    return temporaryFileEntriesCapability.getTemporaryFileEntry(
120                            new TemporaryFileEntriesScope(_UUID, userId, folderName), fileName);
121            }
122    
123            public static String[] getTempFileNames(
124                            long groupId, long userId, String folderName)
125                    throws PortalException {
126    
127                    TemporaryFileEntriesCapability temporaryFileEntriesCapability =
128                            _getTemporaryFileEntriesCapability(groupId);
129    
130                    List<FileEntry> fileEntries =
131                            temporaryFileEntriesCapability.getTemporaryFileEntries(
132                                    new TemporaryFileEntriesScope(_UUID, userId, folderName));
133    
134                    List<String> fileNames = new ArrayList<>();
135    
136                    for (FileEntry fileEntry : fileEntries) {
137                            fileNames.add(fileEntry.getFileName());
138                    }
139    
140                    return ArrayUtil.toStringArray(fileNames);
141            }
142    
143            private static LocalRepository _addPortletRepository(
144                            long groupId, ServiceContext serviceContext)
145                    throws PortalException {
146    
147                    Repository repository = RepositoryLocalServiceUtil.fetchRepository(
148                            groupId, TempFileEntryUtil.class.getName(), StringPool.BLANK);
149    
150                    if (repository != null) {
151                            return RepositoryProviderUtil.getLocalRepository(
152                                    repository.getRepositoryId());
153                    }
154    
155                    Group group = GroupLocalServiceUtil.getGroup(groupId);
156    
157                    User user = UserLocalServiceUtil.getDefaultUser(group.getCompanyId());
158    
159                    long classNameId = PortalUtil.getClassNameId(
160                            "com.liferay.portal.repository.temporaryrepository." +
161                                    "TemporaryFileEntryRepository");
162    
163                    UnicodeProperties typeSettingsProperties = new UnicodeProperties();
164    
165                    boolean dlAppHelperEnabled = DLAppHelperThreadLocal.isEnabled();
166    
167                    try {
168                            DLAppHelperThreadLocal.setEnabled(false);
169    
170                            repository = RepositoryLocalServiceUtil.addRepository(
171                                    user.getUserId(), groupId, classNameId,
172                                    DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
173                                    TempFileEntryUtil.class.getName(), StringPool.BLANK,
174                                    StringPool.BLANK, typeSettingsProperties, true, serviceContext);
175    
176                            return RepositoryProviderUtil.getLocalRepository(
177                                    repository.getRepositoryId());
178                    }
179                    finally {
180                            DLAppHelperThreadLocal.setEnabled(dlAppHelperEnabled);
181                    }
182            }
183    
184            private static TemporaryFileEntriesCapability
185                            _getTemporaryFileEntriesCapability(long groupId)
186                    throws PortalException {
187    
188                    ServiceContext serviceContext = new ServiceContext();
189    
190                    serviceContext.setAddGroupPermissions(true);
191                    serviceContext.setAddGuestPermissions(true);
192    
193                    LocalRepository localRepository = _addPortletRepository(
194                            groupId, serviceContext);
195    
196                    return localRepository.getCapability(
197                            TemporaryFileEntriesCapability.class);
198            }
199    
200            private static final UUID _UUID = UUID.fromString(
201                    "00EF1134-B3EE-432A-BABD-367CEFA44DE1");
202    
203    }