001
014
015 package com.liferay.portal.kernel.util;
016
017 import com.liferay.document.library.kernel.model.DLFolderConstants;
018 import com.liferay.document.library.kernel.util.DLAppHelperThreadLocal;
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.model.Group;
021 import com.liferay.portal.kernel.model.Repository;
022 import com.liferay.portal.kernel.model.User;
023 import com.liferay.portal.kernel.repository.LocalRepository;
024 import com.liferay.portal.kernel.repository.RepositoryProviderUtil;
025 import com.liferay.portal.kernel.repository.capabilities.TemporaryFileEntriesCapability;
026 import com.liferay.portal.kernel.repository.capabilities.TemporaryFileEntriesScope;
027 import com.liferay.portal.kernel.repository.model.FileEntry;
028 import com.liferay.portal.kernel.repository.model.Folder;
029 import com.liferay.portal.kernel.service.GroupLocalServiceUtil;
030 import com.liferay.portal.kernel.service.RepositoryLocalServiceUtil;
031 import com.liferay.portal.kernel.service.ServiceContext;
032 import com.liferay.portal.kernel.service.UserLocalServiceUtil;
033
034 import java.io.File;
035 import java.io.FileInputStream;
036 import java.io.FileNotFoundException;
037 import java.io.InputStream;
038
039 import java.util.ArrayList;
040 import java.util.List;
041 import java.util.UUID;
042
043
049 public class TempFileEntryUtil {
050
051 public static final String TEMP_RANDOM_SUFFIX = "--tempRandomSuffix--";
052
053 public static FileEntry addTempFileEntry(
054 long groupId, long userId, String folderName, String fileName,
055 File file, String mimeType)
056 throws PortalException {
057
058 InputStream inputStream = null;
059
060 try {
061 inputStream = new FileInputStream(file);
062
063 return addTempFileEntry(
064 groupId, userId, folderName, fileName, inputStream, mimeType);
065 }
066 catch (FileNotFoundException fnfe) {
067 throw new PortalException(fnfe);
068 }
069 finally {
070 StreamUtil.cleanUp(inputStream);
071 }
072 }
073
074 public static FileEntry addTempFileEntry(
075 long groupId, long userId, String folderName, String fileName,
076 InputStream inputStream, String mimeType)
077 throws PortalException {
078
079 boolean dlAppHelperEnabled = DLAppHelperThreadLocal.isEnabled();
080
081 try {
082 DLAppHelperThreadLocal.setEnabled(false);
083
084 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
085 _getTemporaryFileEntriesCapability(groupId);
086
087 return temporaryFileEntriesCapability.addTemporaryFileEntry(
088 new TemporaryFileEntriesScope(_UUID, userId, folderName),
089 fileName, mimeType, inputStream);
090 }
091 finally {
092 DLAppHelperThreadLocal.setEnabled(dlAppHelperEnabled);
093 }
094 }
095
096 public static void deleteTempFileEntry(long fileEntryId)
097 throws PortalException {
098
099 LocalRepository localRepository =
100 RepositoryProviderUtil.getFileEntryLocalRepository(fileEntryId);
101
102 FileEntry fileEntry = localRepository.getFileEntry(fileEntryId);
103
104 Folder folder = fileEntry.getFolder();
105
106 deleteTempFileEntry(
107 fileEntry.getGroupId(), fileEntry.getUserId(), folder.getName(),
108 fileEntry.getTitle());
109 }
110
111 public static void deleteTempFileEntry(
112 long groupId, long userId, String folderName, String fileName)
113 throws PortalException {
114
115 boolean dlAppHelperEnabled = DLAppHelperThreadLocal.isEnabled();
116
117 try {
118 DLAppHelperThreadLocal.setEnabled(false);
119
120 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
121 _getTemporaryFileEntriesCapability(groupId);
122
123 temporaryFileEntriesCapability.deleteTemporaryFileEntry(
124 new TemporaryFileEntriesScope(_UUID, userId, folderName),
125 fileName);
126 }
127 finally {
128 DLAppHelperThreadLocal.setEnabled(dlAppHelperEnabled);
129 }
130 }
131
132 public static String getOriginalTempFileName(String tempFileName) {
133 String extension = FileUtil.getExtension(tempFileName);
134
135 int pos = tempFileName.lastIndexOf(TEMP_RANDOM_SUFFIX);
136
137 if (pos != -1) {
138 tempFileName = tempFileName.substring(0, pos);
139
140 if (Validator.isNotNull(extension)) {
141 tempFileName = tempFileName + StringPool.PERIOD + extension;
142 }
143 }
144
145 return tempFileName;
146 }
147
148 public static FileEntry getTempFileEntry(
149 long groupId, long userId, String folderName, String fileName)
150 throws PortalException {
151
152 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
153 _getTemporaryFileEntriesCapability(groupId);
154
155 return temporaryFileEntriesCapability.getTemporaryFileEntry(
156 new TemporaryFileEntriesScope(_UUID, userId, folderName), fileName);
157 }
158
159 public static String getTempFileName(String originalFileName) {
160 StringBundler sb = new StringBundler(5);
161
162 sb.append(FileUtil.stripExtension(originalFileName));
163 sb.append(TEMP_RANDOM_SUFFIX);
164 sb.append(StringUtil.randomString());
165
166 String extension = FileUtil.getExtension(originalFileName);
167
168 if (Validator.isNotNull(extension)) {
169 sb.append(StringPool.PERIOD);
170 sb.append(extension);
171 }
172
173 return sb.toString();
174 }
175
176 public static String[] getTempFileNames(
177 long groupId, long userId, String folderName)
178 throws PortalException {
179
180 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
181 _getTemporaryFileEntriesCapability(groupId);
182
183 List<FileEntry> fileEntries =
184 temporaryFileEntriesCapability.getTemporaryFileEntries(
185 new TemporaryFileEntriesScope(_UUID, userId, folderName));
186
187 List<String> fileNames = new ArrayList<>();
188
189 for (FileEntry fileEntry : fileEntries) {
190 fileNames.add(fileEntry.getFileName());
191 }
192
193 return ArrayUtil.toStringArray(fileNames);
194 }
195
196 private static LocalRepository _addPortletRepository(
197 long groupId, ServiceContext serviceContext)
198 throws PortalException {
199
200 Repository repository = RepositoryLocalServiceUtil.fetchRepository(
201 groupId, TempFileEntryUtil.class.getName(), StringPool.BLANK);
202
203 if (repository != null) {
204 return RepositoryProviderUtil.getLocalRepository(
205 repository.getRepositoryId());
206 }
207
208 Group group = GroupLocalServiceUtil.getGroup(groupId);
209
210 User user = UserLocalServiceUtil.getDefaultUser(group.getCompanyId());
211
212 long classNameId = PortalUtil.getClassNameId(
213 "com.liferay.portal.repository.temporaryrepository." +
214 "TemporaryFileEntryRepository");
215
216 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
217
218 boolean dlAppHelperEnabled = DLAppHelperThreadLocal.isEnabled();
219
220 try {
221 DLAppHelperThreadLocal.setEnabled(false);
222
223 repository = RepositoryLocalServiceUtil.addRepository(
224 user.getUserId(), groupId, classNameId,
225 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
226 TempFileEntryUtil.class.getName(), StringPool.BLANK,
227 StringPool.BLANK, typeSettingsProperties, true, serviceContext);
228
229 return RepositoryProviderUtil.getLocalRepository(
230 repository.getRepositoryId());
231 }
232 finally {
233 DLAppHelperThreadLocal.setEnabled(dlAppHelperEnabled);
234 }
235 }
236
237 private static TemporaryFileEntriesCapability
238 _getTemporaryFileEntriesCapability(long groupId)
239 throws PortalException {
240
241 ServiceContext serviceContext = new ServiceContext();
242
243 serviceContext.setAddGroupPermissions(true);
244 serviceContext.setAddGuestPermissions(true);
245
246 LocalRepository localRepository = _addPortletRepository(
247 groupId, serviceContext);
248
249 return localRepository.getCapability(
250 TemporaryFileEntriesCapability.class);
251 }
252
253 private static final UUID _UUID = UUID.fromString(
254 "00EF1134-B3EE-432A-BABD-367CEFA44DE1");
255
256 }