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 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
080 _getTemporaryFileEntriesCapability(groupId);
081
082 return temporaryFileEntriesCapability.addTemporaryFileEntry(
083 new TemporaryFileEntriesScope(_UUID, userId, folderName), fileName,
084 mimeType, inputStream);
085 }
086
087 public static void deleteTempFileEntry(long fileEntryId)
088 throws PortalException {
089
090 LocalRepository localRepository =
091 RepositoryProviderUtil.getFileEntryLocalRepository(fileEntryId);
092
093 FileEntry fileEntry = localRepository.getFileEntry(fileEntryId);
094
095 Folder folder = fileEntry.getFolder();
096
097 deleteTempFileEntry(
098 fileEntry.getGroupId(), fileEntry.getUserId(), folder.getName(),
099 fileEntry.getTitle());
100 }
101
102 public static void deleteTempFileEntry(
103 long groupId, long userId, String folderName, String fileName)
104 throws PortalException {
105
106 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
107 _getTemporaryFileEntriesCapability(groupId);
108
109 temporaryFileEntriesCapability.deleteTemporaryFileEntry(
110 new TemporaryFileEntriesScope(_UUID, userId, folderName), fileName);
111 }
112
113 public static String getOriginalTempFileName(String tempFileName) {
114 String extension = FileUtil.getExtension(tempFileName);
115
116 int pos = tempFileName.lastIndexOf(TEMP_RANDOM_SUFFIX);
117
118 if (pos != -1) {
119 tempFileName = tempFileName.substring(0, pos);
120
121 if (Validator.isNotNull(extension)) {
122 tempFileName = tempFileName + StringPool.PERIOD + extension;
123 }
124 }
125
126 return tempFileName;
127 }
128
129 public static FileEntry getTempFileEntry(
130 long groupId, long userId, String folderName, String fileName)
131 throws PortalException {
132
133 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
134 _getTemporaryFileEntriesCapability(groupId);
135
136 return temporaryFileEntriesCapability.getTemporaryFileEntry(
137 new TemporaryFileEntriesScope(_UUID, userId, folderName), fileName);
138 }
139
140 public static String getTempFileName(String originalFileName) {
141 StringBundler sb = new StringBundler(5);
142
143 sb.append(FileUtil.stripExtension(originalFileName));
144 sb.append(TEMP_RANDOM_SUFFIX);
145 sb.append(StringUtil.randomString());
146
147 String extension = FileUtil.getExtension(originalFileName);
148
149 if (Validator.isNotNull(extension)) {
150 sb.append(StringPool.PERIOD);
151 sb.append(extension);
152 }
153
154 return sb.toString();
155 }
156
157 public static String[] getTempFileNames(
158 long groupId, long userId, String folderName)
159 throws PortalException {
160
161 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
162 _getTemporaryFileEntriesCapability(groupId);
163
164 List<FileEntry> fileEntries =
165 temporaryFileEntriesCapability.getTemporaryFileEntries(
166 new TemporaryFileEntriesScope(_UUID, userId, folderName));
167
168 List<String> fileNames = new ArrayList<>();
169
170 for (FileEntry fileEntry : fileEntries) {
171 fileNames.add(fileEntry.getFileName());
172 }
173
174 return ArrayUtil.toStringArray(fileNames);
175 }
176
177 private static LocalRepository _addPortletRepository(
178 long groupId, ServiceContext serviceContext)
179 throws PortalException {
180
181 Repository repository = RepositoryLocalServiceUtil.fetchRepository(
182 groupId, TempFileEntryUtil.class.getName(), StringPool.BLANK);
183
184 if (repository != null) {
185 return RepositoryProviderUtil.getLocalRepository(
186 repository.getRepositoryId());
187 }
188
189 Group group = GroupLocalServiceUtil.getGroup(groupId);
190
191 User user = UserLocalServiceUtil.getDefaultUser(group.getCompanyId());
192
193 long classNameId = PortalUtil.getClassNameId(
194 "com.liferay.portal.repository.temporaryrepository." +
195 "TemporaryFileEntryRepository");
196
197 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
198
199 boolean dlAppHelperEnabled = DLAppHelperThreadLocal.isEnabled();
200
201 try {
202 DLAppHelperThreadLocal.setEnabled(false);
203
204 repository = RepositoryLocalServiceUtil.addRepository(
205 user.getUserId(), groupId, classNameId,
206 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
207 TempFileEntryUtil.class.getName(), StringPool.BLANK,
208 StringPool.BLANK, typeSettingsProperties, true, serviceContext);
209
210 return RepositoryProviderUtil.getLocalRepository(
211 repository.getRepositoryId());
212 }
213 finally {
214 DLAppHelperThreadLocal.setEnabled(dlAppHelperEnabled);
215 }
216 }
217
218 private static TemporaryFileEntriesCapability
219 _getTemporaryFileEntriesCapability(long groupId)
220 throws PortalException {
221
222 ServiceContext serviceContext = new ServiceContext();
223
224 serviceContext.setAddGroupPermissions(true);
225 serviceContext.setAddGuestPermissions(true);
226
227 LocalRepository localRepository = _addPortletRepository(
228 groupId, serviceContext);
229
230 return localRepository.getCapability(
231 TemporaryFileEntriesCapability.class);
232 }
233
234 private static final UUID _UUID = UUID.fromString(
235 "00EF1134-B3EE-432A-BABD-367CEFA44DE1");
236
237 }