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