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.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
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 }