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.StreamUtil;
032 import com.liferay.portal.kernel.xml.Element;
033 import com.liferay.portal.repository.liferayrepository.model.LiferayFileEntry;
034 import com.liferay.portal.repository.liferayrepository.model.LiferayFileVersion;
035 import com.liferay.portal.service.ServiceContext;
036 import com.liferay.portal.util.PortalUtil;
037 import com.liferay.portlet.documentlibrary.model.DLFileEntryConstants;
038 import com.liferay.portlet.documentlibrary.service.DLFileEntryMetadataLocalServiceUtil;
039 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
040 import com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil;
041 import com.liferay.portlet.dynamicdatamapping.storage.Fields;
042
043 import java.io.File;
044 import java.io.InputStream;
045
046 import java.util.List;
047 import java.util.Map;
048
049
054 @DoPrivileged
055 public class RawMetadataProcessorImpl
056 implements DLProcessor, RawMetadataProcessor {
057
058 @Override
059 public void afterPropertiesSet() {
060 }
061
062 @Override
063 public void cleanUp(FileEntry fileEntry) {
064 }
065
066 @Override
067 public void cleanUp(FileVersion fileVersion) {
068 }
069
070 @Override
071 public void copy(
072 FileVersion sourceFileVersion, FileVersion destinationFileVersion) {
073 }
074
075 @Override
076 public void exportGeneratedFiles(
077 PortletDataContext portletDataContext, FileEntry fileEntry,
078 Element fileEntryElement)
079 throws Exception {
080
081 return;
082 }
083
084 @Override
085 public void generateMetadata(FileVersion fileVersion)
086 throws SystemException {
087
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 void importGeneratedFiles(
100 PortletDataContext portletDataContext, FileEntry fileEntry,
101 FileEntry importedFileEntry, Element fileEntryElement)
102 throws Exception {
103
104 return;
105 }
106
107 @Override
108 public boolean isSupported(FileVersion fileVersion) {
109 return true;
110 }
111
112 @Override
113 public boolean isSupported(String mimeType) {
114 return true;
115 }
116
117 @Override
118 public void saveMetadata(FileVersion fileVersion)
119 throws PortalException, SystemException {
120
121 Map<String, Fields> 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, 0L,
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 Log _log = LogFactoryUtil.getLog(
206 RawMetadataProcessorImpl.class);
207
208 }