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.capabilities.TemporaryFileEntriesCapability;
020    import com.liferay.portal.kernel.repository.model.FileEntry;
021    import com.liferay.portal.model.Group;
022    import com.liferay.portal.model.Repository;
023    import com.liferay.portal.model.User;
024    import com.liferay.portal.service.GroupLocalServiceUtil;
025    import com.liferay.portal.service.RepositoryLocalServiceUtil;
026    import com.liferay.portal.service.ServiceContext;
027    import com.liferay.portal.service.UserLocalServiceUtil;
028    import com.liferay.portal.util.PortalUtil;
029    import com.liferay.portlet.documentlibrary.model.DLFileEntry;
030    import com.liferay.portlet.documentlibrary.model.DLFolder;
031    import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
032    import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
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                            _UUID, userId, _getFolderPath(userId, folderName), fileName,
083                            mimeType, inputStream);
084            }
085    
086            public static void deleteTempFileEntry(long fileEntryId)
087                    throws PortalException {
088    
089                    DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.getDLFileEntry(
090                            fileEntryId);
091    
092                    DLFolder dlFolder = dlFileEntry.getFolder();
093    
094                    deleteTempFileEntry(
095                            dlFileEntry.getGroupId(), dlFileEntry.getUserId(),
096                            dlFolder.getName(), dlFileEntry.getTitle());
097            }
098    
099            public static void deleteTempFileEntry(
100                            long groupId, long userId, String folderName, String fileName)
101                    throws PortalException {
102    
103                    TemporaryFileEntriesCapability temporaryFileEntriesCapability =
104                            _getTemporaryFileEntriesCapability(groupId);
105    
106                    temporaryFileEntriesCapability.deleteTemporaryFileEntry(
107                            _UUID, _getFolderPath(userId, folderName), fileName);
108            }
109    
110            public static FileEntry getTempFileEntry(
111                            long groupId, long userId, String folderName, String fileName)
112                    throws PortalException {
113    
114                    TemporaryFileEntriesCapability temporaryFileEntriesCapability =
115                            _getTemporaryFileEntriesCapability(groupId);
116    
117                    return temporaryFileEntriesCapability.getTemporaryFileEntries(
118                            _UUID, _getFolderPath(userId, folderName), fileName);
119            }
120    
121            public static String[] getTempFileNames(
122                            long groupId, long userId, String folderName)
123                    throws PortalException {
124    
125                    TemporaryFileEntriesCapability temporaryFileEntriesCapability =
126                            _getTemporaryFileEntriesCapability(groupId);
127    
128                    List<FileEntry> fileEntries =
129                            temporaryFileEntriesCapability.getTemporaryFileEntries(
130                                    _UUID, _getFolderPath(userId, folderName));
131    
132                    List<String> fileNames = new ArrayList<>();
133    
134                    for (FileEntry fileEntry : fileEntries) {
135                            fileNames.add(fileEntry.getFileName());
136                    }
137    
138                    return ArrayUtil.toStringArray(fileNames);
139            }
140    
141            private static LocalRepository _addPortletRepository(
142                            long groupId, ServiceContext serviceContext)
143                    throws PortalException {
144    
145                    Repository repository = RepositoryLocalServiceUtil.fetchRepository(
146                            groupId, TempFileEntryUtil.class.getName(), StringPool.BLANK);
147    
148                    if (repository != null) {
149                            return RepositoryLocalServiceUtil.getLocalRepositoryImpl(
150                                    repository.getRepositoryId());
151                    }
152    
153                    Group group = GroupLocalServiceUtil.getGroup(groupId);
154    
155                    User user = UserLocalServiceUtil.getDefaultUser(group.getCompanyId());
156    
157                    long classNameId = PortalUtil.getClassNameId(
158                            "com.liferay.portal.repository.temporaryrepository." +
159                                    "TemporaryRepository");
160    
161                    UnicodeProperties typeSettingsProperties = new UnicodeProperties();
162    
163                    boolean dlAppHelperEnabled = DLAppHelperThreadLocal.isEnabled();
164    
165                    try {
166                            DLAppHelperThreadLocal.setEnabled(false);
167    
168                            repository = RepositoryLocalServiceUtil.addRepository(
169                                    user.getUserId(), groupId, classNameId,
170                                    DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
171                                    TempFileEntryUtil.class.getName(), StringPool.BLANK,
172                                    StringPool.BLANK, typeSettingsProperties, true, serviceContext);
173    
174                            return RepositoryLocalServiceUtil.getLocalRepositoryImpl(
175                                    repository.getRepositoryId());
176                    }
177                    finally {
178                            DLAppHelperThreadLocal.setEnabled(dlAppHelperEnabled);
179                    }
180            }
181    
182            private static String _getFolderPath(long userId, String tempFolderName) {
183                    return
184                            String.valueOf(userId) + StringPool.FORWARD_SLASH + tempFolderName;
185            }
186    
187            private static TemporaryFileEntriesCapability
188                            _getTemporaryFileEntriesCapability(long groupId)
189                    throws PortalException {
190    
191                    ServiceContext serviceContext = new ServiceContext();
192    
193                    serviceContext.setAddGroupPermissions(true);
194                    serviceContext.setAddGuestPermissions(true);
195    
196                    LocalRepository localRepository = _addPortletRepository(
197                            groupId, serviceContext);
198    
199                    return localRepository.getCapability(
200                            TemporaryFileEntriesCapability.class);
201            }
202    
203            private static final UUID _UUID = UUID.fromString(
204                    "00EF1134-B3EE-432A-BABD-367CEFA44DE1");
205    
206    }