/*
* 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.dao;
import hk.hku.cecid.ebms.spa.handler.MessageClassifier;
import hk.hku.cecid.piazza.commons.dao.DAOException;
import hk.hku.cecid.piazza.commons.dao.DVO;
import hk.hku.cecid.piazza.commons.dao.ds.DataSourceDAO;
import hk.hku.cecid.piazza.commons.dao.ds.DataSourceProcess;
import hk.hku.cecid.piazza.commons.dao.ds.DataSourceTransaction;
/**
* @author Donahue Sze
*
*/
public class MessageServerDataSourceDAO extends DataSourceDAO implements
MessageServerDAO {
public void storeMessage(final MessageDVO messageDVO,
final RepositoryDVO repositoryDVO) throws DAOException {
setPartnershipId(messageDVO);
DataSourceProcess process = new DataSourceProcess(this) {
protected void doTransaction(DataSourceTransaction tx)
throws DAOException {
MessageDAO messageDAO = (MessageDAO) getFactory().createDAO(
MessageDAO.class);
RepositoryDAO repositoryDAO = (RepositoryDAO) getFactory()
.createDAO(RepositoryDAO.class);
messageDAO.setTransaction(tx);
repositoryDAO.setTransaction(tx);
messageDAO.addMessage(messageDVO);
repositoryDAO.addRepository(repositoryDVO);
}
};
process.start();
}
/*public void storeInboxMessage(final MessageDVO messageDVO,
final InboxDVO inboxDVO) throws DAOException {
DataSourceProcess process = new DataSourceProcess(this) {
protected void doTransaction(DataSourceTransaction tx)
throws DAOException {
MessageDAO messageDAO = (MessageDAO) getFactory().createDAO(
MessageDAO.class);
InboxDAO inboxDAO = (InboxDAO) getFactory().createDAO(
InboxDAO.class);
messageDAO.setTransaction(tx);
inboxDAO.setTransaction(tx);
messageDAO.updateMessage(messageDVO);
inboxDAO.addInbox(inboxDVO);
}
};
process.start();
}*/
public void storeOutboxMessage(
final MessageDVO messageDVO,
final RepositoryDVO repositoryDVO,
final OutboxDVO outboxDVO,
final MessageDVO primalMsgDVO) throws DAOException {
setPartnershipId(messageDVO);
MessageDAO messageDAO = (MessageDAO) getFactory().createDAO(
MessageDAO.class);
boolean exists = messageDAO.findMessage(messageDVO);
if(exists) {
throw new DAOException("unable to store message in outbox, message with messageId " + messageDVO.getMessageId() + " already exists");
}
DataSourceProcess process = new DataSourceProcess(this) {
protected void doTransaction(DataSourceTransaction tx)
throws DAOException {
MessageDAO messageDAO = (MessageDAO) getFactory().createDAO(
MessageDAO.class);
RepositoryDAO repositoryDAO = (RepositoryDAO) getFactory()
.createDAO(RepositoryDAO.class);
OutboxDAO outboxDAO = (OutboxDAO) getFactory().createDAO(
OutboxDAO.class);
messageDAO.setTransaction(tx);
repositoryDAO.setTransaction(tx);
outboxDAO.setTransaction(tx);
if (primalMsgDVO != null) {
messageDAO.persist(primalMsgDVO);
}
messageDAO.addMessage(messageDVO);
repositoryDAO.addRepository(repositoryDVO);
outboxDAO.addOutbox(outboxDVO);
}
};
process.start();
}
private void setPartnershipId(MessageDVO msgDVO) throws DAOException {
PartnershipDAO partnershipDAO = (PartnershipDAO) getFactory().createDAO(PartnershipDAO.class);
PartnershipDVO partnershipDVO = (PartnershipDVO) partnershipDAO.createDVO();
partnershipDVO.setCpaId(msgDVO.getCpaId());
partnershipDVO.setService(msgDVO.getService());
partnershipDVO.setAction(msgDVO.getAction());
if (partnershipDAO.findPartnershipByCPA(partnershipDVO)) {
msgDVO.setPartnershipId(partnershipDVO.getPartnershipId());
}
}
public void clearMessage(final MessageDVO data) throws DAOException {
DataSourceProcess process = new DataSourceProcess(this) {
protected void doTransaction(DataSourceTransaction tx)
throws DAOException {
MessageDAO messageDAO = (MessageDAO) getFactory().createDAO(
MessageDAO.class);
InboxDAO inboxDAO = (InboxDAO) getFactory().createDAO(
InboxDAO.class);
OutboxDAO outboxDAO = (OutboxDAO) getFactory().createDAO(
OutboxDAO.class);
messageDAO.setTransaction(tx);
inboxDAO.setTransaction(tx);
outboxDAO.setTransaction(tx);
messageDAO.updateMessage(data);
String message_box = data.getMessageBox();
if (message_box
.equalsIgnoreCase(MessageClassifier.MESSAGE_BOX_INBOX)) {
InboxDVO inboxDVO = (InboxDVO) inboxDAO.createDVO();
inboxDVO.setMessageId(data.getMessageId());
inboxDAO.deleteInbox(inboxDVO);
} else {
OutboxDVO outboxDVO = (OutboxDVO) outboxDAO.createDVO();
outboxDVO.setMessageId(data.getMessageId());
outboxDAO.deleteOutbox(outboxDVO);
}
}
};
process.start();
}
/*
* (non-Javadoc)
*
* @see hk.hku.cecid.piazza.commons.dao.DAO#createDVO()
*/
public DVO createDVO() {
return new MessageServerDataSourceDVO();
}
}