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