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.lar.PortletDataContext;
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
022 import com.liferay.portal.kernel.messaging.DestinationNames;
023 import com.liferay.portal.kernel.messaging.MessageBusUtil;
024 import com.liferay.portal.kernel.metadata.RawMetadataProcessorUtil;
025 import com.liferay.portal.kernel.repository.model.FileEntry;
026 import com.liferay.portal.kernel.repository.model.FileVersion;
027 import com.liferay.portal.kernel.search.Indexer;
028 import com.liferay.portal.kernel.search.IndexerRegistryUtil;
029 import com.liferay.portal.kernel.security.pacl.DoPrivileged;
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.portlet.documentlibrary.model.DLFileEntryConstants;
037 import com.liferay.portlet.documentlibrary.service.DLFileEntryMetadataLocalServiceUtil;
038 import com.liferay.portlet.dynamicdatamapping.model.DDMStructure;
039 import com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalServiceUtil;
040 import com.liferay.portlet.dynamicdatamapping.storage.Fields;
041
042 import java.io.File;
043 import java.io.InputStream;
044
045 import java.util.List;
046 import java.util.Map;
047
048
053 @DoPrivileged
054 public class RawMetadataProcessorImpl
055 implements DLProcessor, RawMetadataProcessor {
056
057 @Override
058 public void afterPropertiesSet() {
059 }
060
061 @Override
062 public void cleanUp(FileEntry fileEntry) {
063 }
064
065 @Override
066 public void cleanUp(FileVersion fileVersion) {
067 }
068
069 @Override
070 public void copy(
071 FileVersion sourceFileVersion, FileVersion destinationFileVersion) {
072 }
073
074 @Override
075 public void exportGeneratedFiles(
076 PortletDataContext portletDataContext, FileEntry fileEntry,
077 Element fileEntryElement)
078 throws Exception {
079
080 return;
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 void importGeneratedFiles(
097 PortletDataContext portletDataContext, FileEntry fileEntry,
098 FileEntry importedFileEntry, Element fileEntryElement)
099 throws Exception {
100
101 return;
102 }
103
104 @Override
105 public boolean isSupported(FileVersion fileVersion) {
106 return true;
107 }
108
109 @Override
110 public boolean isSupported(String mimeType) {
111 return true;
112 }
113
114 @Override
115 public void saveMetadata(FileVersion fileVersion) throws PortalException {
116 Map<String, Fields> rawMetadataMap = null;
117
118 if (fileVersion instanceof LiferayFileVersion) {
119 try {
120 LiferayFileVersion liferayFileVersion =
121 (LiferayFileVersion)fileVersion;
122
123 File file = liferayFileVersion.getFile(false);
124
125 rawMetadataMap = RawMetadataProcessorUtil.getRawMetadataMap(
126 fileVersion.getExtension(), fileVersion.getMimeType(),
127 file);
128 }
129 catch (UnsupportedOperationException uoe) {
130 }
131 }
132
133 if (rawMetadataMap == null) {
134 InputStream inputStream = null;
135
136 try {
137 inputStream = fileVersion.getContentStream(false);
138
139 if (inputStream == null) {
140 if (_log.isWarnEnabled()) {
141 _log.warn(
142 "No metadata is available for file version " +
143 fileVersion.getFileVersionId());
144 }
145
146 return;
147 }
148
149 rawMetadataMap = RawMetadataProcessorUtil.getRawMetadataMap(
150 fileVersion.getExtension(), fileVersion.getMimeType(),
151 inputStream);
152 }
153 finally {
154 StreamUtil.cleanUp(inputStream);
155 }
156 }
157
158 List<DDMStructure> ddmStructures =
159 DDMStructureLocalServiceUtil.getClassStructures(
160 fileVersion.getCompanyId(),
161 PortalUtil.getClassNameId(RawMetadataProcessor.class),
162 QueryUtil.ALL_POS, QueryUtil.ALL_POS);
163
164 ServiceContext serviceContext = new ServiceContext();
165
166 serviceContext.setScopeGroupId(fileVersion.getGroupId());
167 serviceContext.setUserId(fileVersion.getUserId());
168
169 DLFileEntryMetadataLocalServiceUtil.updateFileEntryMetadata(
170 fileVersion.getCompanyId(), ddmStructures, 0L,
171 fileVersion.getFileEntryId(), fileVersion.getFileVersionId(),
172 rawMetadataMap, serviceContext);
173
174 FileEntry fileEntry = fileVersion.getFileEntry();
175
176 if (fileEntry instanceof LiferayFileEntry) {
177 Indexer indexer = IndexerRegistryUtil.getIndexer(
178 DLFileEntryConstants.getClassName());
179
180 LiferayFileEntry liferayFileEntry = (LiferayFileEntry)fileEntry;
181
182 indexer.reindex(liferayFileEntry.getDLFileEntry());
183 }
184 }
185
186 @Override
187 public void trigger(FileVersion fileVersion) {
188 trigger(fileVersion, fileVersion);
189 }
190
191 @Override
192 public void trigger(
193 FileVersion sourceFileVersion, FileVersion destinationFileVersion) {
194
195 MessageBusUtil.sendMessage(
196 DestinationNames.DOCUMENT_LIBRARY_RAW_METADATA_PROCESSOR,
197 destinationFileVersion);
198 }
199
200 private static final Log _log = LogFactoryUtil.getLog(
201 RawMetadataProcessorImpl.class);
202
203 }