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