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.capabilities.TemporaryFileEntriesScope;
021 import com.liferay.portal.kernel.repository.model.FileEntry;
022 import com.liferay.portal.model.Group;
023 import com.liferay.portal.model.Repository;
024 import com.liferay.portal.model.User;
025 import com.liferay.portal.service.GroupLocalServiceUtil;
026 import com.liferay.portal.service.RepositoryLocalServiceUtil;
027 import com.liferay.portal.service.ServiceContext;
028 import com.liferay.portal.service.UserLocalServiceUtil;
029 import com.liferay.portal.util.PortalUtil;
030 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
031 import com.liferay.portlet.documentlibrary.model.DLFolder;
032 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
033 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
034 import com.liferay.portlet.documentlibrary.util.DLAppHelperThreadLocal;
035
036 import java.io.File;
037 import java.io.FileInputStream;
038 import java.io.FileNotFoundException;
039 import java.io.InputStream;
040
041 import java.util.ArrayList;
042 import java.util.List;
043 import java.util.UUID;
044
045
051 public class TempFileEntryUtil {
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 DLFileEntry dlFileEntry = DLFileEntryLocalServiceUtil.getDLFileEntry(
091 fileEntryId);
092
093 DLFolder dlFolder = dlFileEntry.getFolder();
094
095 deleteTempFileEntry(
096 dlFileEntry.getGroupId(), dlFileEntry.getUserId(),
097 dlFolder.getName(), dlFileEntry.getTitle());
098 }
099
100 public static void deleteTempFileEntry(
101 long groupId, long userId, String folderName, String fileName)
102 throws PortalException {
103
104 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
105 _getTemporaryFileEntriesCapability(groupId);
106
107 temporaryFileEntriesCapability.deleteTemporaryFileEntry(
108 new TemporaryFileEntriesScope(_UUID, userId, folderName), fileName);
109 }
110
111 public static FileEntry getTempFileEntry(
112 long groupId, long userId, String folderName, String fileName)
113 throws PortalException {
114
115 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
116 _getTemporaryFileEntriesCapability(groupId);
117
118 return temporaryFileEntriesCapability.getTemporaryFileEntry(
119 new TemporaryFileEntriesScope(_UUID, userId, folderName), fileName);
120 }
121
122 public static String[] getTempFileNames(
123 long groupId, long userId, String folderName)
124 throws PortalException {
125
126 TemporaryFileEntriesCapability temporaryFileEntriesCapability =
127 _getTemporaryFileEntriesCapability(groupId);
128
129 List<FileEntry> fileEntries =
130 temporaryFileEntriesCapability.getTemporaryFileEntries(
131 new TemporaryFileEntriesScope(_UUID, userId, folderName));
132
133 List<String> fileNames = new ArrayList<>();
134
135 for (FileEntry fileEntry : fileEntries) {
136 fileNames.add(fileEntry.getFileName());
137 }
138
139 return ArrayUtil.toStringArray(fileNames);
140 }
141
142 private static LocalRepository _addPortletRepository(
143 long groupId, ServiceContext serviceContext)
144 throws PortalException {
145
146 Repository repository = RepositoryLocalServiceUtil.fetchRepository(
147 groupId, TempFileEntryUtil.class.getName(), StringPool.BLANK);
148
149 if (repository != null) {
150 return RepositoryLocalServiceUtil.getLocalRepositoryImpl(
151 repository.getRepositoryId());
152 }
153
154 Group group = GroupLocalServiceUtil.getGroup(groupId);
155
156 User user = UserLocalServiceUtil.getDefaultUser(group.getCompanyId());
157
158 long classNameId = PortalUtil.getClassNameId(
159 "com.liferay.portal.repository.temporaryrepository." +
160 "TemporaryFileEntryRepository");
161
162 UnicodeProperties typeSettingsProperties = new UnicodeProperties();
163
164 boolean dlAppHelperEnabled = DLAppHelperThreadLocal.isEnabled();
165
166 try {
167 DLAppHelperThreadLocal.setEnabled(false);
168
169 repository = RepositoryLocalServiceUtil.addRepository(
170 user.getUserId(), groupId, classNameId,
171 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID,
172 TempFileEntryUtil.class.getName(), StringPool.BLANK,
173 StringPool.BLANK, typeSettingsProperties, true, serviceContext);
174
175 return RepositoryLocalServiceUtil.getLocalRepositoryImpl(
176 repository.getRepositoryId());
177 }
178 finally {
179 DLAppHelperThreadLocal.setEnabled(dlAppHelperEnabled);
180 }
181 }
182
183 private static TemporaryFileEntriesCapability
184 _getTemporaryFileEntriesCapability(long groupId)
185 throws PortalException {
186
187 ServiceContext serviceContext = new ServiceContext();
188
189 serviceContext.setAddGroupPermissions(true);
190 serviceContext.setAddGuestPermissions(true);
191
192 LocalRepository localRepository = _addPortletRepository(
193 groupId, serviceContext);
194
195 return localRepository.getCapability(
196 TemporaryFileEntriesCapability.class);
197 }
198
199 private static final UUID _UUID = UUID.fromString(
200 "00EF1134-B3EE-432A-BABD-367CEFA44DE1");
201
202 }