001
014
015 package com.liferay.portlet.documentlibrary.util;
016
017 import com.liferay.portal.kernel.lar.PortletDataContext;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.repository.model.FileEntry;
021 import com.liferay.portal.kernel.repository.model.FileVersion;
022 import com.liferay.portal.kernel.security.pacl.DoPrivileged;
023 import com.liferay.portal.kernel.util.InstanceFactory;
024 import com.liferay.portal.kernel.util.PropsKeys;
025 import com.liferay.portal.kernel.util.PropsUtil;
026 import com.liferay.portal.kernel.xml.Element;
027 import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;
028 import com.liferay.portal.util.ClassLoaderUtil;
029 import com.liferay.portal.util.PrefsPropsUtil;
030 import com.liferay.portal.util.PropsValues;
031 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
032 import com.liferay.portlet.documentlibrary.model.DLProcessorConstants;
033
034 import java.util.Map;
035 import java.util.concurrent.ConcurrentHashMap;
036
037
040 @DoPrivileged
041 public class DLProcessorRegistryImpl implements DLProcessorRegistry {
042
043 public void afterPropertiesSet() throws Exception {
044 ClassLoader classLoader = ClassLoaderUtil.getPortalClassLoader();
045
046 for (String dlProcessorClassName : _DL_FILE_ENTRY_PROCESSORS) {
047 DLProcessor dlProcessor = (DLProcessor)InstanceFactory.newInstance(
048 classLoader, dlProcessorClassName);
049
050 dlProcessor.afterPropertiesSet();
051
052 register(dlProcessor);
053 }
054 }
055
056 @Override
057 public void cleanUp(FileEntry fileEntry) {
058 if (!DLProcessorThreadLocal.isEnabled()) {
059 return;
060 }
061
062 for (DLProcessor dlProcessor : _dlProcessors.values()) {
063 if (dlProcessor.isSupported(fileEntry.getMimeType())) {
064 dlProcessor.cleanUp(fileEntry);
065 }
066 }
067 }
068
069 @Override
070 public void cleanUp(FileVersion fileVersion) {
071 if (!DLProcessorThreadLocal.isEnabled()) {
072 return;
073 }
074
075 for (DLProcessor dlProcessor : _dlProcessors.values()) {
076 if (dlProcessor.isSupported(fileVersion)) {
077 dlProcessor.cleanUp(fileVersion);
078 }
079 }
080 }
081
082 @Override
083 public void exportGeneratedFiles(
084 PortletDataContext portletDataContext, FileEntry fileEntry,
085 Element fileEntryElement)
086 throws Exception {
087
088 if ((fileEntry == null) || (fileEntry.getSize() == 0)) {
089 return;
090 }
091
092 FileVersion latestFileVersion = _getLatestFileVersion(fileEntry, true);
093
094 if (latestFileVersion == null) {
095 return;
096 }
097
098 for (DLProcessor dlProcessor : _dlProcessors.values()) {
099 if (dlProcessor.isSupported(latestFileVersion)) {
100 dlProcessor.exportGeneratedFiles(
101 portletDataContext, fileEntry, fileEntryElement);
102 }
103 }
104 }
105
106 @Override
107 public DLProcessor getDLProcessor(String dlProcessorType) {
108 return _dlProcessors.get(dlProcessorType);
109 }
110
111 @Override
112 public void importGeneratedFiles(
113 PortletDataContext portletDataContext, FileEntry fileEntry,
114 FileEntry importedFileEntry, Element fileEntryElement)
115 throws Exception {
116
117 if ((importedFileEntry == null) || (importedFileEntry.getSize() == 0)) {
118 return;
119 }
120
121 FileVersion fileVersion = importedFileEntry.getFileVersion();
122
123 if (fileVersion == null) {
124 return;
125 }
126
127 for (DLProcessor dlProcessor : _dlProcessors.values()) {
128 if (dlProcessor.isSupported(fileVersion)) {
129 dlProcessor.importGeneratedFiles(
130 portletDataContext, fileEntry, importedFileEntry,
131 fileEntryElement);
132 }
133 }
134 }
135
136 @Override
137 public boolean isPreviewableSize(FileVersion fileVersion) {
138 long fileEntryPreviewableProcessorMaxSize =
139 PropsValues.DL_FILE_ENTRY_PREVIEWABLE_PROCESSOR_MAX_SIZE;
140
141 try {
142 fileEntryPreviewableProcessorMaxSize = PrefsPropsUtil.getLong(
143 PropsKeys.DL_FILE_ENTRY_PREVIEWABLE_PROCESSOR_MAX_SIZE);
144 }
145 catch (Exception e) {
146 _log.error(e, e);
147 }
148
149 if (fileEntryPreviewableProcessorMaxSize == 0) {
150 return false;
151 }
152
153 if ((fileEntryPreviewableProcessorMaxSize > 0) &&
154 (fileVersion.getSize() > fileEntryPreviewableProcessorMaxSize)) {
155
156 return false;
157 }
158
159 return true;
160 }
161
162 @Override
163 public void register(DLProcessor dlProcessor) {
164 String type = _getType(dlProcessor);
165
166 _dlProcessors.put(type, dlProcessor);
167 }
168
169 @Override
170 public void trigger(FileEntry fileEntry, FileVersion fileVersion) {
171 trigger(fileEntry, fileVersion, false);
172 }
173
174 @Override
175 public void trigger(
176 FileEntry fileEntry, FileVersion fileVersion, boolean trusted) {
177
178 if (!DLProcessorThreadLocal.isEnabled()) {
179 return;
180 }
181
182 if ((fileEntry == null) || (fileEntry.getSize() == 0)) {
183 return;
184 }
185
186 FileVersion latestFileVersion = _getLatestFileVersion(
187 fileEntry, trusted);
188
189 if (latestFileVersion == null) {
190 return;
191 }
192
193 for (DLProcessor dlProcessor : _dlProcessors.values()) {
194 if (dlProcessor.isSupported(latestFileVersion)) {
195 dlProcessor.trigger(fileVersion, latestFileVersion);
196 }
197 }
198 }
199
200 @Override
201 public void unregister(DLProcessor dlProcessor) {
202 String type = _getType(dlProcessor);
203
204 _dlProcessors.remove(type);
205 }
206
207 private FileVersion _getLatestFileVersion(
208 FileEntry fileEntry, boolean trusted) {
209
210 FileVersion latestFileVersion = null;
211
212 try {
213 if (fileEntry.getModel() instanceof DLFileEntry) {
214 DLFileEntry dlFileEntry = (DLFileEntry)fileEntry.getModel();
215
216 latestFileVersion = new LiferayFileVersion(
217 dlFileEntry.getLatestFileVersion(trusted));
218 }
219 else {
220 latestFileVersion = DLImpl.getLatestFileVersion(
221 fileEntry, trusted);
222 }
223
224 return latestFileVersion;
225 }
226 catch (Exception e) {
227 _log.error(e, e);
228
229 return null;
230 }
231 }
232
233 private String _getType(DLProcessor dlProcessor) {
234 if (dlProcessor instanceof AudioProcessor) {
235 return DLProcessorConstants.AUDIO_PROCESSOR;
236 }
237 else if (dlProcessor instanceof ImageProcessor) {
238 return DLProcessorConstants.IMAGE_PROCESSOR;
239 }
240 else if (dlProcessor instanceof PDFProcessor) {
241 return DLProcessorConstants.PDF_PROCESSOR;
242 }
243 else if (dlProcessor instanceof RawMetadataProcessor) {
244 return DLProcessorConstants.RAW_METADATA_PROCESSOR;
245 }
246 else if (dlProcessor instanceof VideoProcessor) {
247 return DLProcessorConstants.VIDEO_PROCESSOR;
248 }
249
250 return null;
251 }
252
253 private static final String[] _DL_FILE_ENTRY_PROCESSORS =
254 PropsUtil.getArray(PropsKeys.DL_FILE_ENTRY_PROCESSORS);
255
256 private static Log _log = LogFactoryUtil.getLog(
257 DLProcessorRegistryImpl.class);
258
259 private Map<String, DLProcessor> _dlProcessors =
260 new ConcurrentHashMap<String, DLProcessor>();
261
262 }