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