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