GalleryIndexMediaDataProcess.java
/*
* Copyright (C) 2000 - 2024 Silverpeas
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* As a special exception to the terms and conditions of version 3.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* Open Source Software ("FLOSS") applications as described in Silverpeas's
* FLOSS exception. You should have received a copy of the text describing
* the FLOSS exception, and it is also available here:
* "http://www.silverpeas.org/docs/core/legal/floss_exception.html"
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.silverpeas.components.gallery.process.media;
import org.silverpeas.components.gallery.model.InternalMedia;
import org.silverpeas.components.gallery.model.Media;
import org.silverpeas.components.gallery.model.MetaData;
import org.silverpeas.components.gallery.model.Photo;
import org.silverpeas.components.gallery.process.AbstractGalleryDataProcess;
import org.silverpeas.core.contribution.content.form.RecordSet;
import org.silverpeas.core.contribution.template.publication.PublicationTemplate;
import org.silverpeas.core.contribution.template.publication.PublicationTemplateManager;
import org.silverpeas.core.index.indexing.model.FullIndexEntry;
import org.silverpeas.core.index.indexing.model.IndexEngineProxy;
import org.silverpeas.core.index.indexing.model.IndexEntryKey;
import org.silverpeas.core.process.management.ProcessExecutionContext;
import org.silverpeas.core.process.session.ProcessSession;
import org.silverpeas.kernel.util.StringUtil;
import org.silverpeas.kernel.logging.SilverLogger;
import java.util.Collection;
public class GalleryIndexMediaDataProcess extends AbstractGalleryDataProcess {
/**
* Default hidden constructor
* @param media the media for which a process is constructed
*/
protected GalleryIndexMediaDataProcess(final Media media) {
super(media);
}
/**
* Process to index a media in Database
* @param media the media
* @return the process of indexing a media
*/
public static GalleryIndexMediaDataProcess getInstance(final Media media) {
return new GalleryIndexMediaDataProcess(media);
}
/*
* (non-Javadoc)
*
* AbstractGalleryDataProcess#processData(com.silverpeas.gallery
* .process.GalleryProcessExecutionContext, ProcessSession)
*/
@Override
protected void processData(final ProcessExecutionContext context,
final ProcessSession session) {
// Nothing to do
}
/*
* (non-Javadoc)
* @see AbstractProcess#onSuccessful()
*/
@Override
public void onSuccessful() {
if (getMedia() != null) {
// Index the Media
FullIndexEntry indexEntry = setUpIndexEntry();
if (getMedia().getVisibilityPeriod().getBeginDatable().isDefined()) {
indexEntry.setStartDate(getMedia().getVisibilityPeriod().getBeginDatable());
}
if (getMedia().getVisibilityPeriod().getEndDatable().isDefined()) {
indexEntry.setEndDate(getMedia().getVisibilityPeriod().getEndDatable());
}
if (getMedia() instanceof InternalMedia) {
setThumbnailData(indexEntry);
}
if (getMedia() instanceof Photo) {
setPhotoMetadata(indexEntry);
}
// indexation du contenu du formulaire XML
final String xmlFormName = getOrganisationController()
.getComponentParameterValue(getMedia().getInstanceId(), "XMLFormName");
if (StringUtil.isDefined(xmlFormName)) {
final String xmlFormShortName =
xmlFormName.substring(xmlFormName.indexOf("/") + 1, xmlFormName.indexOf("."));
PublicationTemplate pubTemplate;
try {
pubTemplate = PublicationTemplateManager.getInstance()
.getPublicationTemplate(getMedia().getInstanceId() + ":" + xmlFormShortName);
final RecordSet set = pubTemplate.getRecordSet();
set.indexRecord(getMedia().getMediaPK().getId(), xmlFormShortName, indexEntry);
} catch (final Exception e) {
SilverLogger.getLogger(this).warn(e);
}
}
IndexEngineProxy.addIndexEntry(indexEntry);
}
}
private void setPhotoMetadata(final FullIndexEntry indexEntry) {
Photo photo = (Photo) getMedia();
// récupération des méta données pour les indéxer
StringBuilder metaDataStr = new StringBuilder();
MetaData metaData;
final Collection<String> properties = photo.getMetaDataProperties();
for (final String property : properties) {
metaData = photo.getMetaData(property);
final String value = metaData.getValue();
metaDataStr.append(" ").append(value);
}
indexEntry.addTextContent(metaDataStr.toString());
// indexation des méta données (une donnée par champ d'index)
for (final String property : properties) {
metaData = photo.getMetaData(property);
final String value = metaData.getValue();
if (metaData.isDate()) {
indexEntry.addField("IPTC_" + property, metaData.getDateValue());
} else {
indexEntry.addField("IPTC_" + property, value);
}
}
}
private void setThumbnailData(final FullIndexEntry indexEntry) {
InternalMedia iMedia = (InternalMedia) getMedia();
if (StringUtil.isDefined(iMedia.getFileName())) {
indexEntry.setThumbnail(iMedia.getFileName());
indexEntry.setThumbnailMimeType(iMedia.getFileMimeType().getMimeType());
indexEntry.setThumbnailDirectory(getMedia().getWorkspaceSubFolderName());
}
}
private FullIndexEntry setUpIndexEntry() {
FullIndexEntry indexEntry = new FullIndexEntry(new IndexEntryKey(
getMedia().getMediaPK().getComponentName(),
getMedia().getContributionType(),
getMedia().getMediaPK().getId()));
indexEntry.setTitle(getMedia().getTitle());
indexEntry.setPreview(getMedia().getDescription());
indexEntry.setCreationDate(getMedia().getCreationDate());
indexEntry.setCreationUser(getMedia().getCreatorId());
indexEntry.setKeywords(getMedia().getKeyWord());
return indexEntry;
}
}