/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 io.milton.mail;
import io.milton.mail.pop.MinaPopServer;
import io.milton.mail.pop.PopServer;
import io.milton.mail.receive.AuthenticatedSmtpServer;
import io.milton.mail.receive.SmtpServer;
import io.milton.mail.receive.SubethaSmtpServer;
import io.milton.mail.send.AspirinMailSender;
import io.milton.mail.send.MailSender;
import java.util.List;
import org.masukomi.aspirin.core.AspirinInternal;
import org.masukomi.aspirin.core.config.Configuration;
import org.masukomi.aspirin.core.delivery.DeliveryManager;
import org.masukomi.aspirin.core.listener.ListenerManager;
import org.masukomi.aspirin.core.store.mail.MailStore;
import org.masukomi.aspirin.core.store.mail.FileMailStore;
import org.masukomi.aspirin.core.store.queue.QueueStore;
import org.masukomi.aspirin.core.store.queue.SimpleQueueStore;
/**
*
* @author brad
*/
public class MailServerBuilder {
private MailResourceFactory mailResourceFactory;
private MailSender mailSender;
private SmtpServer smtpServer;
private SmtpServer msaSmtpServer;
private PopServer popServer;
private AspirinInternal aspirinInternal;
private Configuration aspirinConfiguration;
private ListenerManager listenerManager;
private DeliveryManager deliveryManager;
private QueueStore queueStore;
private MailStore mailStore;
private boolean enableSender = true;
private boolean enableSmtp = true;
private boolean enableMsa = true;
private boolean enablePop = false;
private List<Filter> filters;
private int smtpPort = 25;
private int msaSmtpPort = 587;
private boolean enableSmtpTls = false;
private boolean enableMsaSmtpTls = false;
/**
* Builds the MailServer from supplied options, but does not start it.
*
* To start it, call start on the MailServer
*
* @return
*/
public MailServer build() {
if (mailSender == null) {
if (enableSender) {
if (listenerManager == null) {
listenerManager = new ListenerManager();
}
if (aspirinConfiguration == null) {
aspirinConfiguration = new Configuration();
}
if (queueStore == null) {
queueStore = new SimpleQueueStore(aspirinConfiguration, listenerManager);
}
if (mailStore == null) {
mailStore = new FileMailStore(aspirinConfiguration);
}
if( deliveryManager == null ) {
deliveryManager = new DeliveryManager(aspirinConfiguration, queueStore, mailStore);
}
listenerManager.setDeliveryManager(deliveryManager);
if( aspirinInternal == null ) {
aspirinInternal = new AspirinInternal(aspirinConfiguration, deliveryManager, listenerManager);
}
mailSender = new AspirinMailSender(aspirinInternal, deliveryManager, listenerManager);
}
}
if (smtpServer == null) {
if (enableSmtp) {
smtpServer = new SubethaSmtpServer(smtpPort, enableSmtpTls, mailResourceFactory, filters);
}
}
if (msaSmtpServer == null) {
if (enableMsa) {
msaSmtpServer = new AuthenticatedSmtpServer(msaSmtpPort, enableMsaSmtpTls, mailResourceFactory, mailSender, filters);
}
}
if (popServer == null) {
if (enablePop) {
popServer = new MinaPopServer(mailResourceFactory, filters);
}
}
return new MailServer(mailSender, smtpServer, popServer, msaSmtpServer);
}
public MailSender getMailSender() {
return mailSender;
}
public void setMailSender(MailSender mailSender) {
this.mailSender = mailSender;
}
public SmtpServer getMsaSmtpServer() {
return msaSmtpServer;
}
public void setMsaSmtpServer(SmtpServer msaSmtpServer) {
this.msaSmtpServer = msaSmtpServer;
}
public PopServer getPopServer() {
return popServer;
}
public void setPopServer(PopServer popServer) {
this.popServer = popServer;
}
public SmtpServer getSmtpServer() {
return smtpServer;
}
public void setSmtpServer(SmtpServer smtpServer) {
this.smtpServer = smtpServer;
}
public List<Filter> getFilters() {
return filters;
}
public void setFilters(List<Filter> filters) {
this.filters = filters;
}
public MailResourceFactory getMailResourceFactory() {
return mailResourceFactory;
}
public void setMailResourceFactory(MailResourceFactory mailResourceFactory) {
this.mailResourceFactory = mailResourceFactory;
}
public boolean isEnableMsa() {
return enableMsa;
}
public void setEnableMsa(boolean enableMsa) {
this.enableMsa = enableMsa;
}
public boolean isEnablePop() {
return enablePop;
}
public void setEnablePop(boolean enablePop) {
this.enablePop = enablePop;
}
public boolean isEnableSender() {
return enableSender;
}
public void setEnableSender(boolean enableSender) {
this.enableSender = enableSender;
}
public boolean isEnableSmtp() {
return enableSmtp;
}
public void setEnableSmtp(boolean enableSmtp) {
this.enableSmtp = enableSmtp;
}
public Configuration getAspirinConfiguration() {
return aspirinConfiguration;
}
public void setAspirinConfiguration(Configuration aspirinConfiguration) {
this.aspirinConfiguration = aspirinConfiguration;
}
public int getSmtpPort() {
return smtpPort;
}
public void setSmtpPort(int smtpPort) {
this.smtpPort = smtpPort;
}
public boolean isEnableSmtpTls() {
return enableSmtpTls;
}
public void setEnableSmtpTls(boolean enableSmtpTls) {
this.enableSmtpTls = enableSmtpTls;
}
public int getMsaSmtpPort() {
return msaSmtpPort;
}
public void setMsaSmtpPort(int msaSmtpPort) {
this.msaSmtpPort = msaSmtpPort;
}
public boolean isEnableMsaSmtpTls() {
return enableMsaSmtpTls;
}
public void setEnableMsaSmtpTls(boolean enableMsaSmtpTls) {
this.enableMsaSmtpTls = enableMsaSmtpTls;
}
public MailStore getMailStore() {
return mailStore;
}
public void setMailStore(MailStore mailStore) {
this.mailStore = mailStore;
}
public QueueStore getQueueStore() {
return queueStore;
}
public void setQueueStore(QueueStore queueStore) {
this.queueStore = queueStore;
}
public ListenerManager getListenerManager() {
return listenerManager;
}
public void setListenerManager(ListenerManager listenerManager) {
this.listenerManager = listenerManager;
}
public AspirinInternal getAspirinInternal() {
return aspirinInternal;
}
public void setAspirinInternal(AspirinInternal aspirinInternal) {
this.aspirinInternal = aspirinInternal;
}
public DeliveryManager getDeliveryManager() {
return deliveryManager;
}
public void setDeliveryManager(DeliveryManager deliveryManager) {
this.deliveryManager = deliveryManager;
}
}