package com.constellio.app.modules.rm.extensions; import static com.constellio.model.entities.schemas.Schemas.CODE; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.type.DocumentType; import com.constellio.data.frameworks.extensions.ExtensionBooleanResult; import com.constellio.model.entities.records.Content; import com.constellio.model.entities.records.ParsedContent; import com.constellio.model.entities.records.wrappers.UserDocument; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.extensions.behaviors.RecordExtension; import com.constellio.model.extensions.events.records.RecordInCreationBeforeValidationAndAutomaticValuesCalculationEvent; import com.constellio.model.extensions.events.records.RecordLogicalDeletionValidationEvent; import com.constellio.model.services.contents.ContentManagerRuntimeException; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.search.SearchServices; public class RMEmailDocumentRecordExtension extends RecordExtension { private static final Logger LOGGER = LoggerFactory.getLogger(RMEmailDocumentRecordExtension.class); private static String OUTLOOK_MSG_MIMETYPE = "application/vnd.ms-outlook"; String collection; ModelLayerFactory modelLayerFactory; RMSchemasRecordsServices rm; SearchServices searchServices; public RMEmailDocumentRecordExtension(String collection, ModelLayerFactory modelLayerFactory) { this.modelLayerFactory = modelLayerFactory; this.collection = collection; this.rm = new RMSchemasRecordsServices(collection, modelLayerFactory); } @Override public void recordInCreationBeforeValidationAndAutomaticValuesCalculation( RecordInCreationBeforeValidationAndAutomaticValuesCalculationEvent event) { if (event.isSchemaType(UserDocument.SCHEMA_TYPE)) { UserDocument userDocument = rm.wrapUserDocument(event.getRecord()); Content content = userDocument.getContent(); if (content != null && OUTLOOK_MSG_MIMETYPE.equals(content.getCurrentVersion().getMimetype())) { populateFields(userDocument, content); } } } private void populateFields(UserDocument userDocument, Content content) { String hash = content.getCurrentVersion().getHash(); try { ParsedContent parsedContent = modelLayerFactory.getContentManager().getParsedContentParsingIfNotYetDone(hash); String subject = asString(parsedContent.getNormalizedProperty("Subject")); if (subject != null) { // FIXME Move this in the Outlook plugin's code // String filename = subject.replaceAll("[^a-zA-Z0-9.-]", "_"); // content.renameCurrentVersion(filename + ".msg"); // userDocument.setTitle(subject); } } catch (ContentManagerRuntimeException e) { LOGGER.error("Cannot populate fields of user document '" + userDocument.getId() + "'", e); } } @Override public ExtensionBooleanResult isLogicallyDeletable(RecordLogicalDeletionValidationEvent event) { if (DocumentType.SCHEMA_TYPE.equals(event.getSchemaTypeCode()) && DocumentType.EMAIL_DOCUMENT_TYPE.equals(event.getRecord().get(CODE))) { return ExtensionBooleanResult.FALSE; } return super.isLogicallyDeletable(event); } private String asString(Object value) { return value == null ? null : value.toString().trim(); } }