/*
* Copyright(c) 2005 Center for E-Commerce Infrastructure Development, The
* University of Hong Kong (HKU). All Rights Reserved.
*
* This software is licensed under the GNU GENERAL PUBLIC LICENSE Version 2.0 [1]
*
* [1] http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
*/
package hk.hku.cecid.ebms.spa.handler;
import hk.hku.cecid.ebms.pkg.EbxmlMessage;
import hk.hku.cecid.ebms.pkg.SignatureException;
import hk.hku.cecid.ebms.pkg.SignatureHandler;
import hk.hku.cecid.ebms.spa.EbmsProcessor;
import hk.hku.cecid.ebms.spa.listener.EbmsRequest;
import hk.hku.cecid.ebms.spa.listener.EbmsResponse;
import hk.hku.cecid.piazza.commons.module.ActiveModule;
import hk.hku.cecid.piazza.commons.security.KeyStoreManagementException;
import hk.hku.cecid.piazza.commons.security.KeyStoreTrustManager;
import java.security.cert.Certificate;
import java.util.Properties;
/**
* EbxmlMessageDAOConvertor Service Handler that supports asynchronous
* communication and reliable messaging.
*
* @author cyng
* @version $Revision: 1.6 $
*/
public class MessageServiceHandler {
private static MessageServiceHandler messageServiceHandler;
private boolean hasSmtp = false;
private boolean hasPop = false;
private boolean isInboundAgreementCheck = false;
private boolean isOutboundAgreementCheck = false;
private boolean isSignHeaderOnly = false;
private static String dsUsername;
private static char[] dsPassword;
private static String dsKeyStoreLocation;
// private static String dsStoreType;
// private static String dsProvider;
public String smtpHost;
public String smtpProtocol;
public String smtpPort;
public String smtpFromMailAddress;
public String smtpUsername;
public String smtpPassword;
public String popHost;
public String popProtocol;
public String popPort;
public String popFolder;
public String popUsername;
public String popPassword;
/*
private String XPATH_DELIVERY_MANAGER = "/ebms/delivery_manager";
private String XPATH_OUTBOX_DELIVERY_MANAGER = "/outbox_delivery_manager";
private String XPATH_INBOX_DELIVERY_MANAGER = "/inbox_delivery_manager";
private String XPATH_DELIVERY_MANAGER_INTERVAL = "/delivery_manager_interval";
private String XPATH_MAX_NUM_THREAD_LIST = "/max_thread_count";
*/
private String XPATH_USERNAME = "/username";
private String XPATH_PASSWORD = "/password";
private String XPATH_MAIL = "/ebms/mail";
private String XPATH_ENABLE = "/enable";
private String XPATH_SMTP = "/smtp";
private String XPATH_POP = "/pop";
private String XPATH_HOST = "/host";
private String XPATH_FROM_MAIL_ADDRESS = "/from_mail_address";
private String XPATH_PROTOCOL = "/protocol";
private String XPATH_PORT = "/port";
private String XPATH_FOLDER = "/folder";
/*
private String XPATH_SMIME = "/smime";
private String XPATH_ENCRYPTION = "/encryption";
private String XPATH_DECRYPTION = "/decryption";
private String XPATH_KEY_STORE_PASSWORD = "/key_store_password";
private String XPATH_ALIAS = "/alias";
private String XPATH_KEY_PASSWORD = "/key_password";
*/
private String XPATH_INBOUND_AGREEMENT_CHECK = "/ebms/inbound_agreement_check";
private String XPATH_OUTBOUND_AGREEMENT_CHECK = "/ebms/outbound_agreement_check";
private String XPATH_SIGN_HEADER_ONLY = "/ebms/sign_header_only";
public String INBOX = "inbox";
public String OUTBOX = "outbox";
public String THREAD_COUNT = "threadCount";
public String PEEK_THREAD_COUNT = "peekThreadCount";
private MessageServiceHandler() {
// digital signature
try {
Properties signparams = EbmsProcessor.getKeyStoreManagerForSignature().getParameters();
dsUsername = signparams.getProperty("key-alias");
dsPassword = signparams.getProperty("keystore-password").toCharArray();
dsKeyStoreLocation = signparams.getProperty("keystore-location");
/*
dsStoreType = signparams.getProperty("keystore-type");
dsProvider = signparams.getProperty("keystore-provider");
*/
} catch (Exception e) {
EbmsProcessor.core.log.debug(
"Error in getting key store for signature", e);
}
// smtp server
String smtpEnable = EbmsProcessor.core.properties
.getProperty(XPATH_MAIL + XPATH_SMTP + XPATH_ENABLE);
if (smtpEnable.equalsIgnoreCase("true")) {
hasSmtp = true;
smtpHost = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_SMTP + XPATH_HOST);
smtpProtocol = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_SMTP + XPATH_PROTOCOL);
smtpPort = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_SMTP + XPATH_PORT);
smtpFromMailAddress = EbmsProcessor.core.properties
.getProperty(XPATH_MAIL + XPATH_SMTP
+ XPATH_FROM_MAIL_ADDRESS);
smtpUsername = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_SMTP + XPATH_USERNAME);
smtpPassword = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_SMTP + XPATH_PASSWORD);
EbmsProcessor.core.log.debug("Smtp Server Setting: ");
EbmsProcessor.core.log.debug("- Smtp Host: " + smtpHost);
EbmsProcessor.core.log.debug("- Smtp Protocol: " + smtpProtocol);
EbmsProcessor.core.log.debug("- Smtp Port: " + smtpPort);
EbmsProcessor.core.log.debug("- Smtp From Mail Address: "
+ smtpFromMailAddress);
EbmsProcessor.core.log.debug("- Smtp Username: " + smtpUsername);
EbmsProcessor.core.log.debug("- Smtp Password: " + smtpPassword);
}
// pop server
String popEnable = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_POP + XPATH_ENABLE);
if (popEnable.equalsIgnoreCase("true")) {
hasPop = true;
popHost = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_POP + XPATH_HOST);
popProtocol = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_POP + XPATH_PROTOCOL);
popPort = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_POP + XPATH_PORT);
popFolder = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_POP + XPATH_FOLDER);
popUsername = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_POP + XPATH_USERNAME);
popPassword = EbmsProcessor.core.properties.getProperty(XPATH_MAIL
+ XPATH_POP + XPATH_PASSWORD);
((ActiveModule) EbmsProcessor.getModuleGroup().getModule(
"ebms.mail-collector")).start();
EbmsProcessor.core.log.info("Mail Collector started - Host: "
+ popHost);
EbmsProcessor.core.log.debug("Pop Server Setting: ");
EbmsProcessor.core.log.debug("- Pop Host: " + popHost);
EbmsProcessor.core.log.debug("- Pop Protocol: " + popProtocol);
EbmsProcessor.core.log.debug("- Pop Port: " + popPort);
EbmsProcessor.core.log.debug("- Pop Folder: " + popFolder);
EbmsProcessor.core.log.debug("- Pop Username: " + popUsername);
EbmsProcessor.core.log.debug("- Pop Password: " + popPassword);
}
// optional properties for interop
String inboundAgreementCheck = EbmsProcessor.core.properties
.getProperty(XPATH_INBOUND_AGREEMENT_CHECK);
if (inboundAgreementCheck != null) {
if (inboundAgreementCheck.equalsIgnoreCase("true")) {
isInboundAgreementCheck = true;
}
}
String outboundAgreementCheck = EbmsProcessor.core.properties
.getProperty(XPATH_OUTBOUND_AGREEMENT_CHECK);
if (outboundAgreementCheck != null) {
if (outboundAgreementCheck.equalsIgnoreCase("true")) {
isOutboundAgreementCheck = true;
}
}
String signHeaderOnly = EbmsProcessor.core.properties
.getProperty(XPATH_SIGN_HEADER_ONLY);
if (signHeaderOnly != null) {
if (signHeaderOnly.equalsIgnoreCase("true")) {
isSignHeaderOnly = true;
}
}
}
static boolean messageServiceHandler_initFlag = false;
public synchronized static MessageServiceHandler getInstance() {
if (!messageServiceHandler_initFlag) {
EbmsProcessor.core.log.debug("Message service handler started");
messageServiceHandler = new MessageServiceHandler();
messageServiceHandler_initFlag = true;
}
return messageServiceHandler;
}
static boolean messageServiceHandler_destroyFlag = false;
public synchronized void destroy() {
if (!messageServiceHandler_destroyFlag) {
messageServiceHandler_destroyFlag = true;
EbmsProcessor.core.log.debug("Message service handler stopped");
}
}
public void processInboundMessage(EbmsRequest request, EbmsResponse response)
throws MessageServiceHandlerException {
InboundMessageProcessor inboundMessageProcessor = InboundMessageProcessor
.getInstance();
inboundMessageProcessor.processIncomingMessage(request, response);
}
public void processOutboundMessage(EbmsRequest request,
EbmsResponse response) throws MessageServiceHandlerException {
OutboundMessageProcessor outboundMessageProcessor =
OutboundMessageProcessor.getInstance();
outboundMessageProcessor.processOutgoingMessage(request, response);
}
public static SignatureHandler createSignatureHandler(EbxmlMessage message)
throws SignatureException {
KeyStoreTrustManager trustman;
try {
trustman = new KeyStoreTrustManager(EbmsProcessor.getKeyStoreManagerForSignature());
}
catch (KeyStoreManagementException e) {
throw new SignatureException("Unable to create keystore trust manager for signature", e);
}
return new SignatureHandler(message, dsUsername, dsPassword,
dsKeyStoreLocation, trustman);
}
public static SignatureHandler createSignatureHandler(EbxmlMessage message,
Certificate certificate) throws SignatureException {
return new SignatureHandler(message, certificate);
}
/**
* @return Returns the hasSmtp.
*/
public boolean isHasSmtp() {
return hasSmtp;
}
/**
* @return Returns the hasPop.
*/
public boolean isHasPop() {
return hasPop;
}
/**
* @return Returns the isInboundAgreementCheck.
*/
public boolean isInboundAgreementCheck() {
return isInboundAgreementCheck;
}
/**
* @return Returns the isSignHeaderOnly.
*/
public boolean isSignHeaderOnly() {
return isSignHeaderOnly;
}
/**
* @return Returns the isOutboundAgreementCheck.
*/
public boolean isOutboundAgreementCheck() {
return isOutboundAgreementCheck;
}
}