001
014
015 package com.liferay.portlet.documentlibrary.util;
016
017 import com.liferay.portal.kernel.dao.orm.QueryUtil;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.exception.SystemException;
020 import com.liferay.portal.kernel.lar.PortletDataContext;
021 import com.liferay.portal.kernel.log.Log;
022 import com.liferay.portal.kernel.log.LogFactoryUtil;
023 import com.liferay.portal.kernel.messaging.DestinationNames;
024 import com.liferay.portal.kernel.messaging.MessageBusException;
025 import com.liferay.portal.kernel.messaging.MessageBusUtil;
026 import com.liferay.portal.kernel.metadata.RawMetadataProcessorUtil;
027 import com.liferay.portal.kernel.repository.model.FileEntry;
028 import com.liferay.portal.kernel.repository.model.FileVersion;
029 import com.liferay.portal.kernel.search.Indexer;
030 import com.liferay.portal.kernel.search.IndexerRegistryUtil;
031 import com.liferay.portal.kernel.security.pacl.DoPrivileged;
032 import com.liferay.portal.kernel.util.StreamUtil;
033 import com.liferay.portal.kernel.xml.Element;
034 import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
035 import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;
036 import com.liferay.portal.service.ServiceContext;
037 import com.liferay.portal.util.PortalUtil;
038 import com.liferay.portal.util.PropsValues;
039 import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
040 import com.liferay.portlet.documentlibrary.service.DLFileEntryMetadataLocalServiceUtil;
041 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
042 import com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil;
043 import com.liferay.portlet.dynamicdatamapping.storage.Fields;
044
045 import java.io.File;
046 import java.io.InputStream;
047
048 import java.util.List;
049 import java.util.Map;
050
051
056 @DoPrivileged
057 public class RawMetadataProcessorImpl
058 implements DLProcessor, RawMetadataProcessor {
059
060 public void afterPropertiesSet() {
061 }
062
063 public void cleanUp(FileEntry fileEntry) {
064 }
065
066 public void cleanUp(FileVersion fileVersion) {
067 }
068
069 public void copy(
070 FileVersion sourceFileVersion, FileVersion destinationFileVersion) {
071 }
072
073 public void exportGeneratedFiles(
074 PortletDataContext portletDataContext, FileEntry fileEntry,
075 Element fileEntryElement)
076 throws Exception {
077
078 return;
079 }
080
081 public void generateMetadata(FileVersion fileVersion)
082 throws SystemException {
083
084 long fileEntryMetadataCount =
085 DLFileEntryMetadataLocalServiceUtil.
086 getFileVersionFileEntryMetadatasCount(
087 fileVersion.getFileVersionId());
088
089 if (fileEntryMetadataCount == 0) {
090 trigger(fileVersion);
091 }
092 }
093
094 public void importGeneratedFiles(
095 PortletDataContext portletDataContext, FileEntry fileEntry,
096 FileEntry importedFileEntry, Element fileEntryElement)
097 throws Exception {
098
099 return;
100 }
101
102 public boolean isSupported(FileVersion fileVersion) {
103 return true;
104 }
105
106 public boolean isSupported(String mimeType) {
107 return true;
108 }
109
110 public void saveMetadata(FileVersion fileVersion)
111 throws PortalException, SystemException {
112
113 Map<String, Fields> rawMetadataMap = null;
114
115 if (fileVersion instanceof LiferayFileVersion) {
116 try {
117 LiferayFileVersion liferayFileVersion =
118 (LiferayFileVersion)fileVersion;
119
120 File file = liferayFileVersion.getFile(false);
121
122 rawMetadataMap = RawMetadataProcessorUtil.getRawMetadataMap(
123 fileVersion.getExtension(), fileVersion.getMimeType(),
124 file);
125 }
126 catch (UnsupportedOperationException uoe) {
127 }
128 }
129
130 if (rawMetadataMap == null) {
131 InputStream inputStream = null;
132
133 try {
134 inputStream = fileVersion.getContentStream(false);
135
136 if (inputStream == null) {
137 if (_log.isWarnEnabled()) {
138 _log.warn(
139 "No metadata is available for file version " +
140 fileVersion.getFileVersionId());
141 }
142
143 return;
144 }
145
146 rawMetadataMap = RawMetadataProcessorUtil.getRawMetadataMap(
147 fileVersion.getExtension(), fileVersion.getMimeType(),
148 inputStream);
149 }
150 finally {
151 StreamUtil.cleanUp(inputStream);
152 }
153 }
154
155 List<DDMStructure> ddmStructures =
156 DDMStructureLocalServiceUtil.getClassStructures(
157 fileVersion.getCompanyId(),
158 PortalUtil.getClassNameId(RawMetadataProcessor.class),
159 QueryUtil.ALL_POS, QueryUtil.ALL_POS);
160
161 ServiceContext serviceContext = new ServiceContext();
162
163 serviceContext.setScopeGroupId(fileVersion.getGroupId());
164 serviceContext.setUserId(fileVersion.getUserId());
165
166 DLFileEntryMetadataLocalServiceUtil.updateFileEntryMetadata(
167 fileVersion.getCompanyId(), ddmStructures, 0L,
168 fileVersion.getFileEntryId(), fileVersion.getFileVersionId(),
169 rawMetadataMap, serviceContext);
170
171 FileEntry fileEntry = fileVersion.getFileEntry();
172
173 if (fileEntry instanceof LiferayFileEntry) {
174 Indexer indexer = IndexerRegistryUtil.getIndexer(
175 DLFileEntryConstants.getClassName());
176
177 LiferayFileEntry liferayFileEntry = (LiferayFileEntry)fileEntry;
178
179 indexer.reindex(liferayFileEntry.getDLFileEntry());
180 }
181 }
182
183 public void trigger(FileVersion fileVersion) {
184 trigger(fileVersion, fileVersion);
185 }
186
187 public void trigger(
188 FileVersion sourceFileVersion, FileVersion destinationFileVersion) {
189
190 if (PropsValues.DL_FILE_ENTRY_PROCESSORS_TRIGGER_SYNCHRONOUSLY) {
191 try {
192 MessageBusUtil.sendSynchronousMessage(
193 DestinationNames.DOCUMENT_LIBRARY_RAW_METADATA_PROCESSOR,
194 destinationFileVersion);
195 }
196 catch (MessageBusException mbe) {
197 if (_log.isWarnEnabled()) {
198 _log.warn(mbe, mbe);
199 }
200 }
201 }
202 else {
203 MessageBusUtil.sendMessage(
204 DestinationNames.DOCUMENT_LIBRARY_RAW_METADATA_PROCESSOR,
205 destinationFileVersion);
206 }
207 }
208
209 private static Log _log = LogFactoryUtil.getLog(
210 RawMetadataProcessorImpl.class);
211
212 }