From 3abf1e918c9eea1989a9637a989328c57c77d65d Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Thu, 30 Jun 2011 07:51:01 +0000 Subject: [PATCH] [LMS-2301] refactored code to simplyfy sending emails from jython and testing SVN: 21920 --- .../{EmailBuilder.java => EmailSender.java} | 72 +++++++----- ...der.java => IEmailBuilderWithGetters.java} | 12 +- .../server/plugins/jython/MailService.java | 107 +++++++----------- .../ReportingBasedProcessingPlugin.java | 19 ++-- .../plugins/jython/api/IEmailSender.java | 36 ++++++ .../plugins/jython/api/IMailService.java | 9 +- 6 files changed, 142 insertions(+), 113 deletions(-) rename datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/{EmailBuilder.java => EmailSender.java} (50%) rename datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/{api/IEmailBuilder.java => IEmailBuilderWithGetters.java} (70%) create mode 100644 datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IEmailSender.java diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/EmailBuilder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/EmailSender.java similarity index 50% rename from datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/EmailBuilder.java rename to datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/EmailSender.java index 9cea5467365..0705f96eb4f 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/EmailBuilder.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/EmailSender.java @@ -16,13 +16,19 @@ package ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython; -import ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api.IEmailBuilder; +import java.io.IOException; + +import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; +import ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.MailService.IEmailSenderService; +import ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api.IEmailSender; /** * @author Piotr Buczek */ -public class EmailBuilder implements IEmailBuilder +public class EmailSender implements IEmailSender { + private final IEmailSenderService service; + private String subject; private String bodyText; @@ -35,25 +41,28 @@ public class EmailBuilder implements IEmailBuilder private String attachmentTextOrNull; - public EmailBuilder(String defaultSubject, String defaultBodyText) + public EmailSender(IEmailSenderService service, String defaultSubject, String defaultBodyText) { + this.service = service; this.subject = defaultSubject; this.bodyText = defaultBodyText; } - public IEmailBuilder withSubject(String aSubject) + // builder + + public IEmailSender withSubject(String aSubject) { this.subject = aSubject; return this; } - public IEmailBuilder withBody(String aBodyText) + public IEmailSender withBody(String aBodyText) { this.bodyText = aBodyText; return this; } - public IEmailBuilder withAttachedFile(String filePath, String attachmentName) + public IEmailSender withAttachedFile(String filePath, String attachmentName) { if (attachmentTextOrNull != null) { @@ -64,7 +73,7 @@ public class EmailBuilder implements IEmailBuilder return this; } - public IEmailBuilder withAttachedText(String text, String attachmentName) + public IEmailSender withAttachedText(String text, String attachmentName) { if (attachmentFilePathOrNull != null) { @@ -75,29 +84,36 @@ public class EmailBuilder implements IEmailBuilder return this; } - public String getSubject() - { - return subject; - } + // sender - public String getBodyText() + public void send() { - return bodyText; - } - - public String tryGetAttachmentName() - { - return attachmentNameOrNull; - } - - public String tryGetAttachmentFilePath() - { - return attachmentFilePathOrNull; - } - - public String tryGetAttachmentText() - { - return attachmentTextOrNull; + try + { + if (attachmentNameOrNull == null) + { + service.trySendEmail(subject, bodyText); + } else + { + if (attachmentFilePathOrNull != null) + { + service.trySendEmailWithFileAttachment(subject, bodyText, attachmentNameOrNull, + attachmentFilePathOrNull); + } else if (attachmentTextOrNull != null) + { + service.trySendEmailWithTextAttachment(subject, bodyText, attachmentNameOrNull, + attachmentTextOrNull); + } else + { + // in general it shouldn't happen unless the script put None as an argument + throw new IllegalStateException( + "Neither file path nor text of attachment was specified"); + } + } + } catch (IOException ex) + { + throw CheckedExceptionTunnel.wrapIfNecessary(ex); + } } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IEmailBuilder.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/IEmailBuilderWithGetters.java similarity index 70% rename from datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IEmailBuilder.java rename to datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/IEmailBuilderWithGetters.java index 56ad19e7487..e84c050396c 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IEmailBuilder.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/IEmailBuilderWithGetters.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api; +package ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython; /** * Builder of emails with attachments. @@ -22,13 +22,13 @@ package ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api; * @author Piotr Buczek */ // NOTE: All methods of this interface are part of the Reporting and Processing Plugin API. -public interface IEmailBuilder +public interface IEmailBuilderWithGetters { - IEmailBuilder withSubject(String subject); + IEmailBuilderWithGetters withSubject(String subject); - IEmailBuilder withBody(String bodyText); + IEmailBuilderWithGetters withBody(String bodyText); - IEmailBuilder withAttachedFile(String attachmentFilePath, String attachmentName); + IEmailBuilderWithGetters withAttachedFile(String attachmentFilePath, String attachmentName); - IEmailBuilder withAttachedText(String attachmentText, String attachmentName); + IEmailBuilderWithGetters withAttachedText(String attachmentText, String attachmentName); } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/MailService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/MailService.java index c4921227bc0..1a5cd6cc4f3 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/MailService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/MailService.java @@ -23,10 +23,9 @@ import javax.activation.DataHandler; import javax.activation.DataSource; import javax.mail.util.ByteArrayDataSource; -import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.common.mail.EMailAddress; import ch.systemsx.cisd.common.mail.IMailClient; -import ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api.IEmailBuilder; +import ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api.IEmailSender; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api.IMailService; import de.schlichtherle.io.FileInputStream; @@ -40,93 +39,75 @@ public class MailService implements IMailService static String DEFAULT_BODY_TEXT = ""; - private final IMailClient mailClient; - - private final String recipientAddressOrNull; + private final IEmailSenderService senderService; private final String defaultSubject; private final String defaultBodyText; - public MailService(IMailClient mailClient, String recipientAddressOrNull) + public MailService(IMailClient mailClient, String recipientAddress) { - this(mailClient, recipientAddressOrNull, DEFAULT_SUBJECT, DEFAULT_BODY_TEXT); + this(mailClient, recipientAddress, DEFAULT_SUBJECT, DEFAULT_BODY_TEXT); } - public MailService(IMailClient mailClient, String recipientAddressOrNull, - String defaultSubject, String defaultBodyText) + public MailService(IMailClient mailClient, String recipientAddress, String defaultSubject, + String defaultBodyText) { - this.mailClient = mailClient; - this.recipientAddressOrNull = recipientAddressOrNull; + assert recipientAddress != null; + this.senderService = createEmailSenderService(mailClient, recipientAddress); this.defaultSubject = defaultSubject; this.defaultBodyText = defaultBodyText; } - public IEmailBuilder createEmailBuilder() + public IEmailSender createEmailSender() { - return new EmailBuilder(defaultSubject, defaultBodyText); + return new EmailSender(senderService, defaultSubject, defaultBodyText); } - public void sendEmail(IEmailBuilder emailBuilder) + static IEmailSenderService createEmailSenderService(final IMailClient mailClient, + final String recipientAddress) { - assert emailBuilder instanceof EmailBuilder; - - final EmailBuilder builder = (EmailBuilder) emailBuilder; - String subject = builder.getSubject(); - String bodyText = builder.getBodyText(); - String attachmentFileNameOrNull = builder.tryGetAttachmentName(); - EMailAddress recipient = new EMailAddress(recipientAddressOrNull); - try - { - if (attachmentFileNameOrNull == null) - { - trySendEmail(subject, bodyText, recipient); - } else + final EMailAddress recipient = new EMailAddress(recipientAddress); + return new IEmailSenderService() { - String attachmentFilePathOrNull = builder.tryGetAttachmentFilePath(); - String attachmentTextOrNull = builder.tryGetAttachmentText(); - if (attachmentFilePathOrNull != null) + + public void trySendEmail(String subject, String bodyText) { - trySendEmailWithFileAttachment(subject, bodyText, attachmentFileNameOrNull, - attachmentFilePathOrNull, recipient); - } else if (attachmentTextOrNull != null) + mailClient.sendEmailMessage(subject, bodyText, null, null, recipient); + } + + public void trySendEmailWithTextAttachment(String subject, String bodyText, + String attachmentFileName, String attachmentText) throws IOException { - trySendEmailWithTextAttachment(subject, bodyText, attachmentFileNameOrNull, - attachmentTextOrNull, recipient); - } else + DataSource dataSource = new ByteArrayDataSource(attachmentText, "text/plain"); + mailClient.sendEmailMessageWithAttachment(subject, bodyText, + attachmentFileName, new DataHandler(dataSource), null, null, recipient); + } + + public void trySendEmailWithFileAttachment(String subject, String bodyText, + String attachmentFileName, String attachmentFilePath) + throws FileNotFoundException, IOException { - // in general it shouldn't happen unless the script put None as an argument - throw new IllegalStateException( - "Neither file path nor text of attachment was specified"); + DataSource dataSource = + new ByteArrayDataSource(new FileInputStream(attachmentFilePath), + "text/plain"); + mailClient.sendEmailMessageWithAttachment(subject, bodyText, + attachmentFileName, new DataHandler(dataSource), null, null, recipient); } - } - } catch (IOException ex) - { - throw CheckedExceptionTunnel.wrapIfNecessary(ex); - } - } - private void trySendEmail(String subject, String bodyText, EMailAddress recipient) - { - mailClient.sendEmailMessage(subject, bodyText, null, null, recipient); + }; } - private void trySendEmailWithTextAttachment(String subject, String bodyText, - String attachmentFileName, String attachmentText, EMailAddress recipient) - throws IOException + static interface IEmailSenderService { - DataSource dataSource = new ByteArrayDataSource(attachmentText, "text/plain"); - mailClient.sendEmailMessageWithAttachment(subject, bodyText, attachmentFileName, - new DataHandler(dataSource), null, null, recipient); - } + void trySendEmail(String subject, String bodyText); - private void trySendEmailWithFileAttachment(String subject, String bodyText, - String attachmentFileName, String attachmentFilePath, EMailAddress recipient) - throws FileNotFoundException, IOException - { - DataSource dataSource = - new ByteArrayDataSource(new FileInputStream(attachmentFilePath), "text/plain"); - mailClient.sendEmailMessageWithAttachment(subject, bodyText, attachmentFileName, - new DataHandler(dataSource), null, null, recipient); + void trySendEmailWithTextAttachment(String subject, String bodyText, + String attachmentFileName, String attachmentText) throws IOException; + + void trySendEmailWithFileAttachment(String subject, String bodyText, + String attachmentFileName, String attachmentFilePath) throws FileNotFoundException, + IOException; } + } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/ReportingBasedProcessingPlugin.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/ReportingBasedProcessingPlugin.java index ef76494af48..3060d874332 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/ReportingBasedProcessingPlugin.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/ReportingBasedProcessingPlugin.java @@ -28,7 +28,7 @@ import ch.systemsx.cisd.common.exceptions.Status; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.utilities.PropertyUtils; -import ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api.IEmailBuilder; +import ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api.IEmailSender; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api.IMailService; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractTableModelReportingPlugin; import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.IProcessingPluginTask; @@ -61,7 +61,7 @@ public class ReportingBasedProcessingPlugin implements IProcessingPluginTask private static final String ATTACHMENT_NAME = "attachment-name"; - private static final String SINGLE_REPORT_FOR_ALL = "single-report-for-all"; + private static final String SINGLE_REPORT = "single-report"; private static final String DEFAULT_EMAIL_SUBJECT = MailService.DEFAULT_SUBJECT; @@ -79,14 +79,13 @@ public class ReportingBasedProcessingPlugin implements IProcessingPluginTask private final String attachmentName; - private final boolean singleReportForAll; + private final boolean singleReport; public ReportingBasedProcessingPlugin(Properties properties, File storeRoot) { this.scriptPath = PropertyUtils.getMandatoryProperty(properties, SCRIPT_PATH); - this.singleReportForAll = - PropertyUtils.getBoolean(properties, SINGLE_REPORT_FOR_ALL, - DEFAULT_SINGLE_REPORT_FOR_ALL); + this.singleReport = + PropertyUtils.getBoolean(properties, SINGLE_REPORT, DEFAULT_SINGLE_REPORT_FOR_ALL); this.emailSubject = PropertyUtils.getProperty(properties, EMAIL_SUBJECT, DEFAULT_EMAIL_SUBJECT); this.emailBody = PropertyUtils.getProperty(properties, EMAIL_BODY, DEFAULT_EMAIL_BODY); @@ -101,7 +100,7 @@ public class ReportingBasedProcessingPlugin implements IProcessingPluginTask new MailService(context.getMailClient(), context.getUserEmailOrNull(), emailSubject, emailBody); ProcessingStatus status = new ProcessingStatus(); - if (singleReportForAll) + if (singleReport) { try { @@ -135,9 +134,9 @@ public class ReportingBasedProcessingPlugin implements IProcessingPluginTask { TableModel table = createTableModel(dataSets, context); String tableAsString = AbstractTableModelReportingPlugin.convertTableToCsvString(table); - IEmailBuilder emailBuilder = - mailService.createEmailBuilder().withAttachedText(tableAsString, attachmentName); - mailService.sendEmail(emailBuilder); + IEmailSender emailBuilder = + mailService.createEmailSender().withAttachedText(tableAsString, attachmentName); + emailBuilder.send(); } public TableModel createTableModel(List<DatasetDescription> dataSets, diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IEmailSender.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IEmailSender.java new file mode 100644 index 00000000000..8621f821882 --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IEmailSender.java @@ -0,0 +1,36 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api; + +/** + * Builds and sender of an email with an optional attachment. + * + * @author Piotr Buczek + */ +// NOTE: All methods of this interface are part of the Reporting and Processing Plugin API. +public interface IEmailSender +{ + IEmailSender withSubject(String subject); + + IEmailSender withBody(String bodyText); + + IEmailSender withAttachedFile(String attachmentFilePath, String attachmentName); + + IEmailSender withAttachedText(String attachmentText, String attachmentName); + + void send(); +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IMailService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IMailService.java index 0aaf4c414de..6db8ec868c1 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IMailService.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/api/IMailService.java @@ -17,16 +17,13 @@ package ch.systemsx.cisd.openbis.dss.generic.server.plugins.jython.api; /** - * Service for sending emails with attachments + * Service for creating and sending emails with attachments * * @author Piotr Buczek */ // NOTE: All methods of this interface are part of the Reporting and Processing Plugin API. public interface IMailService { - /** sends an email created by given email builder */ - void sendEmail(IEmailBuilder emailBuilder); - - /** @return an email builder */ - IEmailBuilder createEmailBuilder(); + /** @return an email sender (statefull, create a new one for every email to be sent) */ + IEmailSender createEmailSender(); } -- GitLab