@Override protected boolean processMessage(IMessageContext message) throws CapabilitiesLoadException { Capabilities caps = message.getCustomer().getCapabilities(); if (caps == null) throw new CapabilitiesLoadException(); Capabilities.ActiveMailboxSupport amSupportCap = caps.getEnumCapability( Capabilities.CAP_ACTIVEMAILBOX_SUPPORT, Capabilities.ActiveMailboxSupport.NONE); boolean useNFS = ManagementContainer.getInstance() .getConfiguration() .getBooleanProperty(CONFIG_USE_NFS, DEFAULT_USE_NFS); if (amSupportCap == Capabilities.ActiveMailboxSupport.AM_CUSTOMER_ENCRYPTION || message.getEnvelope().isCustomerEncrypted()) { if (!useNFS) { return writeMetaFiles(message); } else { // Direct nfs usage; doesn't occur in production (mmfs is used instead) boolean success = true; String metaContents = createMetaContents(message); String metaFileName = new File(message.getStoreFileSubPath()).getName(); if (!CollectionsUtils.isNullOrEmpty(message.getResolvedRecipients())) { for (Iterator<ReplicatedRecipient> it = message.getResolvedRecipients().iterator(); it.hasNext(); ) { ReplicatedRecipient rr = it.next(); if (!writeMetaFile(rr, message, false, metaFileName, metaContents)) { success = false; } } } if (message.getResolvedSender() != null) { if (!writeMetaFile( message.getResolvedSender(), message, true, metaFileName, metaContents)) { success = false; } } if (!success) { m_importer.getStatComponent().addToValue(STAT_META_STORE_FAILURES, 1); m_importer.consumerImportFailed(message, true); return false; } } } return true; }
/** * Method writeMetaFiles. This uses the MailStoreFileManger API to store files remotely. * * @param message */ private boolean writeMetaFiles(IMessageContext message) { String metaContents = createMetaContents(message); String metaFileName = new File(message.getStoreFileSubPath()).getName(); Collection<MailStoreFileManager.MetaMessageDescriptor> msgs = new ArrayList<MailStoreFileManager.MetaMessageDescriptor>(); if (!CollectionsUtils.isNullOrEmpty(message.getResolvedRecipients())) { for (ReplicatedRecipient rr : message.getResolvedRecipients()) { msgs.add( new MailStoreFileManager.MetaMessageDescriptor( message.getInternalId(), rr.getMaildir(), metaFileName, message.getEnvelope().getSentDate(), message.getEnvelope().getReceivedDate(), false, rr.getState().toInt())); } } if (message.getResolvedSender() != null) { ReplicatedRecipient rr = message.getResolvedSender(); msgs.add( new MailStoreFileManager.MetaMessageDescriptor( message.getInternalId(), rr.getMaildir(), metaFileName, message.getEnvelope().getSentDate(), message.getEnvelope().getReceivedDate(), true, rr.getState().toInt())); } IMailStoreFileManager imsfm = ManagementContainer.getInstance().getMailStoreFileManager(); if (imsfm.storeMetaMessage(msgs, metaContents)) { m_importer.audit(message, getName(), metaFileName); return true; } else { m_importer.getStatComponent().addToValue(STAT_META_STORE_FAILURES, 1); m_importer.consumerImportFailed(message, true); return false; } }