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