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