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