Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoberto E. Escobar2014-06-24 20:56:47 +0000
committerRoberto E. Escobar2014-08-28 23:58:48 +0000
commit9f10d7adfc07fe803d1401a9230f9c2f385a5fe3 (patch)
tree6d9bdef5762985827f950c24ad52ff9ba91bbc5a /plugins/org.eclipse.osee.mail
parent55e42b036062fbb48313e8ff68584e60f94603a2 (diff)
downloadorg.eclipse.osee-9f10d7adfc07fe803d1401a9230f9c2f385a5fe3.tar.gz
org.eclipse.osee-9f10d7adfc07fe803d1401a9230f9c2f385a5fe3.tar.xz
org.eclipse.osee-9f10d7adfc07fe803d1401a9230f9c2f385a5fe3.zip
feature[ats_ATS64268]: Update mail service to use configAdmin
Diffstat (limited to 'plugins/org.eclipse.osee.mail')
-rw-r--r--plugins/org.eclipse.osee.mail/META-INF/MANIFEST.MF3
-rw-r--r--plugins/org.eclipse.osee.mail/OSGI-INF/mail.service.xml12
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailConfiguration.java258
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailConstants.java30
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailService.java8
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailServiceConfig.java137
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/ForwardingStream.java90
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailMessageFactory.java69
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailServiceImpl.java84
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/SendMailCallable.java22
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailApplication.java1
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailConfigResource.java55
-rw-r--r--plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailResource.java9
13 files changed, 488 insertions, 290 deletions
diff --git a/plugins/org.eclipse.osee.mail/META-INF/MANIFEST.MF b/plugins/org.eclipse.osee.mail/META-INF/MANIFEST.MF
index 30429f7af6a..ce406e7112a 100644
--- a/plugins/org.eclipse.osee.mail/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.osee.mail/META-INF/MANIFEST.MF
@@ -14,6 +14,7 @@ Import-Package: javax.activation,
javax.xml.bind.annotation,
org.eclipse.osee.event,
org.eclipse.osee.framework.jdk.core.util,
- org.eclipse.osee.framework.jdk.core.util.windows
+ org.eclipse.osee.framework.jdk.core.util.windows,
+ org.eclipse.osee.logger
Service-Component: OSGI-INF/*.xml
Export-Package: org.eclipse.osee.mail
diff --git a/plugins/org.eclipse.osee.mail/OSGI-INF/mail.service.xml b/plugins/org.eclipse.osee.mail/OSGI-INF/mail.service.xml
index f0698c3fd31..c86d68ada24 100644
--- a/plugins/org.eclipse.osee.mail/OSGI-INF/mail.service.xml
+++ b/plugins/org.eclipse.osee.mail/OSGI-INF/mail.service.xml
@@ -1,14 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" enabled="true" name="org.eclipse.osee.mail.internal.MailServiceImpl">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" configuration-policy="require" deactivate="stop" modified="update">
<implementation class="org.eclipse.osee.mail.internal.MailServiceImpl"/>
-
+ <service>
+ <provide interface="org.eclipse.osee.mail.MailService"/>
+ </service>
<reference interface="org.eclipse.osee.event.EventService" name="EventService"
cardinality="1..1"
policy="static"
bind="setEventService" />
-
- <service>
- <provide interface="org.eclipse.osee.mail.MailService"/>
- </service>
-
+ <reference bind="setLogger" cardinality="1..1" interface="org.eclipse.osee.logger.Log" name="Log" policy="static"/>
</scr:component>
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailConfiguration.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailConfiguration.java
new file mode 100644
index 00000000000..d58533d2399
--- /dev/null
+++ b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailConfiguration.java
@@ -0,0 +1,258 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.mail;
+
+import static org.eclipse.osee.mail.MailConstants.DEFAULT_MAIL_SERVER_ADMIN_EMAIL;
+import static org.eclipse.osee.mail.MailConstants.DEFAULT_MAIL_SERVER_HOST;
+import static org.eclipse.osee.mail.MailConstants.DEFAULT_MAIL_SERVER_PASSWORD;
+import static org.eclipse.osee.mail.MailConstants.DEFAULT_MAIL_SERVER_PORT;
+import static org.eclipse.osee.mail.MailConstants.DEFAULT_MAIL_SERVER_STATUS_WAIT_TIME_MILLIS;
+import static org.eclipse.osee.mail.MailConstants.DEFAULT_MAIL_SERVER_TEST_EMAIL_BODY;
+import static org.eclipse.osee.mail.MailConstants.DEFAULT_MAIL_SERVER_TEST_EMAIL_SUBJECT;
+import static org.eclipse.osee.mail.MailConstants.DEFAULT_MAIL_SERVER_TRANSPORT;
+import static org.eclipse.osee.mail.MailConstants.MAIL_SERVER_ADMIN_EMAIL;
+import static org.eclipse.osee.mail.MailConstants.MAIL_SERVER_HOST;
+import static org.eclipse.osee.mail.MailConstants.MAIL_SERVER_PASSWORD;
+import static org.eclipse.osee.mail.MailConstants.MAIL_SERVER_PORT;
+import static org.eclipse.osee.mail.MailConstants.MAIL_SERVER_STATUS_WAIT_TIME_MILLIS;
+import static org.eclipse.osee.mail.MailConstants.MAIL_SERVER_TEST_EMAIL_BODY;
+import static org.eclipse.osee.mail.MailConstants.MAIL_SERVER_TEST_EMAIL_SUBJECT;
+import static org.eclipse.osee.mail.MailConstants.MAIL_SERVER_TRANSPORT;
+import static org.eclipse.osee.mail.MailConstants.MAIL_SERVER_USERNAME;
+import java.util.Map;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+
+/**
+ * <pre>
+ * Gmail Example:
+ * host = "smtp.gmail.com;
+ * transport = "smpts";
+ * requireAuthentication = true;
+ *
+ * Yahoo Example:
+ * host = "smtp.mail.yahoo.com";
+ * transport = "smpts";
+ * requireAuthentication = true;
+ * </pre>
+ *
+ * @author Roberto E. Escobar
+ */
+public class MailConfiguration {
+
+ private String username;
+ private String password;
+ private String host;
+ private int port;
+ private String transport;
+ private String adminEmail;
+ private String testEmailSubject;
+ private String testEmailBody;
+ private long waitTimeInMillis;
+
+ private MailConfiguration() {
+ //Builder class
+ }
+
+ public String getHost() {
+ return host;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public String getTransport() {
+ return transport;
+ }
+
+ public boolean isAuthenticationRequired() {
+ return Strings.isValid(username) && Strings.isValid(password);
+ }
+
+ public String getUserName() {
+ return username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public String getAdminEmail() {
+ return adminEmail;
+ }
+
+ public String getTestEmailSubject() {
+ return testEmailSubject;
+ }
+
+ public String getTestEmailBody() {
+ return testEmailBody;
+ }
+
+ public long getStatusWaitTime() {
+ return waitTimeInMillis;
+ }
+
+ public MailConfiguration copy() {
+ MailConfiguration data = new MailConfiguration();
+ data.username = this.username;
+ data.password = this.password;
+ data.host = this.host;
+ data.port = this.port;
+ data.transport = this.transport;
+ data.adminEmail = this.adminEmail;
+ data.testEmailSubject = this.testEmailSubject;
+ data.testEmailBody = this.testEmailBody;
+ data.waitTimeInMillis = this.waitTimeInMillis;
+ return data;
+ }
+
+ void setUserName(String username) {
+ this.username = username;
+ }
+
+ void setPassword(String password) {
+ this.password = password;
+ }
+
+ void setHost(String host) {
+ this.host = host;
+ }
+
+ void setPort(int port) {
+ this.port = port;
+ }
+
+ void setTransport(String transport) {
+ this.transport = transport;
+ }
+
+ void setAdminEmail(String adminEmail) {
+ this.adminEmail = adminEmail;
+ }
+
+ void setTestEmailSubject(String testEmailSubject) {
+ this.testEmailSubject = testEmailSubject;
+ }
+
+ void setTestEmailBody(String testEmailBody) {
+ this.testEmailBody = testEmailBody;
+ }
+
+ void setStatusWaitTime(long waitTimeInMillis) {
+ this.waitTimeInMillis = waitTimeInMillis;
+ }
+
+ @Override
+ public String toString() {
+ return "MailConfiguration [username=" + username + ", password=" + password + ", host=" + host + ", port=" + port + ", transport=" + transport + ", adminEmail=" + adminEmail + ", testEmailSubject=" + testEmailSubject + ", testEmailBody=" + testEmailBody + ", waitTimeInMillis=" + waitTimeInMillis + "]";
+ }
+
+ public static MailConfigurationBuilder newBuilder() {
+ return new MailConfigurationBuilder();
+ }
+
+ public static MailConfigurationBuilder fromProperties(Map<String, Object> props) {
+ return newBuilder().properties(props);
+ }
+
+ public static MailConfiguration newConfig(Map<String, Object> props) {
+ return fromProperties(props).build();
+ }
+
+ public static final class MailConfigurationBuilder {
+ private final MailConfiguration config = new MailConfiguration();
+
+ public MailConfiguration build() {
+ return config.copy();
+ }
+
+ public MailConfigurationBuilder properties(Map<String, Object> props) {
+ //@formatter:off
+ username(get(props, MAIL_SERVER_USERNAME, MailConstants.DEFAULT_MAIL_SERVER_USERNAME));
+ password(get(props, MAIL_SERVER_PASSWORD, DEFAULT_MAIL_SERVER_PASSWORD));
+ host(get(props, MAIL_SERVER_HOST, DEFAULT_MAIL_SERVER_HOST));
+ port(getInt(props, MAIL_SERVER_PORT, DEFAULT_MAIL_SERVER_PORT));
+ transport(get(props, MAIL_SERVER_TRANSPORT, DEFAULT_MAIL_SERVER_TRANSPORT));
+ adminEmail(get(props, MAIL_SERVER_ADMIN_EMAIL, DEFAULT_MAIL_SERVER_ADMIN_EMAIL));
+ testEmailSubject(get(props, MAIL_SERVER_TEST_EMAIL_SUBJECT, DEFAULT_MAIL_SERVER_TEST_EMAIL_SUBJECT));
+ testEmailBody(get(props, MAIL_SERVER_TEST_EMAIL_BODY, DEFAULT_MAIL_SERVER_TEST_EMAIL_BODY));
+ statusWaitTime(getLong(props, MAIL_SERVER_STATUS_WAIT_TIME_MILLIS, DEFAULT_MAIL_SERVER_STATUS_WAIT_TIME_MILLIS));
+ //@formatter:on
+ return this;
+ }
+
+ public MailConfigurationBuilder username(String userName) {
+ config.setUserName(userName);
+ return this;
+ }
+
+ public MailConfigurationBuilder password(String password) {
+ config.setPassword(password);
+ return this;
+ }
+
+ public MailConfigurationBuilder host(String host) {
+ config.setHost(host);
+ return this;
+ }
+
+ public MailConfigurationBuilder port(int port) {
+ config.setPort(port);
+ return this;
+ }
+
+ public MailConfigurationBuilder transport(String transport) {
+ config.setTransport(transport);
+ return this;
+ }
+
+ public MailConfigurationBuilder adminEmail(String adminEmail) {
+ config.setAdminEmail(adminEmail);
+ return this;
+ }
+
+ public MailConfigurationBuilder testEmailSubject(String testMailSubject) {
+ config.setTestEmailSubject(testMailSubject);
+ return this;
+ }
+
+ public MailConfigurationBuilder testEmailBody(String testMailBody) {
+ config.setTestEmailBody(testMailBody);
+ return this;
+ }
+
+ public MailConfigurationBuilder statusWaitTime(long waitTimeInMillis) {
+ config.setStatusWaitTime(waitTimeInMillis);
+ return this;
+ }
+
+ private long getLong(Map<String, Object> props, String key, long defaultValue) {
+ String toReturn = get(props, key, String.valueOf(defaultValue));
+ return Strings.isNumeric(toReturn) ? Long.parseLong(toReturn) : -1L;
+ }
+
+ private static int getInt(Map<String, Object> props, String key, int defaultValue) {
+ String toReturn = get(props, key, String.valueOf(defaultValue));
+ return Strings.isNumeric(toReturn) ? Integer.parseInt(toReturn) : -1;
+ }
+
+ private static String get(Map<String, Object> props, String key, String defaultValue) {
+ String toReturn = defaultValue;
+ Object object = props != null ? props.get(key) : null;
+ if (object != null) {
+ toReturn = String.valueOf(object);
+ }
+ return toReturn;
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailConstants.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailConstants.java
index aa45332799c..80820a5ad0d 100644
--- a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailConstants.java
+++ b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailConstants.java
@@ -21,10 +21,6 @@ public final class MailConstants {
private static final String PREFIX = "org/eclipse/osee/mail/event/";
- public static final String REGISTRATION_EVENT = PREFIX + "MAIL_SERVICE_REGISTRATION";
-
- public static final String DEREGISTRATION_EVENT = PREFIX + "MAIL_SERVICE_DEREGISTRATION";
-
public static final String MAIL_MESSAGE_DELIVERED = PREFIX + "MESSAGE_DELIVERED";
public static final String MAIL_MESSAGE_NOT_DELIVERED = PREFIX + "MESSAGE_NOT_DELIVERED";
@@ -46,4 +42,30 @@ public final class MailConstants {
public static final String MAIL_UUID = "mail.uuid";
public static final String MAIL_UUID_HEADER = "OSEE-MAIL-UUID";
+
+ public static final String NAMESPACE = "mail.server";
+
+ private static String qualify(String value) {
+ return String.format("%s.%s", NAMESPACE, value);
+ }
+
+ public static final String MAIL_SERVER_USERNAME = qualify("username");
+ public static final String MAIL_SERVER_PASSWORD = qualify("password");
+ public static final String MAIL_SERVER_HOST = qualify("host");
+ public static final String MAIL_SERVER_PORT = qualify("port");
+ public static final String MAIL_SERVER_TRANSPORT = qualify("transport");
+ public static final String MAIL_SERVER_ADMIN_EMAIL = qualify("admin.email");
+ public static final String MAIL_SERVER_TEST_EMAIL_SUBJECT = qualify("test.email.subject");
+ public static final String MAIL_SERVER_TEST_EMAIL_BODY = qualify("test.email.body");
+ public static final String MAIL_SERVER_STATUS_WAIT_TIME_MILLIS = qualify("status.wait.time");
+
+ public static final String DEFAULT_MAIL_SERVER_USERNAME = null;
+ public static final String DEFAULT_MAIL_SERVER_PASSWORD = null;
+ public static final String DEFAULT_MAIL_SERVER_HOST = null;
+ public static final int DEFAULT_MAIL_SERVER_PORT = 25;
+ public static final String DEFAULT_MAIL_SERVER_TRANSPORT = "smtp";
+ public static final String DEFAULT_MAIL_SERVER_ADMIN_EMAIL = null;
+ public static final String DEFAULT_MAIL_SERVER_TEST_EMAIL_SUBJECT = "Test Email";
+ public static final String DEFAULT_MAIL_SERVER_TEST_EMAIL_BODY = "This is a test email sent from OSEE Mail Service";
+ public static final long DEFAULT_MAIL_SERVER_STATUS_WAIT_TIME_MILLIS = 60L * 1000L;
}
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailService.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailService.java
index bd7893b76b3..82fb83fea73 100644
--- a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailService.java
+++ b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailService.java
@@ -12,18 +12,14 @@ package org.eclipse.osee.mail;
import java.util.List;
import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
/**
* @author Roberto E. Escobar
*/
public interface MailService {
- List<Callable<SendMailStatus>> createSendCalls(long waitForStatus, TimeUnit unit, MailMessage... emails);
+ List<Callable<SendMailStatus>> createSendCalls(MailMessage... emails);
- MailServiceConfig getConfiguration();
+ MailMessage createSystemTestMessage();
- void setConfiguration(MailServiceConfig config);
-
- MailMessage createSystemTestMessage(int testNumber);
}
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailServiceConfig.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailServiceConfig.java
deleted file mode 100644
index 9f8ca86880a..00000000000
--- a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/MailServiceConfig.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Boeing.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Boeing - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osee.mail;
-
-import javax.xml.bind.annotation.XmlRootElement;
-
-/**
- * <pre>
- * Gmail Example:
- * host = "smtp.gmail.com;
- * transport = "smpts";
- * requireAuthentication = true;
- *
- * Yahoo Example:
- * host = "smtp.mail.yahoo.com";
- * transport = "smpts";
- * requireAuthentication = true;
- * </pre>
- *
- * @author Roberto E. Escobar
- */
-@XmlRootElement
-public class MailServiceConfig {
-
- private String userName = "";
- private String password = "";
- private String host = "";
- private int port = 25;
- private String transport = "smtp";
- private boolean debug = false;
- private boolean authenticationRequired = false;
- private String systemAdminEmailAddress = "";
- private boolean mailStatsEnabled = false;
-
- public MailServiceConfig() {
- super();
- }
-
- public String getHost() {
- return host;
- }
-
- public void setHost(String host) {
- this.host = host;
- }
-
- public int getPort() {
- return port;
- }
-
- public void setPort(int port) {
- this.port = port;
- }
-
- public boolean isDebug() {
- return debug;
- }
-
- public void setDebug(boolean debug) {
- this.debug = debug;
- }
-
- public String getTransport() {
- return transport;
- }
-
- public void setTransport(String transport) {
- this.transport = transport;
- }
-
- public boolean isAuthenticationRequired() {
- return authenticationRequired;
- }
-
- public void setAuthenticationRequired(boolean authenticationRequired) {
- this.authenticationRequired = authenticationRequired;
- }
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public String getPassword() {
- return password;
- }
-
- public String getSystemAdminEmailAddress() {
- return systemAdminEmailAddress;
- }
-
- public void setSystemAdminEmailAddress(String systemAdminEmailAddress) {
- this.systemAdminEmailAddress = systemAdminEmailAddress;
- }
-
- public boolean isMailStatsEnabled() {
- return mailStatsEnabled;
- }
-
- public void setMailStatsEnabled(boolean mailStatsEnabled) {
- this.mailStatsEnabled = mailStatsEnabled;
- }
-
- public void setTo(MailServiceConfig other) {
- if (other != null) {
- setAuthenticationRequired(other.isAuthenticationRequired());
- setDebug(other.isDebug());
- setHost(other.getHost());
- setMailStatsEnabled(other.isMailStatsEnabled());
- setPassword(other.getPassword());
- setPort(other.getPort());
- setSystemAdminEmailAddress(other.getSystemAdminEmailAddress());
- setTransport(other.getTransport());
- setUserName(other.getUserName());
- }
- }
-
- @Override
- public String toString() {
- return "MailServiceConfig [userName=" + userName + ", password=" + password + ", host=" + host + ", port=" + port + ", transport=" + transport + ", debug=" + debug + ", authenticationRequired=" + authenticationRequired + ", systemAdminEmailAddress=" + systemAdminEmailAddress + ", mailStatsEnabled=" + mailStatsEnabled + "]";
- }
-}
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/ForwardingStream.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/ForwardingStream.java
new file mode 100644
index 00000000000..707f7124f0d
--- /dev/null
+++ b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/ForwardingStream.java
@@ -0,0 +1,90 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osee.mail.internal;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * Based on org.apache.commons.exec.LogOutputStream
+ *
+ * @author Roberto E. Escobar
+ */
+public abstract class ForwardingStream extends OutputStream {
+
+ private static final int INTIAL_SIZE = 132;
+ private static final int CR = 0x0d;
+ private static final int LF = 0x0a;
+
+ private final ByteArrayOutputStream buffer = new ByteArrayOutputStream(INTIAL_SIZE);
+
+ private boolean skip = false;
+
+ @Override
+ public void write(final int cc) {
+ final byte c = (byte) cc;
+ if (c == '\n' || c == '\r') {
+ if (!skip) {
+ forwardBuffer();
+ }
+ } else {
+ buffer.write(cc);
+ }
+ skip = c == '\r';
+ }
+
+ protected void forwardBuffer() {
+ forward(buffer.toString());
+ buffer.reset();
+ }
+
+ @Override
+ public void write(final byte[] b, final int off, final int len) {
+ int offset = off;
+ int blockStartOffset = offset;
+ int remaining = len;
+ while (remaining > 0) {
+ while (remaining > 0 && b[offset] != LF && b[offset] != CR) {
+ offset++;
+ remaining--;
+ }
+ final int blockLength = offset - blockStartOffset;
+ if (blockLength > 0) {
+ buffer.write(b, blockStartOffset, blockLength);
+ }
+ while (remaining > 0 && (b[offset] == LF || b[offset] == CR)) {
+ write(b[offset]);
+ offset++;
+ remaining--;
+ }
+ blockStartOffset = offset;
+ }
+ }
+
+ @Override
+ public void flush() {
+ if (buffer.size() > 0) {
+ forwardBuffer();
+ }
+ }
+
+ @Override
+ public void close() throws IOException {
+ if (buffer.size() > 0) {
+ forwardBuffer();
+ }
+ super.close();
+ }
+
+ protected abstract void forward(String data);
+
+}
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailMessageFactory.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailMessageFactory.java
index 8832232753b..7e7662309e7 100644
--- a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailMessageFactory.java
+++ b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailMessageFactory.java
@@ -10,10 +10,14 @@
*******************************************************************************/
package org.eclipse.osee.mail.internal;
+import java.io.PrintStream;
import java.util.Collection;
import java.util.Date;
import java.util.Properties;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.activation.DataHandler;
+import javax.activation.DataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
@@ -25,42 +29,54 @@ import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
+import org.eclipse.osee.framework.jdk.core.util.Strings;
+import org.eclipse.osee.logger.Log;
import org.eclipse.osee.mail.MailConstants;
import org.eclipse.osee.mail.MailMessage;
-import org.eclipse.osee.mail.MailServiceConfig;
+import org.eclipse.osee.mail.MailUtils;
/**
* @author Roberto E. Escobar
*/
public class MailMessageFactory {
- private final MailServiceConfig config;
+ private final Log logger;
+ private final AtomicInteger testCounter;
- public MailMessageFactory(MailServiceConfig config) {
- this.config = config;
+ public MailMessageFactory(Log logger, AtomicInteger testCounter) {
+ this.logger = logger;
+ this.testCounter = testCounter;
}
- public Session createSession() {
- final Properties props = System.getProperties();
+ public Session createSession(String transport, String host, int port, boolean requiresAuthentication) {
+ final Properties props = new Properties();
- String transport = config.getTransport();
props.put("mail.transport.protocol", transport);
- props.put("mail." + transport + ".host", config.getHost());
- props.put("mail." + transport + ".port", String.valueOf(config.getPort()));
- props.put("mail." + transport + ".auth", String.valueOf(config.isAuthenticationRequired()).toLowerCase());
- props.put("mail.debug", config.isDebug());
+ props.put("mail." + transport + ".host", host);
+ props.put("mail." + transport + ".port", String.valueOf(port));
+ props.put("mail." + transport + ".auth", String.valueOf(requiresAuthentication).toLowerCase());
+
+ boolean isDebugEnabled = logger != null && logger.isDebugEnabled();
+ props.put("mail.debug", isDebugEnabled);
Session session = Session.getDefaultInstance(props);
- session.setDebug(config.isDebug());
- session.setDebugOut(System.out);
+ session.setDebug(isDebugEnabled);
+ if (isDebugEnabled) {
+ session.setDebugOut(new PrintStream(new ForwardingStream() {
+ @Override
+ protected void forward(String data) {
+ logger.debug(data);
+ }
+ }));
+ }
return session;
}
- public Transport createTransport(Session session) throws MessagingException {
+ public Transport createTransport(Session session, String username, String password) throws MessagingException {
Transport transport = session.getTransport();
if (!transport.isConnected()) {
- if (config.isAuthenticationRequired()) {
- transport.connect(config.getUserName(), config.getPassword());
+ if (Strings.isValid(username) && Strings.isValid(password)) {
+ transport.connect(username, password);
} else {
transport.connect();
}
@@ -88,6 +104,27 @@ public class MailMessageFactory {
return message;
}
+ public MailMessage createTestMessage(String adminEmail, String subject, String plainTextBody) {
+ MailMessage message = new MailMessage();
+ message.setId(UUID.randomUUID().toString());
+ message.setFrom(adminEmail);
+ message.getRecipients().add(adminEmail);
+
+ String subjectWithCounter = String.format("%s #%s", subject, testCounter.incrementAndGet());
+ message.setSubject(subjectWithCounter);
+
+ String htmlData =
+ String.format("<html><body><big>%s</big><p>%s</p></body></html>", subjectWithCounter, plainTextBody);
+ DataSource source;
+ try {
+ source = MailUtils.createAlternativeDataSource("test.email", htmlData, plainTextBody);
+ } catch (Exception ex) {
+ source = MailUtils.createFromString("test.email", plainTextBody);
+ }
+ message.addAttachment(source);
+ return message;
+ }
+
private Address[] toAddress(Collection<String> rawAddresses) throws AddressException {
InternetAddress[] toReturn = new InternetAddress[rawAddresses.size()];
int index = 0;
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailServiceImpl.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailServiceImpl.java
index 32c9295cdd1..e2ffcf9c6fe 100644
--- a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailServiceImpl.java
+++ b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/MailServiceImpl.java
@@ -13,17 +13,14 @@ package org.eclipse.osee.mail.internal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
-import java.util.UUID;
import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
-import javax.activation.DataSource;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.mail.event.TransportListener;
import org.eclipse.osee.event.EventService;
-import org.eclipse.osee.mail.MailConstants;
+import org.eclipse.osee.logger.Log;
+import org.eclipse.osee.mail.MailConfiguration;
import org.eclipse.osee.mail.MailMessage;
import org.eclipse.osee.mail.MailService;
-import org.eclipse.osee.mail.MailServiceConfig;
-import org.eclipse.osee.mail.MailUtils;
import org.eclipse.osee.mail.SendMailStatus;
/**
@@ -31,69 +28,58 @@ import org.eclipse.osee.mail.SendMailStatus;
*/
public class MailServiceImpl implements MailService {
- private MailServiceConfig config;
- private MailMessageFactory factory;
private EventService eventService;
- private TransportListener[] listeners;
+ private Log logger;
- public void setEventService(EventService eventService) {
- this.eventService = eventService;
- }
-
- public EventService getEventService() {
- return eventService;
- }
+ private MailMessageFactory factory;
+ private TransportListener[] listeners;
+ private volatile MailConfiguration config;
- @Override
- public MailServiceConfig getConfiguration() {
- return config;
+ public void setLogger(Log logger) {
+ this.logger = logger;
}
- @Override
- public void setConfiguration(MailServiceConfig config) {
- this.config.setTo(config);
+ public void setEventService(EventService eventService) {
+ this.eventService = eventService;
}
- public synchronized void start(Map<String, ?> props) {
- config = new MailServiceConfig();
- factory = new MailMessageFactory(config);
- getEventService().postEvent(MailConstants.REGISTRATION_EVENT, props);
-
+ public void start(Map<String, Object> props) {
+ logger.trace("Starting [%s]...", getClass().getSimpleName());
+ update(props);
+ AtomicInteger testCounter = new AtomicInteger();
+ factory = new MailMessageFactory(logger, testCounter);
listeners = new TransportListener[] {new MailTransportListener(eventService)};
}
- public synchronized void stop(Map<String, ?> props) {
- getEventService().postEvent(MailConstants.DEREGISTRATION_EVENT, props);
+ public void stop(Map<String, Object> props) {
+ logger.trace("Stopping [%s]...", getClass().getSimpleName());
listeners = null;
+ factory = null;
+ config = null;
+ }
+
+ public void update(Map<String, Object> props) {
+ logger.trace("Configuring [%s]...", getClass().getSimpleName());
+ config = MailConfiguration.newConfig(props);
}
@Override
- public List<Callable<SendMailStatus>> createSendCalls(long waitForStatus, TimeUnit timeUnit, MailMessage... emails) {
+ public List<Callable<SendMailStatus>> createSendCalls(MailMessage... emails) {
+ final MailConfiguration configCopy = config.copy();
+ long waitForStatus = configCopy.getStatusWaitTime();
List<Callable<SendMailStatus>> callables = new ArrayList<Callable<SendMailStatus>>();
for (MailMessage mail : emails) {
- callables.add(new SendMailCallable(factory, mail, waitForStatus, timeUnit, listeners));
+ callables.add(new SendMailCallable(configCopy, factory, mail, waitForStatus, listeners));
}
return callables;
}
@Override
- public MailMessage createSystemTestMessage(int testNumber) {
- MailServiceConfig config = getConfiguration();
- MailMessage message = new MailMessage();
- message.setId(UUID.randomUUID().toString());
- message.setFrom(config.getSystemAdminEmailAddress());
- message.setSubject(String.format("Test email #%s", testNumber));
- message.getRecipients().add(config.getSystemAdminEmailAddress());
-
- String plainText = String.format("This is test email %s sent from org.eclipse.osee.mail.admin", testNumber);
- String htmlData = String.format("<html><body><h4>%s</h4></body></html>", plainText);
- DataSource source;
- try {
- source = MailUtils.createAlternativeDataSource("TestEmail", htmlData, plainText);
- } catch (Exception ex) {
- source = MailUtils.createFromString("TestEmail", plainText);
- }
- message.addAttachment(source);
- return message;
+ public MailMessage createSystemTestMessage() {
+ final MailConfiguration configCopy = config.copy();
+ String adminEmail = configCopy.getAdminEmail();
+ String subject = configCopy.getTestEmailSubject();
+ String body = configCopy.getTestEmailBody();
+ return factory.createTestMessage(adminEmail, subject, body);
}
}
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/SendMailCallable.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/SendMailCallable.java
index bf46158f6c5..dbb6e5b4bd2 100644
--- a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/SendMailCallable.java
+++ b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/SendMailCallable.java
@@ -11,13 +11,13 @@
package org.eclipse.osee.mail.internal;
import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.event.TransportListener;
import javax.mail.internet.MimeMessage;
+import org.eclipse.osee.mail.MailConfiguration;
import org.eclipse.osee.mail.MailMessage;
import org.eclipse.osee.mail.MailUtils;
import org.eclipse.osee.mail.SendMailStatus;
@@ -28,18 +28,18 @@ import org.eclipse.osee.mail.SendMailStatus.MailStatus;
*/
public class SendMailCallable implements Callable<SendMailStatus> {
+ private final MailConfiguration config;
private final MailMessage email;
private final MailMessageFactory factory;
private final TransportListener[] listeners;
private final long waitForStatus;
- private final TimeUnit timeUnit;
- public SendMailCallable(MailMessageFactory factory, MailMessage email, long waitForStatus, TimeUnit timeUnit, TransportListener... listeners) {
+ public SendMailCallable(MailConfiguration config, MailMessageFactory factory, MailMessage email, long waitForStatus, TransportListener... listeners) {
+ this.config = config;
this.factory = factory;
this.email = email;
this.listeners = listeners;
this.waitForStatus = waitForStatus;
- this.timeUnit = timeUnit;
}
@Override
@@ -47,9 +47,16 @@ public class SendMailCallable implements Callable<SendMailStatus> {
MailcapCommandMap mc = MailUtils.getMailcapCommandMap();
CommandMap.setDefaultCommandMap(mc);
- final Session session = factory.createSession();
+ String transportProtocol = config.getTransport();
+ String host = config.getHost();
+ int port = config.getPort();
+ boolean requiresAuthentication = config.isAuthenticationRequired();
+ String username = config.getUserName();
+ String password = config.getPassword();
+
+ final Session session = factory.createSession(transportProtocol, host, port, requiresAuthentication);
final MimeMessage message = factory.createMimeMessage(session, email);
- final Transport transport = factory.createTransport(session);
+ final Transport transport = factory.createTransport(session, username, password);
final SendMailStatus status = new SendMailStatus();
StatusTransportListener statusListener = new StatusTransportListener(status);
@@ -63,8 +70,7 @@ public class SendMailCallable implements Callable<SendMailStatus> {
message.saveChanges();
transport.sendMessage(message, message.getAllRecipients());
synchronized (statusListener) {
- long waitMillis = timeUnit.toMillis(waitForStatus);
- statusListener.wait(waitMillis);
+ statusListener.wait(waitForStatus);
}
} finally {
if (listeners != null) {
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailApplication.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailApplication.java
index fce64f7e68b..3f5e4938f68 100644
--- a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailApplication.java
+++ b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailApplication.java
@@ -31,7 +31,6 @@ public class MailApplication extends Application {
public void start() {
singletons.add(new MailResource(mailService));
- singletons.add(new MailConfigResource(mailService));
}
public void stop() {
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailConfigResource.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailConfigResource.java
deleted file mode 100644
index 2c66a6bfe8f..00000000000
--- a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailConfigResource.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Boeing.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Boeing - initial API and implementation
- *******************************************************************************/
-package org.eclipse.osee.mail.internal.resources;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.xml.bind.JAXBElement;
-import org.eclipse.osee.mail.MailService;
-import org.eclipse.osee.mail.MailServiceConfig;
-
-/**
- * @author Roberto E. Escobar
- */
-@Path("config")
-public class MailConfigResource {
-
- private final MailService mailService;
-
- public MailConfigResource(MailService mailService) {
- super();
- this.mailService = mailService;
- }
-
- @GET
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public MailServiceConfig getConfig() {
- return mailService.getConfiguration();
- }
-
- @POST
- @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
- public Response updateConfig(JAXBElement<MailServiceConfig> jaxConfig) {
- MailServiceConfig config = jaxConfig.getValue();
- return postAndGetResponse(config);
- }
-
- private Response postAndGetResponse(MailServiceConfig config) {
- mailService.setConfiguration(config);
- return Response.ok("Mail Service Configuration Updated", MediaType.TEXT_PLAIN).build();
- }
-}
diff --git a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailResource.java b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailResource.java
index 20c20d3d4a8..a6e7282d94b 100644
--- a/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailResource.java
+++ b/plugins/org.eclipse.osee.mail/src/org/eclipse/osee/mail/internal/resources/MailResource.java
@@ -36,9 +36,6 @@ import org.eclipse.osee.mail.SendMailStatus;
@Path("send")
public class MailResource {
- private static long STATUS_WAIT_TIME = 60;
- private static int testEmailCount = 0;
-
private final MailService mailService;
public MailResource(MailService mailService) {
@@ -49,14 +46,14 @@ public class MailResource {
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public MailMessage getTestMailMessage() {
- return mailService.createSystemTestMessage(++testEmailCount);
+ return mailService.createSystemTestMessage();
}
@POST
@Path("test")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public SendMailStatus sendTestMail() throws Exception {
- MailMessage message = mailService.createSystemTestMessage(++testEmailCount);
+ MailMessage message = mailService.createSystemTestMessage();
List<SendMailStatus> results = sendMail(message);
return results.iterator().next();
@@ -74,7 +71,7 @@ public class MailResource {
}
private List<SendMailStatus> sendMail(MailMessage... messages) throws InterruptedException, ExecutionException {
- List<Callable<SendMailStatus>> calls = mailService.createSendCalls(STATUS_WAIT_TIME, TimeUnit.SECONDS, messages);
+ List<Callable<SendMailStatus>> calls = mailService.createSendCalls(messages);
List<Future<SendMailStatus>> futures = new ArrayList<Future<SendMailStatus>>();
if (messages.length > 0) {

Back to the top