/*
* 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.task;
import hk.hku.cecid.ebms.pkg.EbxmlMessage;
import hk.hku.cecid.ebms.spa.EbmsProcessor;
import hk.hku.cecid.ebms.spa.dao.InboxDAO;
import hk.hku.cecid.ebms.spa.dao.InboxDVO;
import hk.hku.cecid.ebms.spa.dao.MessageDAO;
import hk.hku.cecid.ebms.spa.dao.MessageDVO;
import hk.hku.cecid.ebms.spa.handler.EbxmlMessageDAOConvertor;
import hk.hku.cecid.ebms.spa.handler.MessageClassifier;
import hk.hku.cecid.piazza.commons.dao.DAOException;
import hk.hku.cecid.piazza.commons.module.ActiveTask;
import hk.hku.cecid.piazza.commons.util.StringUtilities;
import hk.hku.cecid.piazza.commons.net.HostInfo;
/**
* @author Donahue Sze
*
*/
public class InboxTask implements ActiveTask {
private MessageDVO message;
private long nextOrderNo;
public InboxTask(MessageDVO message, long nextOrderNo) {
this.message = message;
this.nextOrderNo = nextOrderNo;
}
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.module.ActiveTask#execute()
*/
public void execute() throws Exception {
try {
MessageDAO messageDAO = (MessageDAO) EbmsProcessor.core.dao
.createDAO(MessageDAO.class);
message.setStatus(MessageClassifier.INTERNAL_STATUS_PROCESSED);
message.setStatusDescription("Message is processed");
messageDAO.updateMessage(message);
InboxDAO inboxDAO = (InboxDAO) EbmsProcessor.core.dao
.createDAO(InboxDAO.class);
InboxDVO inboxDVO = (InboxDVO) inboxDAO.createDVO();
inboxDVO.setMessageId(message.getMessageId());
inboxDVO.setOrderNo(nextOrderNo);
inboxDVO.setHostname(HostInfo.GetLocalhostAddress());
inboxDAO.create(inboxDVO);
fireEvent();
EbmsProcessor.core.log.info("Ebxml Message ("
+ message.getMessageId()
+ ") is stored in inbox with order number: " + nextOrderNo);
} catch (DAOException e) {
EbmsProcessor.core.log
.error("Error in storing message to inbox", e);
throw new DeliveryException("Error in storing message to inbox", e);
}
}
private void fireEvent() throws MessageValidationException {
EbmsEventModule eventModule = (EbmsEventModule) EbmsProcessor
.getModuleGroup().getModule(EbmsEventModule.MODULE_ID);
if (eventModule.hasListeners()) {
EbxmlMessage ebxmlMessage = EbxmlMessageDAOConvertor
.getEbxmlMessage(message.getMessageId(),
MessageClassifier.MESSAGE_BOX_INBOX);
// Get message type
MessageClassifier messageClassifier = new MessageClassifier(
ebxmlMessage);
String messageType = messageClassifier.getMessageType();
if (messageType
.equalsIgnoreCase(MessageClassifier.MESSAGE_TYPE_ERROR)) {
eventModule.fireErrorOccurred(ebxmlMessage);
} else if (messageType
.equalsIgnoreCase(MessageClassifier.MESSAGE_TYPE_ACKNOWLEDGEMENT)) {
eventModule.fireResponseReceived(ebxmlMessage);
} else if (messageType
.equalsIgnoreCase(MessageClassifier.MESSAGE_TYPE_ORDER)) {
eventModule.fireMessageReceived(ebxmlMessage);
}
}
}
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.module.ActiveTask#isRetryEnabled()
*/
public boolean isRetryEnabled() {
return false;
}
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.module.ActiveTask#getRetryInterval()
*/
public long getRetryInterval() {
return 0;
}
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.module.ActiveTask#getMaxRetries()
*/
public int getMaxRetries() {
return 0;
}
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.module.ActiveTask#setRetried(int)
*/
public void setRetried(int arg0) {
}
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.module.ActiveTask#onFailure(java.lang.Throwable)
*/
public void onFailure(Throwable arg0) {
try {
EbmsProcessor.core.log.error(
"Exception when store the msg to inbox", arg0);
MessageDAO messageDAO = (MessageDAO) EbmsProcessor.core.dao
.createDAO(MessageDAO.class);
message.setStatus(MessageClassifier.INTERNAL_STATUS_PROCESSED_ERROR);
message.setStatusDescription("Processing error when put message into inbox: "
+ StringUtilities.toString(arg0));
messageDAO.updateMessage(message);
} catch (DAOException e) {
// e.printStackTrace();
}
}
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.module.ActiveTask#onAwake()
*/
public void onAwake() {
}
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.module.ActiveTask#isSucceedFast()
*/
public boolean isSucceedFast() {
return true;
}
}