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