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